2011-12-30 40 views
5

我試圖通過努力工作學習Python的艱辛之路,並試圖在我可以推進我的教育的地方混亂。我認爲這會起作用:設置raw_input爲while循環設置一個限制,然後讓while循環執行到我用變量「frequency」建立的限制。它不是,呃,不是。相反,它將Python發送到創建數字列表的無限循環中,每個列表看起來都比最後​​(非常長)的列表長一個增量。爲什麼raw_input在這個Learn Python Hard Way練習變體中創建一個無限循環?

原始代碼有「而我< 6」 - 我已經添加了raw_input變量,並且即使我輸入與原始代碼(6)中相同的變量,它也會執行此無限循環。

以下是完整的腳本:

i = 0 
numbers = [] 

print "What is the frequency?" 
frequency = raw_input ('Kenneth? ') 

while i < frequency: 
    print "At the top i is %d" % i 
    numbers.append(i) 
    i = i + 1 
    print "Numbers now: ", numbers 
    print "At the bottom i is %d" % i 

print "The numbers: " 

for num in numbers: 
    print num 

道歉最大的無知 - 我在平裝我面前了Python中的副本,軟件設計,現在,它在我的下一件事 - LPTHW後列出。

+2

您可能會發現下面的有用的前只需添加frequency = int(frequency)。這是關於如何在Python中比較字符串和整數。 http://stackoverflow.com/questions/3270680/how-does-python-compare-string-and-int – Dunes 2011-12-30 22:12:31

+1

嘗試將'raw_input'改爲'input' – 2011-12-30 22:15:36

+1

或'frequency = int(raw_input('Kenneth?')) ' – 2011-12-30 22:18:10

回答

6

raw_input會給你一個字符串對象,而不是一個整數。在循環之前嘗試使frequency = int(frequency),它會使比較有價值。

+3

在賦值之前將整個東西作爲int進行轉換也會更隱含:'frequency = int(raw_input('Kenneth?'))''。 – Makoto 2011-12-30 22:14:27

+0

Oho!好吧,我明白了。該字符串返回「true」,因此我所得到的只是一個永遠的「真實」循環,而不是我從整數中得到的純粹結果。謝謝! – JeanSibelius 2011-12-30 22:37:18

+0

@Makoto只有當你處理異常。如果給定的值不是int可轉換的,則int(raw_input(...))將拋出一個'ValueError'。 – kojiro 2011-12-30 22:39:29

2
>>> 3 < '2' 
0: True 

這就是你的提示。

1

因爲raw_input結果是一個字符串。

>>> frequency = "10" 
>>> i = 0 
>>> while i < frequency: 
...  i = i + 1 
...  print i 
...  if i > 20: break 
... 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
1

的數字,你輸入一個字符串,而不是一個整數

while循環