初学者Python - 在循环中回答字符串或变量

时间:2016-02-28 23:23:47

标签: python string while-loop integer

到目前为止我的代码:

prompt = "\nEnter 'quit' when you are finished."
prompt += "\nPlease enter your age: "

while True:
    age = input(prompt)
    age = int(age)

    if age == 'quit':
        break
    elif age <= 3:
        print("Your ticket is free")
    elif age <= 10:
        print("Your ticket is $10")
    else:
        print("Your ticket is $15")

该程序运行正常,除非您输入&#39;退出&#39;结束循环。我知道age = int(age)将用户输入定义为整数。我的问题是如何将其更改为不处理&#39;退出&#39;作为一个整数,并在退出时结束循环&#39;输入。

2 个答案:

答案 0 :(得分:1)

如果age'quit',则无论如何都会中断。因此,您可以使用if代替下一个。只要你这样做,你就可以在if之后将它变成一个int:

while True:
    age = input(prompt)

    if age == 'quit':
        break
    age = int(age)

    if age <= 3:
        print("Your ticket is free")
    elif age <= 10:
        print("Your ticket is $10")
    else:
        print("Your ticket is $15")

当用户输入其他内容时,您可能应该处理这些情况,但是,我建议如下:

while True:
    age = input(prompt)

    if age == 'quit':
        break
    elif not age.isdigit():
        print("invalid input")
        continue

    age = int(age)

    if age <= 3:
        print("Your ticket is free")
    elif age <= 10:
        print("Your ticket is $10")
    else:
        print("Your ticket is $15")

答案 1 :(得分:0)

我实际上会在这里介绍try/except

您的应用程序的主要目标是收集年龄。因此,使用try / except包装输入以始终获取整数。如果您获得ValueError,则会进入您的例外区域并检查您是否输入了quit

应用程序将告诉用户它正在退出并中断。但是,如果用户没有输入quit,而是输入其他字符串,则会告知您该条目无效,并且它将继续询问用户是否有效年龄。

另外,只是为了确保你永远不会错过退出&#39;可以使用不同情况键入的消息,您始终可以将输入设置为lower以始终比较字符串中的相同大小写。换句话说,当您检查条目为age.lower时,请quit

这是一个有效的演示:

prompt = "\nEnter 'quit' when you are finished."
prompt += "\nPlease enter your age: "

while True:
    age = input(prompt)
    try:
        age = int(age)
    except ValueError:
        if age.lower() == 'quit':
            print("Quitting your application")
            break
        else:
            print("You made an invalid entry")
            continue

    if age <= 3:
        print("Your ticket is free")
    elif age <= 10:
        print("Your ticket is $10")
    else:
        print("Your ticket is $15")