2016-04-20 62 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']