Python速成班-章7,练习5

时间:2019-08-12 14:25:46

标签: python python-3.x

我正在研究Python Crash课程。我被困在第7章(用户输入和While循环),练习5(电影票)中。问题陈述:电影院根据人的年龄收取不同的票价。如果未满3岁,则免费提供门票;如果介于3到12之间,则票价为10美元;如果他们的年龄超过12岁,则票价为15美元。写一个循环,询问用户年龄,然后告诉他们电影票的价格。

我的代码几乎与发布的解决方案相同,但有一个变化:读取的代码部分的位置

age = input(prompt)

这将更改代码的工作方式,我不确定为什么。具体来说:使用我的代码,打印语句将永远运行(例如,当我尝试运行该程序时,它将在终端显示“ Your ticket is $ 15”,而不会在Terminal中结束)。两种解决方案都在下面发布(第一个是解决方案,第二个是教科书)。

我的代码:

prompt = "How old are you?"
prompt += "\nEnter 'quit' when finished. "

age = input(prompt) 

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

    if age < 3:
        print(" You get in free!")
    elif 3 < age < 12:
        print(" Your ticket is $10.")
    else:
        print("Your ticket is $15.")

教科书解决方案:

prompt = "How old are you?"
prompt += "\nEnter 'quit' when you are finished. "

while True:
    age = input(prompt)
    if age == 'quit':
        break
    age = int(age)

    if age < 3:
        print("  You get in free!")
    elif age < 13:
        print("  Your ticket is $10.")
    else:
        print("  Your ticket is $15.")

有人能解释其背后的逻辑吗?谢谢。

2 个答案:

答案 0 :(得分:0)

在第一个示例中,您将只询问一次输入年龄(循环开始之前),然后循环开始,该循环检查age变量是否为quit,因此您插入3作为输入,它将永远不会变成quit,并且有无限循环。

在第二个示例中(从教科书中),将要求您再次输入年龄,因此用户可以选择将变量age更改为quit或仅更改另一个整数值。将其更改为quit会使while True:的执行中断,并且代码会正常停止。

例如Michael在另一个答案中提到的,例如,如果输入是age.lowercase()QUIT,则应使用Quit来保证循环中断。同样,在运行int(age)之前验证输入是否为整数非常好,因为int('3.14')int('foo')会给您带来错误。

要检查字符串是否可以表示为有效的正整数,可以使用以下方法:

str = '10'
is_valid = str.isdigit()

在这种情况下,is_valid是一个布尔存储,无论它是否有效。

答案 1 :(得分:0)

由于对input()的调用不在循环主体中,因此它将仅运行一次。当循环重复时,它跳到“ while True:”,而不是整个脚本。

作为旁注,您可能还想确保/防止输入为String类型但不等于'quit'的输入,并调用'quit'.tolower()以确保还捕获到大写字符:)< / p>