2014-10-10 174 views
0

我在做一个调查,询问用户年龄,性别等,使用while循环。当用户输入诸如“cya”或“bye”之类的字符串时,有什么办法让程序退出循环?如何在用户输入某个字符串时使while循环退出?

我知道我可以在每次输入后都做一个if语句,但有没有更快更简单的方法来做到这一点?什么我想要实现

例子:

while (user has not entered "cya"): 
    age = int(input("How old? ")) 
    gender = input("gender? ") 

编辑:这个例子很短,但我做的调查是很长,所以测试每一个变量是太费时。

回答

1

我认为执行调查的最简单方法是构建一个所有问题的列表,然后用它来制作所有用户详细信息的字典。

details = {} 
questions = [("gender", "What is your gender?"), ("age", "How old?"), ("name", "What is your name?")] 
response = "" 
while response not in ("bye", "cya"): 
    for detail, question in questions: 
     response = input(question) 
     if response in ("bye", "cya"): 
      break 
     details[detail] = response 
    print(details) 

例子:

What is your gender?M 
How old?5 
What is your name?john 
{'gender': 'M', 'age': '5', 'name': 'john'} 

What is your gender?m 
How old?bye 
{'gender': 'm'} 
+0

但是,有没有办法用一个while循环做到这一点? – 2014-10-10 09:36:25

+0

我举了一个使用while循环的例子。但是,它比其他版本更复杂,所以我强烈建议使用for循环。 – icedtrees 2014-10-10 09:56:13

+0

谢谢,但是当我运行你的代码时,它不会循环。它只是在问了一组问题后才停止? – 2014-10-10 17:21:36

0

这不是一个好主意,但实现你想要的一种方法是抛出一个异常来摆脱循环。

def wrap_input(prompt, exit_condition): 
     x = raw_input(prompt) 
     if x == exit_condition: 
      raise Exception 
     return x 

    try: 
     while True: 
      age = int(wrap_input("gender ", "cya")) 
    except Exception: 
     pass 

编辑:如果您不需要立即退出,然后一个更简洁的方法是要提供一种存储在一组,然后可以在每次迭代检查/复位所有输入自己的输入功能。

相关问题