繁体   English   中英

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

[英]Beginner Python - Answering with either a string or a variable in a loop

到目前为止,我的代码:

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")

除非您输入“退出”以结束循环,否则程序运行正常。 我知道age = int(age)将用户输入定义为整数。 我的问题是如何将其更改为不将“ quit”视为整数,并在输入“ quit”时结束循环。

如果age'quit' ,您还是会破产。 因此,您可以将if用作下一个。 只要您这样做,之后就可以将其设置为int, if

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")

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

您的应用程序的主要目标是收集年龄。 因此,用try / except包裹您的输入,以始终获取整数。 如果收到ValueError ,则进入异常块并检查是否输入quit

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

同样,为了确保您不会错过任何可能用不同大小写键入的“退出”消息,您可以始终将输入设置为lower以始终比较字符串中的相同大小写。 换句话说,当您检查要quit的条目时,请使用age.lower

这是一个工作示例:

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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM