### 1.
Python 2.7 中
print "..." 没有问题
但在 3.5 中报错 因为没有 ()
Python 3.5 中
print ("...") 没有问题
print "..." 报错
### 2.
Python 中 "" 和 ' ' 一样但是 ' ' 常用来创建简短的字符串
print end1 + end2 + end3 + end4 + end5 + end6,end7 + end8 + end9 + end10 + end11 + end12
# 这样亦可以,但是这样该行的长度超过 80 个字符串,不是好的Python代码风格
# 可以写成这种 #在Python 2.7 中
print end1 + end2 + end3 + end4 + end5 + end6,
print end7 + end8 + end9 + end10 + end11 + end12
### 3.
在为变量赋值时 会忘记打 =
在输入时会忽略中英文符号问题
### 4.
你应该使用 %s,只有在想要获取某些东西的 debug 信息时才能用到 %r。 %r 给你的是变量的
"程序员原始版本",又被称作"representation"。
Python 会用最有效的方式打印出字符串,而不是完全按照你写的方式来打印。这样做对于 %r 来
说是可以接受的,因为它是用作 debug 和排错,没必要非打印出多好看的格式。
%r 就是这个样子,它打印出的是你写出来的方式(或者近似方式)。它是用来 debug 的原始格
式。
你必须写成 """ 而不是 " " ",引号之间不能有空格。
print 里的逗号其实是分隔参数的一种方式。
print 里的 + 是将两个字符串拼接起来
### 5.有趣的小代码
while True:
for i in ["/","-","|","\","|"]:
print "%s " % i,
### 6.
在输入中把 , 和 . 按错
### 7,
``%r`` 用作 debug,``%s`` 用作显示。
### 8.
一般软件做的事情主要就是下面几条:
1. 接受人的输入。
2. 改变输入。
3. 打印出改变了的输入。
input() 和 raw_input() 有何不同?
input() 函数会把你输入的东西当做 Python 代码进行处理,这么做会有安全问题,你应该避开
这个函数。
打印出来后我的字符串前面有个 u ,像 u'35' 这样。
它表示 Python 告诉你你的字符串是 unicode。使用 %s 就一切正常了
print u"请输入您的姓名:"
# Python 2.7 是以ASCII码的形式进行输出输入,所以,这种方式可以以 UTF-8的形式输出中文,不会乱码
### 9.
argv 和 raw_input() 有什么不同?
不同点在于用户输入的时机。如果参数是在用户执行命令时就要输入,那就是 argv,如果是在
脚本运行过程中需要用户输入,那就使用 raw_input()。
### 10.
Python 不会限制你打开文件的次数,事实上有时候多次打开同一个文件是一件必须的事情。
### 11.
函数可以做三样事情:
1. 它们给代码片段命名,就跟"变量"给字符串和数字命名一样。
2. 它们可以接受参数,就跟你的脚本接受 argv 一样。
3. 通过使用 #1 和 #2,它们可以让你创建"微型脚本"或者"小命令"。
### 12.
*args 的 * 是什么意思?
它的功能是告诉 python 让它把函数的所有参数都接受进来,然后放到名字叫 args 的列表中去。
和你一直在用的 argv 差不多,只不过前者是用在函数上面
### 13.
函数里边的变量和脚本里边的变量之间是没有接的。
函数定义后忘记 :
变量名的拼写首字母打成大小写打错
### 14.
Python 会把函数或公式"自内而外"而不是"自下而上"。
### 15.
这是函数的工作原理。记住函数内部的变量都是临时的,当你的函数返回以后,返回值可以被赋予
一个变量。我这里是创建了一个新变量,用来存放函数的返回值。
### 16.
!= 和 <> 有何不同?
Python 中 <> 将被逐渐弃用, != 才是主流,除此以为没什么不同。
### 17.
可以用多个 if/else 来取代 elif 吗?
有时候可以,不过这也取决于额 if/else 是怎样写的,而且这样一来 python 就需要去
检查每一处 if/else,而不是像 if/elif/else 一样,只要检查到第一个 True 就可以停下来了。
### 19.
怎样判断一个数字处于某个值域中?
两个办法:经典语法是使用 1 < x < 10,或者用 x in range(1, 10) 也可以。
### 20.
开始使用 for 循环之前,你需要在某个位置存放循环的结果。最好的方法是使用列表(list),
顾名思义,它就是一个按顺序存放东西的容器
### 21.
如何创建二维列表?
就是在列表中包含列表,例如这样: [[1,2,3],[4,5,6]]
### 22.
"序数(ordinal number)",因为它们表示的是事物的顺序。
"index(索引)",而最好的方式是使用以 0 开头的索引。
### 23.
为什么 raw_input() 有时写成 raw_input('> ')?
raw_input 的参数是一个会被打印出来的字符串,这个字符串一般用来提示用户输入。
### 24.
If 语句的规则
1. 每一个"if 语句"必须包含一个 else.
2. 如果这个 else 永远都不应该被执行到,因为它本身没有任何意义,那你必须在 else 语句后面使用一个叫做 die 的函数,让它打印出错误信息并且死给你看,这和上一节的习题类似,这样你可以找到很多的错误。
3. "if 语句"的嵌套不要超过 2 层,最好尽量保持只有 1 层。 这意味着如果你在 if 里边又有了一个 if,那你就需要把第二个 if 移到另一个函数里面。
4. 将"if 语句"当做段落来对待,其中的每一个 if, elif, else 组合就跟一个段落的句子组合一样。在这种组合的最前面和最后面留一个空行以作区分。
5.你的布尔测试应该很简单,如果它们很复杂的话,你需要将它们的运算事先放到一个变量里,并且为变量取一个好名字。
### 25.
在你写代码之前,你应该设计出游戏的地图,创建出玩家会碰到的房间、怪物、以及陷阱等环节。一旦搞定了地图,你就可以写代码了。如果你发现地图有问题,就调整一下地图,让代码和地图互相符合。
每一个程序员在开始一个新的大项目时,都会被非理性的恐惧影响到。为了避免这种恐惧,他们会拖延时间,到最后一事无成。我有时会这样,每个人都会有这样的经历,避免这种情况的最好的方法是把自己要做的事情列出来,一次完成一样。
### 26.
如何运用你学到的东西理解别人的代码。
首先把你想要理解的代码打印到纸上。没错,你需要打印出来,因为和屏幕输出相比,你的眼睛和大脑更习惯于接受纸质打印的内容。一次最多打印几页就可以了。
然后通读你打印出来的代码并做好标记,标记的内容包括以下几个方面:
1. 函数以及函数的功能。
2. 每个变量的初始赋值。
3. 每个在程序的各个部分中多次出现的变量。它们以后可能会给你带来麻烦。
4. 任何不包含 else 的 if 语句。它们是正确的吗?
5. 任何可能没有结束点的 while 循环。
6. 最后一条,代码中任何你看不懂的部分都记下来。
接下来你需要通过注解的方式向自己解释代码的含义。解释各个函数的使用方法,各个变量的用途,以及任何其它方面的内容,只要能帮助你理解代码即可。
最后,在代码中比较难的各个部分,逐行或者逐个函数跟踪变量值。你可以再打印一份出来,在空白处写出你要"追踪"的每个变量的值。
一旦你基本理解了代码的功能,回到电脑面前,在屏幕上重读一次,看看能不能找到新的问题点。然后继续找新的代码,
用上述的方法去阅读理解,直到你不再需要纸质打印为止
### 27.
%d 和 %i 有何不同?
没有什么不同,只不过由于历史原因,用 %d 的人更多一些而已。
### 28.
stuff[3:5] 实现了什么功能?
这是一个列表切片动作,它会从 stuff 列表的第 3 个元素开始取值,直到第 5 个元素。
注意,这里并不包含第 5 个元素,这跟 range(3,5) 的情况是一样的。
### 29.
列表和字典有何不同?
列表是有序排列的一些物件,而字典是将一些物件(keys)对应到另外一些物件(values)的数据结构。
字典能用在哪里?
各种你需要通过某个值去查看另一个值的场合。其实你可以把字典当做一个"查询表"。
列表能用在哪里?
列表是专供有序排列的数据使用的。你只要知道索引就能查到对应的值了。
### 30.
三种读代码的方法,它们适用于几乎所有的编程语言:
1. 从前向后。
2. 从后向前。
3. 逆时针方向。