【问题标题】:creating a list of user input names using loop使用循环创建用户输入名称列表
【发布时间】:2016-04-20 20:17:07
【问题描述】:

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

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

【问题讨论】:

  • 你能把代码格式化得更清楚吗?

标签: python


【解决方案1】:

您想要做的是一个带有sentinel 的while 循环。使用哨兵时,第一个输入将在循环之外。你可以像这样实现这样的方法:

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

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

【讨论】:

    【解决方案2】:

    您可以向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']
    

    【讨论】:

      【解决方案3】:

      正确缩进时,您的代码会按照我认为您想要的方式运行:

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

      【讨论】:

        【解决方案4】:
        ListOfNames=[]
        while True:
            Name=raw_input('-->')
            if Name=="":
                print ListOfNames
                print sorted(ListOfNames)
                break
            else:
                ListOfNames.append(Name)
        

        【讨论】:

          【解决方案5】:

          应该这样做,虽然有很多方法可以做到:

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

          【讨论】:

            【解决方案6】:

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

            ListOfNames=[]
            
            Name = raw_input('-->')
            while Name != "":
            
                ListOfNames.append(Name)
                print ListOfNames
                Name = raw_input('-->')
            
            ListOfNames=sorted(ListOfNames)
            print ListOfNames
            

            【讨论】:

              【解决方案7】:

              更容易阅读:

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

              【讨论】:

                【解决方案8】:

                这应该可以解决问题:

                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。您不需要完全遵循它,但总的来说,它有助于生成干净的代码,更易于阅读和调试。

                【讨论】:

                  猜你喜欢
                  • 2013-05-09
                  • 1970-01-01
                  • 2020-01-18
                  • 2021-05-19
                  • 1970-01-01
                  • 2018-06-04
                  • 1970-01-01
                  • 2013-01-31
                  • 2015-12-25
                  相关资源
                  最近更新 更多