Python:While循环不会终止

Python:While循环不会终止,python,loops,while-loop,Python,Loops,While Loop,我已经阅读了很多关于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 +

我已经阅读了很多关于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"
number=[]
def编号_uno(z):
i=0
而i”)
编号(z)
打印“完成”
有什么想法吗?它只是在“i”中不断添加1,并且不会停止打印

谢谢,
Zach返回一个字符串。当您将其传递给函数时,您正在比较整数和字符串。请注意,python3.x中不赞成这种行为。在Python3.x中,不能用这种方式将整数与字符串进行比较。(它将引发一个
类型错误

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

number_uno(int(z))

应该可以运行。

我想知道为什么在Python2中允许它,以及结果的含义。@LevLevitsky——在Python2中,顺序由对象类型决定,但依赖于实现。换言之,
1>“foo”
将给出与
100>“bar”
相同的结果,但该结果的实际定义并不明确。在CPython 2.x中,比较不同类型对象时的默认行为是将其类型作为字符串进行比较。因此,所有整数都小于所有字符串,因为
“int”<“str”
。这样做是为了在对包含各种类型的列表进行排序时按类型分隔对象,但我不相信其他Python实现也必须这样做。我不知道还能说什么:)@kindall——感谢您解释rational(以及cpython2.x使用的算法)。我一直想知道它是如何决定的,因为它没有在报告中提到