《碧血剑》影射城管,学Python遭遇难题

中午,弟弟看电视剧《碧血剑》。此剧由金庸原著改编而来。第十集中,女主角抱怨,官兵到处奸淫掳掠、无恶不作,早该死了。政治敏感的我,马上觉得有问题——这明显是对国家不满嘛!

过去的官兵,与现今“为人民服务”的城管何异?我支持城管捣毁播放《碧血剑》的电视台,敢映射我英武的平民武装,该被教训教训了。

下午,练习Python。发现在IDLE解释器中输入:

for n in range(2,10):

for x in range(2,n):

if n % x==0:

print n,’equals’,x,’*’,n/x

break

else:

print n,’is a prime number’

 

结果是:

3 is a prime number

4 equals 2 * 2

5 is a prime number

5 is a prime number

5 is a prime number

6 equals 2 * 3

7 is a prime number

7 is a prime number

7 is a prime number

7 is a prime number

7 is a prime number

8 equals 2 * 4

9 is a prime number

9 equals 3 * 3

 

不对,9并非素数,怎会出来“9 is a prime number”这样的字句呢。而且,“7”出现的频次也太高了吧?

如果我复制代码:

for n in range(2,10):

for x in range(2,n):

if n % x==0:

print n,’equals’,x,’*’,n/x

break

else:

print n,’is a prime number’

 

就可得出:

2 is a prime number

3 is a prime number

4 equals 2 * 2

5 is a prime number

6 equals 2 * 3

7 is a prime number

8 equals 2 * 4

9 equals 3 * 3

 

结果正确。为何?为何直接打开Python就毫无问题?

几经试验,最终发现是IDLE缩进的问题。只需在else:一行前摁一下backspace,即可解决。此外,还发现一个问题,在IDLE中输入以下代码:

while True:

pass # busy-wait for keyboard interrupt

 

会导致IDLE陷入死循环,进而崩溃。而在终端的Python中输入以上代码则毫无问题。按照一个案例,我输入以下代码:

def fib2(n): # return Fibonacci series up to n

“””Return a list containing the Fibonacci series up to n.”””

result=[]

a,b=0,1

while b<n:

result.append(b)

a,b=b,a+b

return result

 

摁下enter后,输入:

f100=fib2(100)

>>> f100

 

得出结果:[1]

而我复制案例中的:

def fib2(n): # return Fibonacci series up to n

 

“””Return a list containing the Fibonacci series up to n.”””

 

result = []

 

a, b = 0, 1

 

while b < n:

 

result.append(b)    # see below

 

a, b = b, a+b

 

return result

 

 

f100 = fib2(100)    # call it

 

f100                # write the result

 

得出的结果是:[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

在命令行中用Python编写也能得出以上结论。难道,我的IDLE出问题了?

几经查证,发现IDLE搞不清楚Python的缩进。只需在IDLE中的return result一行摁一下Backspace键,即可得出正确结论:[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

解释器有问题,如何校正?

几天之后,我在教程里找到这样几句话:“Python的解释器不会从多行的文档字符串中去除缩进,所以必要的时候应当自己清除缩进。这符合通常的习惯。第一行之后的第一个非空行决定了整个文档的缩进格式。(我们不用第一行是因为它通常紧靠着起始的引号,缩进格式显示的不清楚。)留白“相当于”是字符串的起始缩进。每一行都不应该有缩进,如果有缩进的话,所有的留白都应该清除掉。留白的长度应当等于扩展制表符的宽度(通常是8个空格)。”

我的疑问终获解释。

发布者

LV

只是爱着这里,只是喜欢写下这点点滴滴。

发表评论

电子邮件地址不会被公开。 必填项已用*标注