我正在研究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.")
有人能解释其背后的逻辑吗?谢谢。
答案 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>