2012-12-17 179 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