【问题标题】:Why do I appear to have an infinite loop?为什么我似乎有一个无限循环?
【发布时间】:2014-01-04 14:51:33
【问题描述】:

这是教程的一部分。我的目标是从用户那里获取输入,然后在条件为真时增加它。

inputNum = raw_input("What is max number?")

def incrementF(greatest):
    i = 0
    numbers = []

    while i < greatest:
        print "At the top of the list numbers is %d" % i
        numbers.append(i)

        i += 1
        print "Numbers now: ", numbers
        print "At the bottom i is %d" % i

    print "The numbers:"

    for num in numbers:
        print num

incrementF(inputNum)

当我运行脚本并为 inputNum 输入任何内容而不是几行输出时,我似乎陷入了无限循环。

例如,原始输入提示是否给出了 10,我希望看到类似的内容:

At the top of the list numbers is 0,
Numbers now: 0,
0
At the top of the list numbers is 1,
Numbers now: 1,
1

我已经多次阅读我的脚本,但看不到。我怀疑这可能与缩进有关?但我不确定。

【问题讨论】:

    标签: python while-loop infinite-loop python-2.x


    【解决方案1】:

    正如docs 中引用的raw_input

    函数然后从输入中读取一行,将其转换为字符串 (去除尾随的换行符),然后返回。

    所以,greatest 将是一个字符串,因为您使用了 raw_input 来获取它。

    此外,在 Python 2.x 中,字符串总是被评估为大于整数*:

    >>> 1 < 'a'
    True
    >>> 100000000000 < 'a'
    True
    >>>
    

    这意味着您的 while 循环的条件将始终评估为 True,因为 greatest 将始终被评估为大于 i。因此,您会得到一个无限循环。

    您可以通过将greatest 设为像i 这样的整数来解决此问题:

    inputNum = int(raw_input("What is max number?"))
    

    *注意:如果您想了解更多信息,请参阅How does Python compare string and int?

    【讨论】:

    • string &lt; int 是否总是返回非False
    • 该死的,这很快。 +1。
    • @zneak 是的。但是,请注意,此行为在 Python 3 中已修复,将 int 与 string 进行比较将引发 TypeError
    • 现在是 +5 dammmmmmmmn
    • 谢谢!现在工作,很快接受。从现在开始会记住 raw_inputs 是字符串。
    猜你喜欢
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多