使用循环创建用户输入名称列表

时间:2016-04-20 20:17:08

标签: python

我尝试编写一个允许用户输入名称的循环,直到用户单击Enter而不输入名称(输入空字符串)。列表输入完成后,打印列表,对列表进行排序,然后打印排序列表。 这是我到目前为止所做的。

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

8 个答案:

答案 0 :(得分:1)

您要做的是将sentinel称为while循环。使用标记时,第一个输入将在循环之外。你可以实现这样的方法:

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

然后你可以对它进行排序,并对列表做任何你想做的事 在此处阅读有关哨兵的更多信息:https://en.wikipedia.org/wiki/Sentinel_value

答案 1 :(得分:0)

正确缩进后,您的代码的行为方式与我相信您的目标:

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这应该这样做,尽管有很多方法可以做到:

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

print ListOfNames
print ListOfNames.sort()

答案 4 :(得分:0)

执行此操作的最佳方法是使用您的终止条款作为您的条件。此代码要求输入名称,只要该名称不为空(等于“”),就会要求另一个名称。当用户没有给出名字时,循环终止。

ListOfNames=[]

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

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

ListOfNames=sorted(ListOfNames)
print ListOfNames

答案 5 :(得分: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。你不需要一心一意地遵循它,但一般来说它有助于生成干净的代码,这更容易阅读和调试。

答案 6 :(得分:0)

更易于阅读:

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

答案 7 :(得分:0)

您可以向iter提供可调用值和标记值。这将调用callable,直到它产生sentinel值。演示:

>>> 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']