2016-04-20 109 views
2

我正在嘗試編寫一個循環,允許用戶輸入名稱,直到用戶單擊Enter而不輸入名稱(輸入空字符串)。列表輸入完成後,打印列表,排序列表,然後打印排序列表。 這是我到目前爲止。使用循環創建用戶輸入名稱列表

ListOfNames=[] 
while True: 
    Name=raw_input('-->') 
    if Name=="": 
    break 
else: 
    ListOfNames.append(Name) 
    print ListOfNames 
    ListOfNames=sorted(ListOfNames) 
    print ListOfNames 
+1

你能格式化代碼更清晰嗎? – Thomite

回答

0

當正確縮進,你的代碼的行爲,我相信你會的方式:

ListOfNames=[] 
while True: 
    Name=raw_input('-->') 
    if Name=="": 
     break 
    else: 
     ListOfNames.append(Name) 
print ListOfNames 
ListOfNames=sorted(ListOfNames) 
print ListOfNames 
0
ListOfNames=[] 
while True: 
    Name=raw_input('-->') 
    if Name=="": 
     print ListOfNames 
     print sorted(ListOfNames) 
     break 
    else: 
     ListOfNames.append(Name) 
1

你想要做的就是所謂的while循環與sentinel什麼。當使用標記時,第一個輸入將在循環之外。你可以實現這樣的方法:

names = [] 
input = raw_input("-->") 
while not input == "": 
    names.append(input) 
    input = raw_input("-->") 

然後,你可以對它進行排序並做任何你想要的清單。
瞭解更多關於哨兵在這裏:https://en.wikipedia.org/wiki/Sentinel_value

0

這應該這樣做,雖然有很多方法可以做到這一點:

ListOfNames=[] 
while True: 
    Name=raw_input('-->') 
    if Name=="": 
     break 
    else: 
     ListOfNames.append(Name) 

print ListOfNames 
print ListOfNames.sort() 
0

做,這是用你的終止條款爲你而最好的方法條件。此代碼要求輸入名稱,只要該名稱不爲空(等於「」),就會要求輸入另一個名稱。當用戶沒有給出名稱時,循環終止。

ListOfNames=[] 

Name = raw_input('-->') 
while Name != "": 

    ListOfNames.append(Name) 
    print ListOfNames 
    Name = raw_input('-->') 

ListOfNames=sorted(ListOfNames) 
print ListOfNames 
0

這應該做的伎倆:

ListOfNames=[] 

while True: #{ 
    Name=raw_input('-->') 
    if Name=="": #{ 
     break 
    #} 
    else: #{ 
     ListOfNames.append(Name) 
    #} 
#} 

print ListOfNames 
ListOfNames=sorted(ListOfNames) 
print ListOfNames 

她的幾個小技巧: - 你的邏輯是正確的,你的縮進沒有。把它看作C或Java中的花括號。 Python中不需要它們。

- 如果你想深入挖掘python,我建議閱讀PEP8。你不需要遵循它的內核,但總的來說,它有助於生成乾淨的代碼,這更易於閱讀和調試。

0

更容易閱讀:

ListOfNames=[] 
while True: 
    Name=raw_input('-->') 
    if Name != "": ListOfNames.append(Name) 
    else : break 
print (ListOfNames,sorted(ListOfNames)) 
0

您可以提供一個可調用和警戒值iter。這將調用可調用對象直到它生成標記值。演示:

>>> ListOfNames = list(iter(raw_input, '')) 
nameB 
nameA 
nameC 

>>> print(ListOfNames) 
['nameB', 'nameA', 'nameC'] 
>>> ListOfNames.sort() 
>>> print(ListOfNames) 
['nameA', 'nameB', 'nameC'] 

如果需要提示,結合functools.partial

>>> from functools import partial 
>>> ListOfNames = list(iter(partial(raw_input, '--> '), '')) 
--> nameB 
--> nameA 
--> nameC 
--> 
>>> print(ListOfNames) 
['nameB', 'nameA', 'nameC'] 
>>> ListOfNames.sort() 
>>> print(ListOfNames) 
['nameA', 'nameB', 'nameC']