2010-11-20 102 views
0

我正在創建一種數據庫,使用從用戶讀入的列表。當用戶輸入finish時,我希望while循環停止。但是,由於某種原因,我需要輸入finish TWICE來打破循環。循環不會中斷

另外,返回後列表爲空。

def readNames(): 
nameList = [] 
count = 0 
while count != -1: #infinite loop 
    addList = raw_input("Please enter a name: ") 
    if addList == 'finish': 
     return nameList 
     break 
    nameList.append(addList) 
    print nameList 

我調用它,並檢查它是否與

readNames() 
print readNames() 

還曾經,這裏是輸出

Please enter a name: Dave 
['Dave'] 
Please enter a name: Gavin 
['Dave', 'Gavin'] 
Please enter a name: Paul 
['Dave', 'Gavin', 'Paul'] 
Please enter a name: Test1 
['Dave', 'Gavin', 'Paul', 'Test1'] 
Please enter a name: finish 
Please enter a name: finish 
[] 
>>> 
+0

適合我的工作(在IDLE中)。除此之外,還有更簡單的方法來實現無限循環('while True:'就足夠了;爲什麼要創建一個假變量+條件?我實際上是在尋找'count = -1' ......)。另外,'break'是不需要的('return'退出函數並因此退出循環)。 – delnan 2010-11-20 16:46:33

+0

對我來說工作很好,但有一些注意事項:你可以簡單地在while循環中做'while:',你在返回之後也不需要'bre​​ak',因爲'break'永遠不會到達。 'names = readNames()'對我來說工作得很好。 PS:我已經修好了你的縮進。 – 2010-11-20 16:47:13

回答

4

當你

readNames() 
print readNames() 

運行功能兩次。在第二次運行中,你只需輸入「完成」,這就是爲什麼你的列表保持空白。

你想要做的是這樣的:

def readNames(): 
    nameList = [] 
    while True: #infinite loop 
     addList = raw_input("Please enter a name: ") 
     if addList == 'finish': 
      return nameList 
     nameList.append(addList) 

# store the result, then print it 
names = readNames() 
print names 
+0

感謝您的大力幫助。一直堅持這個很長一段時間。 :) – Hypergiant 2010-11-20 16:58:35

-1

你能不能代替

 
if addList == 'finish': 
     return nameList 
     break 

隨着

 
if addList == 'finish': 
     return nameList 
     count = -1 

詹姆斯

+1

-1不僅這仍然是多餘的(見我和伊沃的評論),它也沒有回答這個問題。 – delnan 2010-11-20 16:50:03

+0

同樣的事情正在發生。 – Hypergiant 2010-11-20 16:51:02

+0

只需加我兩分錢。對不起人。 – Bojangles 2010-11-20 21:41:35

2

我想調用代碼被意外調用readnames()兩次。

+0

是的,看起來就是發生了什麼。刪除'print readNames()'後,它按預期中斷。 – Hypergiant 2010-11-20 16:53:38

1

啊,你發佈你的代碼後,我可以看到這個問題:

readNames() 
print readNames() 

你叫readNames,從標準輸入設備爲已讀那些名字計劃,正確return讀取名稱,然後將結果扔掉,因爲您不將它分配給任何東西(names = readNames())。然後你再次呼叫readNames,它看起來好像它沒有退出循環(它做到了,但你告訴它再次循環)。您再次輸入finish,並且第二次調用readNames沒有輸入任何名稱(nameList是局部變量,因此在函數執行結束後丟失),因此您將返回[]。爲了解決這個問題,(1)刷新你的一般編程知識;)和(2)做類似names = readNames(); print names

+0

非常感謝您的幫助,不幸的是THC4k擊敗了你。 :) – Hypergiant 2010-11-20 16:59:21