1 | 对应本书第一章。 |
0.简介
这本书的豆瓣评分高达9.3,python作为接近算法伪码的一种脚本语言,其实用它写算法是极好的,可以将注意力集中在算法本身。
但是由于python性能的问题,用python写算法不算太主流,因此市面上介绍算法的书也多以使用c/c++或者Java居多。
这本书几乎是用python介绍算法豆瓣评分最高的一本书了,网上可以下到pdf,但最好的阅读方式是直接使用这本书的网站。这本书可以直接在网站上运行示例程序。self check的部分还有作者视频讲解,这才是编程类书籍的未来嘛!
这里我记录每章的学习笔记,同时记录每章课后作业的个人解决代码,统一使用python3。
1.intro
笔记
这章主要给python做了个简短介绍,魔术方法部分以前没有仔细学习过,看看感觉挺好用,可以让自定义的方法看起来像内建的方法。
两个不错的学习链接:
作业
q1 to q9
完善处理分式的Fraction类。
1 | def gcd(m,n): |
1 | x = Fraction(1,2) |
1 | 7/6 |
1 | # q1 |
1 | 1 |
1 | # q2 |
1 | 2/1 |
1 | # q3 |
1 | 3/4 |
1 | # q4 |
1 | False |
1 | # q5 |
1 | Exception Traceback (most recent call last) |
1 | # q6 |
1 | -1/2 |
1 | # q7 |
1 | 3/2 |
1 | # q8 |
1 | 7/6 |
1 | # q9 |
1 | num:7, den:6 |
数字电路部分:
1 | # 作者实现的部分 |
1 | Enter Pin A input for gate G1-->1 |
q10
实现NAND, NOR, 和 XOR
1 | # q10 |
q11
实现half-adder
half adder的定义可参考wikipedia
1 | class InGate(UnaryGate): |
1 | Enter Pin input for gate I1-->1 |
上面的实现还是有些缺点,就是因为输出有两个,所以相同的输入要输两次。
q12
实现full adder
$$ S=A\oplus B\oplus
C_{in}$$
$$ {\displaystyle C_{\text{out}}=(A\cdot B)+(C_{\text{in}}\cdot
(A\oplus B))} $$
1 | # q12 |
1 | Enter Pin input for gate I1-->1 |