【问题标题】:Python: While loop will not terminatePython:While循环不会终止
【发布时间】:2012-12-17 19:40:42
【问题描述】:

我已经阅读了很多关于 while 循环的主题,但我找不到一个可以告诉我我自己的代码做错了什么的主题。我正在以艰难的方式学习 Python,我编写了这段代码以满足练习 33 的学习练习 #1。我无法弄清楚为什么当我输入原始数据时循环不会终止。

numbers = []

def number_uno(z):
    i = 0
    while i < z:
        print "At the top i is %d" % i
        numbers.append(i)

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


print "Pick a random number: "
z = raw_input("> ")

number_uno(z)

print "Done"

有什么想法吗?它只是不断将“i”加 1,并且不会停止打印。

谢谢, 扎克

【问题讨论】:

    标签: python loops while-loop


    【解决方案1】:

    raw_input 返回一个字符串。当你将它传递给你的函数时,你正在比较一个整数和一个字符串。请注意,此行为在 python3.x 中已弃用。您不能以这种方式在 python 3.x 中将整数与字符串进行比较。 (它会引发TypeError)。

    你可以很容易地解决这个问题:

    number_uno(int(z))
    

    应该可以正常运行。

    【讨论】:

    • 我想知道为什么它甚至在 Python2 中被允许以及结果意味着什么。
    • @LevLevitsky -- 在 python2 中,排序由对象类型确定,但取决于实现。换句话说,1 &gt; "foo" 将给出与100 &gt; "bar" 相同的结果,但该结果实际上并没有明确定义。
    • 在 CPython 2.x 中,比较不同类型的对象时的默认行为是将它们的类型作为字符串进行比较。因此所有整数都小于所有字符串,因为"int" &lt; "str"。这样做是为了在对包含各种类型的列表进行排序时按类型隔离对象,但我不相信其他 Python 实现也有义务这样做。
    • 哇。我不知道还能说什么:)
    • @kindall -- 感谢您解释理性(以及 cpython2.x 使用的算法)。我一直想知道它是如何决定的,因为docs 中没有提到它
    猜你喜欢
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多