2012-12-17 178 views
3

我已经阅读了很多关于while循环的主题,但是我找不到一个告诉我我的代码有什么问题。我正在学习Python的难题,我编写了这段代码,以便满足练习33的练习#1。我不知道为什么当我输入原始数据时循环不会终止。Python:虽然循环不会终止

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" 

任何想法?它只是加1到“我”,并不会停止打印。

感谢, 扎克

回答

9

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

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

number_uno(int(z)) 

应该运行正常。

+0

我想知道为什么它甚至允许在Python2中,结果的含义是什么。 –

+0

@LevLevitsky - 在python2中,排序由对象类型决定,但依赖于实现。换句话说,'1>“foo”'会给出与'100>“栏”'相同的结果,但实际得到的结果没有很好的定义。 – mgilson

+4

在CPython 2.x中,比较不同类型对象时的默认行为是将它们的类型作为字符串进行比较。因此,所有整数都小于所有字符串,因为'“int”<“str”'。这是为了按类型分类对象,同时对包含各种类型的列表进行排序,但我不相信其他Python实现也必须这样做。 – kindall