2014-10-07 67 views
-1

我試圖創建一個使用列表來存儲一些着名名人的名字的程序。我需要使用循環來提示用戶輸入名稱並將它們添加到列表中。當用戶輸入「完成」時,循環應停止。該程序應該輸出輸入的名人數量。最後,程序應該使用另一個循環來顯示名人姓名,每個人都在自己的行上,而「完成」不應該在名人名單中,我在哪裏出錯了,因爲它一遍又一遍地顯示「名人名字」。 這是我的教授不得不說的,如果這有幫助的話。如何創建以「done」python結尾的循環3.4

您的名人計劃確實需要更多的上下文。我查看了你的代碼,可以告訴你該做什麼,但是對於一個反覆顯示名人名字的用戶。

list = [] 
while(1): 
    name = input("enter celebrity name:") 
    if name == "done": 
     break; 
    else: 
     list += [name] 

print(len(list)) 

for i in range(len(list)): 
    print(list[i]) 
+0

我想知道我做了什麼「或沒有做」,他不喜歡。我通過了我所做的事我只是想知道我可以做些什麼來使它更加準確,所以我可以從中學習 – Tom 2014-10-07 03:22:04

+0

請參閱我的回答以獲得一些建議。 – 2014-10-07 03:27:52

+3

雖然JB333有一些很好的指針,但我很肯定你的教授的抱怨是真的,當你的程序運行時,它沒有提供很好的用戶體驗。用戶必須簡單*知道輸入單詞「完成」會導致循環中斷並完成程序。你應該以某種方式告訴用戶。否則,他們可能會認爲這是一個無計可施,反覆印刷「進入名人」的節目。嘗試採用不熟悉的用戶視角。 – 2014-10-07 03:28:01

回答

3

OK:

  1. 切勿使用列表作爲變量的名字 - 它是壞的形式,並讓你陷入困境,最終。
  2. 有一個更簡單的方法來循環列表的內容,你不需要使用索引。
  3. 您的程序不會告訴用戶如何使用該程序,或者如何停止輸入名稱 - 也許您的教授建議您的程序應該生成一些有用的說明。當它完成時它只是打印一個數字和一個名稱列表,也許一些有用的信息也會有幫助。
  4. 在Python中使用While True而不是while (1)更好。

爲2號 - 這是什麼代碼做:

a=["a","b","c","d","e"] 
for i in a: 
    print (i) 
+0

@JB - 感謝編輯 – 2014-10-07 03:30:31

+0

NP,這裏有很好的工作總結改進。再看一遍,教授正在注意的可能大部分是3號。無論你的代碼有多好,如果用戶不知道如何使用它,它就沒有價值! – JB333 2014-10-07 03:34:20

+0

@ JB333 - 我同意 - 我認爲它是#3這是教授關注的焦點,但我建議學習者應該做兼顧可用性和代碼質量 – 2014-10-07 06:41:54

1

你要想想這個但從用戶的角度。讓我們運行您的代碼,看看它在控制檯上的外觀如何:

enter celebrity name:Celeb 1 
enter celebrity name:Celeb 2 
enter celebrity name:Celeb 3 
enter celebrity name:Celeb 4 
enter celebrity name:Done 
enter celebrity name:DONE 
enter celebrity name:Celeb 5 
enter celebrity name:done 
7 
Celeb 1 
Celeb 2 
Celeb 3 
Celeb 4 
Done 
DONE 
Celeb 5 

太好了。它首先要求我輸入一個名人名字。一旦完成並按下回車鍵,它會詢問完全相同的內容。一遍又一遍。沒有關於用戶的說明。他們如何知道何時結束?我需要輸入多少個?是否有錯誤,因爲它一直說enter celebrity name:?我做錯什麼了嗎?

接下來,請注意我輸入了DoneDONE,兩者都有意想不到的結果。它繼續了這個計劃。要解決這個問題的一個選項是

if name.lower() == "done": 

利用這一點,你總是檢查輸入文本的小寫版本爲done

接下來,你吐出一個數字。 7。這是什麼意思?在您的打印聲明中添加描述性內容:

print("You input {} celebrities!".format(len(list))) 

最後,您的名人名單。這是什麼告訴用戶?爲你的輸出提供一些上下文。


某些代碼的批評:

  • 您使用變量list。不要使用reversed word。 (IE。celebrities_list
  • 您的循環最後過於複雜。您可以通過列表循環,而無需使用range(索引)

例如:

for c in celebrities_list: 
    print(c) 
+1

顛倒字?像'tsil'? :)技術上'列表'不保留(否則這將是一個語法錯誤)。你是正確的,但這是一個壞主意 – 2014-10-07 04:21:00