Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3中的用户输入和排序列表_Python_Python 3.x_List_Sorting_Input - Fatal编程技术网

Python 3中的用户输入和排序列表

Python 3中的用户输入和排序列表,python,python-3.x,list,sorting,input,Python,Python 3.x,List,Sorting,Input,我需要帮助生成如下输出: 1. Enter a member: samantha Names: ['Samantha'] 2. Enter a member: susan Names: ['Samantha', 'Susan'] 3. Enter a member: billy Names: ['Billy', 'Samantha', 'Susan'] 4. Enter a member: billy 4. Enter a member: samantha 4. Enter a membe

我需要帮助生成如下输出:

1. Enter a member: samantha 
Names: ['Samantha']
2. Enter a member: susan 
Names: ['Samantha', 'Susan']
3. Enter a member: billy 
Names: ['Billy', 'Samantha', 'Susan']
4. Enter a member: billy
4. Enter a member: samantha
4. Enter a member: Jason 
Names: ['Billy', 'Jason', 'Samantha', 'Susan']
5. Enter a member: 

Members:
1. Billy
2. Jason
3. Samantha
4. Susan
我已经努力创建了一个这样做的程序,但没有效果。我将在代码本身的问题中进行评论。提前谢谢你的帮助

def function():

    x = []
    #a = "1." # I tried to number the questions by adding these but it doesnt work
    while True:
        #a += 1
        name = input("Enter name: ").title()
        x.append(name)

        print("Names:", x)
        #if name == name: # this condition is made so that an input that is typed in again doesn't get included in the list
            #name = input("Enter name: ").title()

            # where should I add an insert() here to have the list alphabetically ordered?

        if not name: # pressing enter prints out the second half of the output, listing the members
            #print("\nMembers:", x).sort()
            break

function()

这是实现逻辑的一种方法

def function():

    x = []

    while True:

        name = input('{0}. Enter a member: '.format(len(x)+1)).title()

        if not name in x:
            x.append(name)
            x.sort()
            print('Names:', x)

        if len(x) == 4:
            break

    print('Members:')
    print('\n'.join(['{0}. {1}'.format(i, j) for i, j in enumerate(x)]))
