繁体   English   中英

如何制作没有while循环重复的代码?

[英]How do I make a code that repeats without while-loop?

我正在尝试重复一个代码,要求用户输入名称,然后要求输入新名称。 如果用户输入数字,则程序应要求输入新名称。 如果用户键入“退出”,程序将打印用户输入的名称。

到目前为止,我已经用while循环解决了这个问题,但是我想不使用while循环来解决这个问题,并且仍然不断提示用户输入新名称。

participants=[]
count=0

while True:
    user_name=input("Course participant name: ")
    if user_name == "quit":
        print("Number of participants: ", count)
    elif user_name.isdigit():
        continue
    elif user_name.isalpha():
        participants.append(user_name)
        count+=1
    else:
        print("Invalid input")
        break

有什么建议么?

您可以使用递归:

def ask(participants):
    user_name = input("Course participant name: ")
    if user_name == "quit":
        print("Number of participants: ", len(participants))
    elif user_name.isdigit():
        ask(participants)
    elif user_name.isalpha():
        participants.append(user_name)
        ask(participants)
    else:
        print("Invalid input")
        return

除了循环之外,您还可以深入调用堆栈。 无需单独跟踪count因为它已经按照participants的长度进行了编码。

如果您正在寻找使用for循环的解决方案for则可以执行以下操作:

participants=[]
count=0
from itertools import cycle
for i in cycle(range(0, 1)):
    user_name=input("Course participant name: ")
    if user_name == "quit":
        print("Number of participants: ", count)
    elif user_name.isdigit():
        continue
    elif user_name.isalpha():
         participants.append(user_name)
         count+=1
    else:
         print("Invalid input")
         break

通过使用participants列表本身并提供一个初始元素(开始循环),这是一种有点棘手的方法,该元素最终将被删除。 只要输入了名称,循环就将继续进行,因为participants列表在每次迭代时都会增长。

participants=["Start"] # insert initial element, to start the loop
count=0

for i in participants:
    user_name=input("Course participant name: ")
    if user_name == "quit":
        print("Number of participants: ", count)
    elif user_name.isdigit():
        continue
    elif user_name.isalpha():
        participants.append(user_name)
        count+=1
    else:
        print("Invalid input")
        break

del participants[0] # remove initial element

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM