Python坑又来了
今天码哥为大家整理了平常被提问频率较高的一些问题
1.我该下载哪个 Python 版本?
去官网 http://python.org 下载最新版本即可,无需严格按照教程里的小版本。
如果官网上的最新版本按钮没有替你自动下载,可从列表中选择 executable installer。如果你确信自己的系统是 64 位的,可以选 x86-64,否则选 x86 也没有问题。
我刚发现现在官网已经不再默认放置 2.7 版本的下载按钮了。所以关于 2 还是 3 的老问题也别纠结了,顺应潮流装 3 吧。已经用了 2 的同学也不用担心,从语法上来说,真的没有什么差别,学会任何一个版本后都可以秒转。
2.我在 Python 里为什么不能换行?
这个界面叫做 python shell,不是开发写代码的地方,每输入一行它都会自动执行并输出结果。所以要写代码,通过窗口上方菜单栏的 File - New File(或 New Window)创建一个新窗口,在里面写代码。
类似的问题还有,为什么我的代码里没有输出,上面说了,python shell 会自动输出,而在代码中,你需要 print。
3.程序为什么到输入的地方就不动了?
可能有人会说,这也算问题?但确实有相当多的人在这一步会产生误解:以为 input 后面括号里的内容就是“用户输入”。
这里要明确:input 获取的是“用户”输入,是程序运行时才得到的数据,所以不是开发者在代码里预先写好的。input 括号里的文字,只是用来作为输入前的“提示语”。真正的输入,是要程序执行后,在控制台里输入,按回车结束。
4.猜数字输入后报错
报错提示
TypeError: unorderable types: str() < int()
py3 的 input,不管你输入什么内容,都会被当做字符串来处理。而字符串是不能跟数字之间比大小的。所以需要手动转换一下:
answer = int(input())
py2 也会有类似的问题(发生在 raw_input),而且更坑的是用 str 和 int 比大小并不会报错,而是返回一个并不是你预想的结果,这个需要额外注意。
5.print 时报错
报错提示
SyntaxError: Missing parentheses in call to 'print'
这是 Python 版本 3 和 2 的“重大”差异之一:print 要把后面输出的内容加上括号。后面学到函数,你就理解为什么要这样了:print 也是一个函数,参数就是输出的内容。
类似的一个问题是:
会有人觉得我这里不是加了括号了吗,为什么还不行?这个式子在程序中的执行是:1. 输出 'num is %s',2. 把 print 的返回值做 % 11 操作。但 print 函数没有返回值,也就是 None,所以就报错了。应该用括号把要输出的所有内容外层括起来。
6.用 randint 产生随机数时报错
报错提示
AttributeError: module 'random' has no attribute 'randint'
这个情况如果发生了,你可能很难找到问题所在,通过网上搜索也不行。原因是你的代码用了系统模块一样的名字:random。类似的,如果你给自己的代码取名 math.py、list.py、str.py 等,或者变量名用 sum、time、str、list 等,都有可能因命名冲突带来意想不到的 bug。所以,远离系统保留字。好的编辑器会给你高亮提示出来。如果你自己拿不准,取名时尽量用合成词,比如 my_random 之类。
码哥要提醒的就是这些啦,希望小伙伴们多多注意