解释

  • 仅当
    name
    不在
    x
    中时,才使用
    list.append
    list.sort
    和打印名称
  • 似乎您希望最多有4个名称。在这种情况下,当
    len(x)
    达到4时,
    break
  • 您可以将列表理解与
    str.format
    一起用于最终输出

    • 这是实现逻辑的一种方法

      def function():
      
          x = []
      
          while True:
      
              name = input('{0}. Enter a member: '.format(len(x)+1)).title()
      
              if not name in x:
                  x.append(name)
                  x.sort()
                  print('Names:', x)
      
              if len(x) == 4:
                  break
      
          print('Members:')
          print('\n'.join(['{0}. {1}'.format(i, j) for i, j in enumerate(x)]))
      
      解释

      • 仅当
        name
        不在
        x
        中时,才使用
        list.append
        list.sort
        和打印名称
      • 似乎您希望最多有4个名称。在这种情况下,当
        len(x)
        达到4时,
        break
      • 您可以将列表理解与
        str.format
        一起用于最终输出

        • 未实现
          getPositionByBinarySearch
          ,因此您可以自己实现它

          def getPositionByBinarySearch(arr, name):
              """
              implement binary search to find the index at which insertion should happen)
              return -1 if insertion is not needed (exact match is found)
              """
          
          def func():
              arr = []
              while True:
                  name = input(str(len(x)+1) + '. Enter a number: ')
                  if not name:
                      print "Members:"
                      for i, member in enumerate(members):
                          print(str(i+1) + '. ' + member)
                      break;
                  pos = getPositionByBinarySearch(arr, name)
                  if (pos != -1):
                      arr = arr[:i] + [name] + arr[i:]
          

          未实现
          getPositionByBinarySearch
          ,因此您可以自己实现它

          def getPositionByBinarySearch(arr, name):
              """
              implement binary search to find the index at which insertion should happen)
              return -1 if insertion is not needed (exact match is found)
              """
          
          def func():
              arr = []
              while True:
                  name = input(str(len(x)+1) + '. Enter a number: ')
                  if not name:
                      print "Members:"
                      for i, member in enumerate(members):
                          print(str(i+1) + '. ' + member)
                      break;
                  pos = getPositionByBinarySearch(arr, name)
                  if (pos != -1):
                      arr = arr[:i] + [name] + arr[i:]
          

          你几乎做了所有正确的事情,但问题是你在哪里打破了循环。首先添加名称,然后检查输入是否只是enter。所以,首先检查输入,然后将其附加到列表中。 这是我的密码:

          def fun1():
              l = []
              while True:
                  s = input("Enter a member: ")
                  if not s:
                      break
                  l.append(s.title())
                  print("Names:", l)
              l.sort()
              print("Members:")
              for i in range(0, len(l)):
                  print(i+1,end = '')
                  print(".", l[i])
          fun1()
          

          希望能有所帮助。

          您几乎做了所有正确的事情,但问题是您在哪里打破了循环。首先添加名称,然后检查输入是否只是enter。所以,首先检查输入,然后将其附加到列表中。 这是我的密码:

          def fun1():
              l = []
              while True:
                  s = input("Enter a member: ")
                  if not s:
                      break
                  l.append(s.title())
                  print("Names:", l)
              l.sort()
              print("Members:")
              for i in range(0, len(l)):
                  print(i+1,end = '')
                  print(".", l[i])
          fun1()
          

          希望有帮助。

          您不需要对代码进行太多更改。主要的重组包括将所有异常(如名称重复和无输入)移动到循环的顶部。评论中包含了更多的解释

          def function():
              x = []
              #no need to keep track of the number of members, the list length will give us this information
              #infinite loop that will be interrupted, when no input is given 
              while True:
                  #determine length of list, +1 because Python index starts with 0
                  n = len(x) + 1
                  #ask for input, format prints the number into the bracket position
                  name = input("{}. Enter a member: ".format(n))
                  #check if name already in list
                  if name in x:
                      #if name in list, ignore the input and start while loop again
                      continue
                  #no input - print out members and stop
                  if not name: 
                      print("Members:")
                      #get for each member the index number i
                      for i, member in enumerate(x):
                          #print index in position {0} and member name in position {1}
                          print("{0}. {1}".format(i + 1, member))
                      #leave function()
                      return
                  #append name and sort list
                  x.append(name)
                  x.sort()        
                  #print list
                  print("Names:", x)
          
          
          function()
          

          您不需要对代码进行太多更改。主要的重组包括将所有异常(如名称重复和无输入)移动到循环的顶部。评论中包含了更多的解释

          def function():
              x = []
              #no need to keep track of the number of members, the list length will give us this information
              #infinite loop that will be interrupted, when no input is given 
              while True:
                  #determine length of list, +1 because Python index starts with 0
                  n = len(x) + 1
                  #ask for input, format prints the number into the bracket position
                  name = input("{}. Enter a member: ".format(n))
                  #check if name already in list
                  if name in x:
                      #if name in list, ignore the input and start while loop again
                      continue
                  #no input - print out members and stop
                  if not name: 
                      print("Members:")
                      #get for each member the index number i
                      for i, member in enumerate(x):
                          #print index in position {0} and member name in position {1}
                          print("{0}. {1}".format(i + 1, member))
                      #leave function()
                      return
                  #append name and sort list
                  x.append(name)
                  x.sort()        
                  #print list
                  print("Names:", x)
          
          
          function()
          

          我个人更喜欢使用
          集合
          以更干净的方式避免重复,并且我还将两个打印部分合并到一个单独的功能中。因此,我的建议是针对以下内容,其行为与您的稍有不同,但(在我看来)更简单:


          请注意,如果成员数量增长过多,排序(此处仅用于
          print_members
          函数)将变得非常昂贵,在这种情况下,我建议使用二元搜索树而不是集合。

          我个人更喜欢使用
          集合
          ,以更干净的方式避免重复,我还将两个打印部分合并为一个单独的功能。因此,我的建议是针对以下内容,其行为与您的稍有不同,但(在我看来)更简单:


          请注意,如果成员数量增长过多,排序(此处仅用于
          print_members
          函数)将变得非常昂贵,在这种情况下,我建议使用二元搜索树而不是集合。

          我保留了大部分结构,但修复了很多问题。为了获得编号,我使用了%string格式化操作符。您也可以使用str.format

          您可以使用
          x.sort()
          对列表进行就地排序(列表将替换为已排序的列表)。要检查某个内容是否在列表中,请使用mylist中的
          内容
          内容不在mylist中

          def function():
          
              x = []
              a = 1
              while True:
                  prompt = '%d. Enter a member: ' % a
                  name = input(prompt)
                  name = name.title() # convert first letter to uppercase
          
                  if name.strip() == '':  # enter or empty string entered
                      print()
                      print('Members:')
                      for idx, item in enumerate(x):
                          print('%d. %s' % (idx+1, item))
                      break
                  elif name not in x:
                      x.append(name)
                      x.sort()  # sort x in place
                      print("Names: ", x)
                      a += 1
          
          
          function()
          
          以及我的输出:

          1. Enter a member: samantha
          Names:  ['Samantha']
          2. Enter a member: susan
          Names:  ['Samantha', 'Susan']
          3. Enter a member: billy
          Names:  ['Billy', 'Samantha', 'Susan']
          4. Enter a member: Jason
          Names:  ['Billy', 'Jason', 'Samantha', 'Susan']
          5. Enter a member:
          
          Members:
          1. Billy
          2. Jason
          3. Samantha
          4. Susan
          
          
          ------------------
          (program exited with code: 0)
          
          Press any key to continue . . .
          

          我保留了你的大部分结构,但修复了不少东西。为了获得编号,我使用了%string格式化操作符。您也可以使用str.format

          您可以使用
          x.sort()
          对列表进行就地排序(列表将替换为已排序的列表)。要检查某个内容是否在列表中,请使用mylist中的
          内容
          内容不在mylist中

          def function():
          
              x = []
              a = 1
              while True:
                  prompt = '%d. Enter a member: ' % a
                  name = input(prompt)
                  name = name.title() # convert first letter to uppercase
          
                  if name.strip() == '':  # enter or empty string entered
                      print()
                      print('Members:')
                      for idx, item in enumerate(x):
                          print('%d. %s' % (idx+1, item))
                      break
                  elif name not in x:
                      x.append(name)
                      x.sort()  # sort x in place
                      print("Names: ", x)
                      a += 1
          
          
          function()
          
          以及我的输出:

          1. Enter a member: samantha
          Names:  ['Samantha']
          2. Enter a member: susan
          Names:  ['Samantha', 'Susan']
          3. Enter a member: billy
          Names:  ['Billy', 'Samantha', 'Susan']
          4. Enter a member: Jason
          Names:  ['Billy', 'Jason', 'Samantha', 'Susan']
          5. Enter a member:
          
          Members:
          1. Billy
          2. Jason
          3. Samantha
          4. Susan
          
          
          ------------------
          (program exited with code: 0)
          
          Press any key to continue . . .
          

          这是在我的水平上我最了解的一个,所以谢谢你!我怎样才能在字符串仍然要求用户输入的情况下使其有序?只需在“l.append(s.title())”之后加上“l.sort()”,这是我在这个级别上最能理解的,谢谢!我怎样才能在它仍然要求用户输入的情况下使字符串保持有序呢?只需在“l.append(s.title())”之后加上“l.sort()”,嘿,伙计们。所以我编辑了一点,创建了一个应用程序,它接受无限数量的名称,然后使用排序按字母顺序显示它们。示例输出:输入姓名(-1退出):Brennan输入姓名(-1退出):Edgar输入姓名(-1退出):Allan输入姓名(-1退出):-1姓名是[Allan,Brennan,Edgar]嘿,伙计们。所以我编辑了一点,创建了一个应用程序,它接受无限数量的名称,然后使用排序按字母顺序显示它们。示例输出:输入姓名(-1退出):Brennan输入姓名(-1退出):Edgar输入姓名(-1退出):Allan输入姓名(-1退出):-1姓名为[Allan,Brennan,Edgar]