Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当用户输入某个字符串时,如何使while循环退出?_Python_While Loop - Fatal编程技术网

Python 当用户输入某个字符串时,如何使while循环退出?

Python 当用户输入某个字符串时,如何使while循环退出?,python,while-loop,Python,While Loop,我正在做一项调查,使用while循环询问用户的年龄、性别等。当用户输入诸如“cya”或“bye”之类的字符串时,有没有办法使程序退出循环 我知道我可以在每次输入后生成if语句,但有没有更快/更简单的方法 我想要实现的示例: while (user has not entered "cya"): age = int(input("How old? ")) gender = input("gender? ") 编辑:这个例子很短,但我正在做的调查很长,所以测试每个变量都太耗时。这不

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

我知道我可以在每次输入后生成if语句,但有没有更快/更简单的方法

我想要实现的示例:

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

编辑:这个例子很短,但我正在做的调查很长,所以测试每个变量都太耗时。

这不是一个好主意,但实现目标的一种方法是抛出一个异常以退出循环

    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

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

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

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'}

但是有没有一种方法可以通过while循环来实现呢?我举了一个使用while循环的例子。但是,它比其他版本更复杂,所以我强烈建议使用for循环。谢谢,但是当我运行代码时,它不会循环。问了一次问题就停了?