第1章 程序之道
练习 1-1:在交互模式中故意犯错(1)
【习题 1.1.1】 在 print
语句中,如果漏掉一个括号,或者两个都漏掉,会发生什么?
【求解】
情况1:漏掉左括号,或者都漏掉
>>> print 'Holle, World!')
File "<stdin>", line 1
print 'Holle, World!')
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print('Holle, World!'))?
>>>print 'Holle, World!'
File "<stdin>", line 1
print 'Holle, World!')
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print('Holle, World!'))?
序号 | 报错 | 含义 |
---|---|---|
1 | SyntaxError: Missing parentheses in call to ‘print’. | 语法错误:调用时缺少括号 |
推测原因:Python 2 中 print 语句不需要括号,而Python 3 需要,所以这里特别说明缺少括号并给出了可能的建议 |
情况2:漏掉右括号
>>>print ('Holle, World!'
^
SyntaxError: unexpected EOF while parsing
序号 | 报错 | 含义 |
---|---|---|
2 | SyntaxError: unexpected EOF while parsing | 语法错误:解析时意外终止 |
推测原因:解释器从左往右读代码, print 语句没有终止符,后面又没有东西,就“意外终止”了 |
【习题 1.1.2】 如果正尝试打印一个字符串,那么漏掉一个货所有引号,会发生什么?
【求解】
情况1:漏掉左引号,或者都漏掉
>>>print (Holle, World!')
File "<stdin>", line 1
print (Holle, World!')
^
SyntaxError: invalid syntax
>>>print (Holle, World!)
File "<stdin>", line 1
print (Holle, World!)
^
SyntaxError: invalid syntax
序号 | 报错 | 含义 |
---|---|---|
3 | SyntaxError: invalid syntax | 语法错误:无效语法 |
推测原因:没有引号,解释器将括号里的“Holle, World!”当成了一个变量名,但是逗号、空格、感叹号是非法字符,违背了变量命名的规则,去掉这些符号后,报错就变成了“命名错误:命名没有被定义”了 |
>>>print ('HolleWorld')
Traceback (most recent call last):
File "<stdin>", line 1
print (HolleWorld)
NameError: name 'HolleWorld' is not defined
序号 | 报错 | 含义 |
---|---|---|
5 | NameError: name ‘HolleWorld’ is not defined | 命名错误:命名没有被定义 |
情况2:漏掉右引号
>>>print ('Holle, World!)
File "<stdin>", line 1
print ('Holle, World!)
^
SyntaxError: EOL while scanning string literal
序号 | 报错 | 含义 |
---|---|---|
4 | SyntaxError: EOL while scanning string literal | 语法错误:扫描字符串时行终止 |
推测原因:解释器从左往右读代码,字符串没有终止符,但是print 语句却终止了,故“扫描字符串时行终止” |
【习题 1.1.3】 可以使用一个负号来表示负数,如-2。如果在数字之前放一个正好,会发生什么?如果是2++2呢?
【求解】
>>> -2
-2
>>> 2++2
4
【习题 1.1.4】 在数学标记里,前置 0 是没有问题的,如 02。在 Python 中也这么做会发生什么?
【求解】
>>> 02
2
【习题 1.1.5】 如果在两个值之间不放任何操作符,会发生什么?
【求解】
情况1:两个值中间无空格:
>>> 24
24
情况2:两个值中间有空格:
>>> 2 4
File "<stdin>", line 1
2 4
^
SyntaxError: invalid syntax
序号 | 报错 | 含义 |
---|---|---|
3 | SyntaxError: invalid syntax | 语法错误:无效语法 |
练习 1-2:解释器牌计算器(时间换算、距离换算、速度换算)
【习题 1.2.1】 在42分42秒钟,一共有多少秒?
【求解】
>>> 42*60+42
2562
【习题 1.2.2】 10千米相当于多少英里?提示:1英里相当于1.61千米。
【求解】
>>> 10/1.61
6.211180124223602
【习题 1.2.3】 如果你42分42秒跑完10千米,那么你的平均速度(跑1千米需要的分钟和秒数)是多少?平均速度是多少千米每小时?
【求解】
问题1:跑1千米需要的分钟和秒数:
分钟:
>>> (42*60+42)/10/60
4
秒数:
>>> (42*60+42)/10.0%60
16.19999999999999
问题2:平均速度是多少千米每小时:
>>> 10.0/(42*60+42)*60*60
14.051522248243561