为什么在这个《笨办法学 Python》练习变体中,raw_input会导致无限循环?
我正在学习《Learn Python the Hard Way》,并尝试在过程中多做一些练习来提高自己的技能。我原以为可以这样做:设置一个输入,让它作为一个循环的限制,然后让这个循环执行到我用“frequency”这个变量设定的限制。
结果,嗯,没成功。相反,它让Python进入了一个无限循环,不断生成数字列表,每个列表似乎比上一个(很长的)列表多一个数字。
原来的代码是“while i < 6”——我加了输入变量,即使我输入的和原代码中的一样(6),它还是出现了这个无限循环的问题。
这是完整的代码:
i = 0
numbers = []
print "What is the frequency?"
frequency = raw_input ('Kenneth? ')
while i < frequency:
print "At the top i is %d" % i
numbers.append(i)
i = i + 1
print "Numbers now: ", numbers
print "At the bottom i is %d" % i
print "The numbers: "
for num in numbers:
print num
抱歉我太无知了——我现在手边有一本《Python for Software Design》的纸质书,这是我在完成LPTHW后要做的下一件事。
4 个回答
1
因为raw_input的结果是一个字符串。
>>> frequency = "10"
>>> i = 0
>>> while i < frequency:
... i = i + 1
... print i
... if i > 20: break
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
>>> 3 < '2'
0: True
那就是你的提示。
6
raw_input
会返回一个字符串对象,而不是整数。你可以在循环之前加一句 frequency = int(frequency)
,这样就能让比较变得有意义。