为什么在这个《笨办法学 Python》练习变体中,raw_input会导致无限循环?

5 投票
4 回答
790 浏览
提问于 2025-04-17 09:17

我正在学习《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),这样就能让比较变得有意义。

撰写回答