为什么这是一个无限循环

时间:2014-02-02 19:14:18

标签: python python-2.7

a = raw_input ("enter a number")
i = 0
numbers = []

while i < a:
    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   

所以我跟着lpthw并且只是搞乱了代码,为什么当我使用raw_input并输入一个像6这样的数字时这个循环会变成无限循环?不应该i = i + 1来阻止这种情况发生吗?

4 个答案:

答案 0 :(得分:9)

在Python 2.7中,raw_input返回str(字符串)。因此,当您比较i < a时,您将整数与字符串进行比较,它将always return True

要解决此问题,请将输入转换为整数:

a = int(raw_input(...))

注意:正如@AshwiniChaudhary所评论,比较(<<=>>=)一个带字符串的整数Python 3.x将引发异常:

TypeError: unorderable types: int() <operator> str()

答案 1 :(得分:1)

raw_input返回一个字符串。你的变量a是一个字符串,字符串大于python中的int 您需要将 a 转换为int:

a = int(raw_input("enter a number"))

答案 2 :(得分:1)

如果您使用raw_input,那么a将是一个字符串。您需要inti < a比较才能按预期工作。使用input代替raw_input

为了将来参考,我在Python 3中移除了input,并将raw_input重命名为input,因此您需要在Py3中使用int(input (...))

答案 3 :(得分:1)

你正在做两件可能导致无限循环的事情。

  1. 标签和空格混淆了,python关心缩进,所以请确保i = i + 1与numbers.append(i)

  2. 对齐
  3. 它继续存在的实际原因是当python收集raw_input时,它会将其转换为字符串,而不是整数,因此比较不会像您期望的那样工作。更改为此,它将按预期工作:

  4. a = int(raw_input(“输入数字”))