Python数据结构与算法分析(第2版)
上QQ阅读APP看书,第一时间看更新

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.在报纸上找到一个数独游戏,并编写一个程序求解。