如何在没有while循环的情况下制作重复的代码?

问题描述 投票:0回答:3

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

到目前为止,我已经用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

有什么建议?

python
3个回答
3
投票

你可以使用递归:

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的长度编码。


0
投票

这是一个稍微棘手的方法,通过使用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

0
投票

如果您正在寻找使用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
© www.soinside.com 2019 - 2024. All rights reserved.