1.8 编程练习
1.实现简单的方法getNum和getDen,它们分别返回分数的分子和分母。
2.如果所有分数从一开始就是最简形式会更好。修改Fraction类的构造方法,立即使用最大公因数来化简分数。注意,这意味着__add__不再需要化简结果。
3.实现下列简单的算术运算:__sub__、__mul__和__truediv__。
4.实现下列关系运算:__gt__、__ge__、__lt__、__le__和__ne__。
5.修改Fraction类的构造方法,使其检查并确保分子和分母均为整数。如果任一不是整数,就抛出异常。
6.我们假设负的分数是由负的分子和正的分母构成的。使用负的分母会导致某些关系运算符返回错误的结果。一般来说,这是多余的限制。请修改构造方法,使得用户能够传入负的分母,并且所有的运算符都能返回正确的结果。
7.研究__radd__方法。它与__add__方法有何区别?何时应该使用它?请动手实现__radd__。
8.研究__iadd__方法。它与__add__方法有何区别?何时应该使用它?请动手实现__iadd__。
9.研究__repr__方法。它与__str__方法有何区别?何时应该使用它?请动手实现__repr__。
10.研究其他类型的逻辑门(例如与非门、或非门、异或门)。将它们加入电路的继承层次结构。你需要额外添加多少代码?
11.最简单的算术电路是半加器。研究简单的半加器电路并实现它。
12.将半加器电路扩展为8位的全加器。
13.本章展示的电路模拟是反向工作的。换句话说,给定一个电路,其输出结果是通过反向访问输入值来产生的,这会导致其他的输出值被反向查询。这个过程一直持续到外部输入值被找到,此时用户会被要求输入数值。修改当前的实现,使电路正向计算结果。当收到输入值的时候,电路就会生成输出结果。
14.设计一个表示一张扑克牌的类,以及一个表示一副扑克牌的类。使用这两个类实现你最喜欢的扑克牌游戏。
15.在报纸上找到一个数独游戏,并编写一个程序求解。