Упражнения

  1. Реализуйте простые методы getNum и getDen, возвращающие числитель и знаменатель дроби.
  2. Во многих отношениях было бы лучше, если бы все дроби приводились в сокращённом виде с самого начала. Измените конструктор класса Fraction таким образом, чтобы GCD использовался для сокращения дробей немедленно. Заметьте - это означает, что функция __add__ больше не нуждается в сокращениях. Произведите необходимые модификации.
  3. Реализуйте оставшиеся простые арифметические операторы (__sub__, __mul__ и __truediv__).
  4. Реализуйте оставшиеся операторы отношений (__gt__, __ge__, __lt__, __le__, and __ne__)
  5. Модифицируйте конструктор класса дробей таким образом, чтобы он поверял, являются ли числитель и знаменатель целыми числами. Если хотя бы одно из условий не выполняется, то вызовите исключение.
  6. В определении дробей мы предположили, что отрицательные дроби имеют отрицательный числитель и положительный знаменатель. Использование отрицательного знаменателя может повлечь за собой неправильные результаты некоторых операторов отношений. Вообще, это ограничение является не таким уж необходимым. Модифицируйте конструктор таким образом, чтобы позволить пользователю вводить отрицательный знаменатель, а все операторы продолжили работать правильным образом.
  7. Исследуйте метод __radd__. В чём его отличие от __add__? Когда он используется? Реализуйте __radd__.
  8. Задание аналогично предыдущему, но на этот раз рассмотрите __iadd__ метод.
  9. Исследуйте __repr__ метод. Чем он отличается от __str__? Когда используется? Реализуйте <code>__repr__``.
  10. Исследуйте другие типы существующих вентилей (таких как NAND(НЕ-И), NOR(НЕ-ИЛИ) и исключающее XOR(ИЛИ)). Добавьте их в иерархию цепей. Сколько дополнительного кода вам понадобилось?
  11. Наиболее простая арифметическая цепь называется полусумматор. Исследуйте и реализуйте её.
  12. Теперь расширьте эту цепь и реализуйте 8-битный полный сумматор.
  13. Симуляция цепи, показанная в данной части, работает в обратном направлении. Другими словами, выходное значение производится путём обратной работы через входные значения, которые в свою очередь запрашивают другие выходы. Это продолжается до тех пор, пока не будут найдены внешние входные линии. В этот момент у пользователя будут запрошены значения для них. Измените реализацию таким образом, чтобы эти действия происходили в прямом направлении: схема производила выход после получения значений на входах.
  14. Создайте класс, представляющий игровые карты. Потом создайте класс, представляющий колоду карт. Используя эти два класса, реализуйте вашу любимую карточную игру.
  15. Найдите головоломку Судоку в местной газете. Напишите программу для её решения.
Next Section - Цели