习题 34: 访问列表的元素
记住: 序数ordinal == 有序,以 1 开始;基数cardinal == 随机选取, 以 0 开始。
习题 35: 分支和函数
习题 36: 设计和调试
If 语句的规则
1. 每一个“if 语句”必须包含一个 else .
2. 如果这个 else 永远都不应该被执行到,因为它本身没有任何意义,那你必须在
else 语句后面使用一个叫做 die 的函数,让它打印出错误信息并且死给你看,这
和上一节的习题类似,这样你可以找到很多的错误。
3. “if 语句”的嵌套不要超过 2 层,最好尽量保持只有 1 层。 这意味着如果你在 if 里
边又有了一个 if,那你就需要把第二个 if 移到另一个函数里面。
4. 将“if 语句”当做段落来对待,其中的每一个 if, elif, else 组合就跟一个段落
的句子组合一样。在这种组合的最前面和最后面留一个空行以作区分。
5. 你的布尔测试应该很简单,如果它们很复杂的话,你需要将它们的运算事先放到一
个 变量里,并且为变量取一个好名字
调试(debug) 的小技巧
1. 不要使用 “debugger”。 Debugger 所作的相当于对病人的全身扫描。你并不会得
到某方面的有用信息,而且你会发现它输出的信息态度,而且大部分没有用,或者
只会让你更困惑。
2. 最好的调试程序的方法是使用 print 在各个你想要检查的关键环节将关键变量打
印出来,从而检查哪里是否有错。
3. 让程序一部分一部分地运行起来。不要等一个很长的脚本写完后才去运行它。写一
点,运行一点,再修改一点。
习题 37: 复习各种符号
del:用于删除list列表的一个或连续的多个元素,也可以用来删除变量
assert:assert语句用来声明某个条件是真的。例如,如果你非常确信某个你使用的列表中至少有一个元素,而你想要检验这一点,并且在它非真的时候引发一个错误,那么assert语句是应用在这种情形下的理想语句。当assert语句失败的时候,会引发一个AssertionError。
yield:包含了关键字"yield"的函数就不是普通的函数。当含有这个关键字的函数被调用的时候,这个函数在遇到yield的时候会停止运行,并且返回一个迭代器(iterator)。每次请求一个值,就会执行生成的代码。直到遇到一个yield或者return。
exec:exec语句用来执行储存在字符串或文件中的Python语句。例如,我们可以在运行时生成一个包含Python代码的字符串,然后使用exec语句执行这些语句
exec语句用来执行储存在字符串或文件中的Python语句。
eval语句用来计算存储在字符串中的有效Python表达式。
我们可以使用try..except语句来处理异常。我们把通常的语句放在try-块中,而把我们的错误处理语句放在except-块中。
**两个乘号就是乘方,比如2**4,结果就是2的4次方,结果是16
一个乘号*,如果操作数是两个数字,就是这两个数字相乘,如2*4,结果为8
*如果是字符串、列表、元组与一个整数N相乘,返回一个其所有元素重复N次的同类型对象,比如"str"*3将返回字符串"strstrstr"
如果是函数定义中参数前的*表示的是将调用时的多个参数放入元组中,**则表示将调用函数时的关键字参数放入一个字典中
习题 38: 阅读代码
习题 39: 列表的操作
print stuff[-1]
print stuff.pop()
print ' '.join(stuff)
print '#'.join(stuff[3:5])
' '.join(things)其实是join(' ',things)。
' '.join(things)可翻译成用' '连接(join)things;
join(' ',things)可翻译成为' '和things调用join函数。