我正在尝试重复一个代码,该代码要求用户输入名称,然后要求输入新名称。如果用户输入数字,则程序应要求输入新名称。如果用户键入“退出”,程序将打印用户输入的名称。
到目前为止,我已经用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
有什么建议吗?
答案 0 :(得分: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
的长度。
答案 1 :(得分: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
答案 2 :(得分: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