【问题标题】:While Loop using a counter使用计数器的 While 循环
【发布时间】:2019-09-10 09:02:19
【问题描述】:

我试图让它在用户使用 while 循环和中断函数输入客人姓名的地方,当循环结束时,我希望列表按编号顺序打印出来,例如

  1. 詹姆斯
  2. 卡尔
  3. 丽莎
  4. 布莱恩

但是对于可以输入多少个名字没有设置限制

我已经尝试过 while true 循环,但是当我使用

print("\nMy Wedding Attendees are: "  "\n", extra)

它只打印出我的婚礼参加者是: 但不是名字

print("Now enter the names of other people you are inviting to your wedding\n")
counter = 1
extra = input("Guest's Name(or press Enter to quit): ")
while counter >= 1:       #WHILE loop
    extra = input("Guest's Name(or press Enter to quit): ")
    counter = counter + 1
    if extra == "":
        break     #break Statement
print("\nMy Wedding Attendees are: "  "\n", extra)

我希望它看起来像

我的婚礼参加者是: 1.名称 2.名称 3.名称 4. 姓名

【问题讨论】:

  • 请在您的代码中添加缩进。
  • 您实际上并没有存储extra 输入,因此在循环之后它将始终是空字符串。考虑存储要打印的响应。

标签: python python-3.x


【解决方案1】:

您可以使用以下代码完成它:

counter = 1
extra=[' ']  #initializing a random value for extra at the start.
a=[]

while extra != '':     
     extra = input("Guest's Name(or press Enter to quit): ")
     a.append(extra)
     counter += 1

print("\nMy Wedding Attendees are: "  "\n")
a.pop(-1) #removing the '' from the list, as we do not need it 

j=1
for i in range(0,len(a)):
    print(str(j)+'. '+a[i])
    j+=1

【讨论】:

    【解决方案2】:

    您基本上会在每次循环迭代中覆盖extra,这就是不打印名称的原因。我建议您将所有客人姓名(带有指定的柜台)收集在一个列表中,然后打印出来。例如:

    print("Now enter the names of other people you are inviting to your wedding\n")
    
    counter = 0
    
    guest_names = list()
    
    while True:
        guest_name = input("Guest's name (or press Enter to quit): ")
        if guest_name == "":
            break
        counter += 1
        guest_names.append(str(counter) + ". " + guest_name)  # record all names
    print("\nMy wedding attendees are:\n" + " ".join(guest_names))
    

    输出将是(在 Jupyter notebook 中测试):

    Now enter the names of other people you are inviting to your wedding
    
    Guest's name (or press Enter to quit): John
    Guest's name (or press Enter to quit): Marie
    Guest's name (or press Enter to quit): Sebbe
    Guest's name (or press Enter to quit): David
    Guest's name (or press Enter to quit): 
    
    My Wedding Attendees are:
    1. John 2. Marie 3. Sebbe 4. David
    

    如果你想在名称之间换行,你应该使用带有join()的换行分隔符:

    print("\nMy wedding attendees are:\n" + "\n".join(guest_names))
    

    在这种情况下,输出将是:

    My wedding attendees are:
    1. John
    2. Marie
    3. Sebbe
    4. David
    

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      如 cmets 中所述,您不会将数据保存在任何地方。我已经使用 enumerate 编写了一个代码,它消除了您对 count 变量的需求。您可以在文档中阅读有关它的信息。代码是

      代码

      print("Now enter the names of other people you are inviting to your wedding\n")
      
      attendes = []  # Keep names of guest
      
      flag = True  # To keep loop control
      
      while flag is True:
          name = input("Guest's Name(or press Enter to quit): ")
          if name is not "":  # If not empty then add to list
              attendes.append(name)
          else:  # stop the loop
              flag = False
      
      print("\nMy Wedding Attendees are: "  "\n")
      
      # No need for count when using enumerate
      for no, name in enumerate(attendes, 1):
          print('{}. {}'.format(no, name), end=', ')
          # If you don't want the , in output just use end=' '
      

      输出

      Now enter the names of other people you are inviting to your wedding
      
      Guest's Name(or press Enter to quit): A
      Guest's Name(or press Enter to quit): B
      Guest's Name(or press Enter to quit): C
      Guest's Name(or press Enter to quit): D
      Guest's Name(or press Enter to quit):
      
      My Wedding Attendees are:
      
      1. A, 2. B, 3. C, 4. D,
      

      【讨论】:

        猜你喜欢
        • 2016-04-02
        • 1970-01-01
        • 2020-11-13
        • 2015-09-13
        • 2016-02-27
        • 2011-09-29
        • 1970-01-01
        • 2015-07-08
        • 1970-01-01
        相关资源
        最近更新 更多