关于while循环的一个int与str之间的疑问
是这样的,我根据书本上的作业编写了这么一段代码,用来接收用户输入的年龄,再用if条件判断从而打印相应的语句。
active_01 = True
prompt_01 = "你多大了?输入你的年龄,来看看你的票价吧!"
prompt_01 += "\n输入”-1“以结束程序: "
while active_01:
age = int(input(prompt_01))
if age == -1:
active_01 = False
if 0<= age < 3:
print("您可以免票入场。")
elif 3<= age < 12:
print("您的票价为10美元。")
elif age >= 12:
print("您的票价为15美元。")
我的问题是,是否存在一种方法,能够接收用户输入的除了int以外的,例如str来终止这个程序。
我现在很迷茫,因为我遇到了这样的问题:
大家知道input返回的type是str,是不能用来在if中与int作比较的,否则会报错。
可是我如何能保证用户输入的年龄能进行比较的前提下,接收用户输入的str(如:购票完毕)来终止这个循环呢?
在我目前的这个程序下,如果用户输入“购票完毕”诸如此类的str会报错,因为int不能整形str。
所以遇到困难了,有没有大佬能帮忙支个招。
谢谢大家。 本帖最后由 jackz007 于 2020-12-28 18:35 编辑
active_01 = True
prompt_01 = "你多大了?输入你的年龄,来看看你的票价吧!"
prompt_01 += "\n输入”-1“以结束程序: "
while active_01:
s = input(prompt_01) . strip()
try:
age = int(s)
if age == -1:
active_01 = False
if 0<= age < 3:
print("您可以免票入场。")
elif 3<= age < 12:
print("您的票价为10美元。")
elif age >= 12:
print("您的票价为15美元。")
except:
if(s == '购票完毕'):
active_01 = False
else:
print("请输入数字.") 二楼的办法可以的,还有用户不能惯着,,让他输入-1退出,就不能让他输入别的退出,哈哈哈 很简单,首先判断用户输入是否是用于退出的字符就可以了
prompt_01 = "你多大了?输入你的年龄,来看看你的票价吧!"
prompt_01 += "\n输入”购票完毕“以结束程序: "
while True:
userinput = input(prompt_01)
if userinput =="购票完毕":
break
try:
age = int(userinput)
except:
print("输入不符合要求!")
continue
if 0<= age < 3:
print("您可以免票入场。")
elif 3<= age < 12:
print("您的票价为10美元。")
elif age >= 12:
print("您的票价为15美元。") 本帖最后由 Daniel_Zhang 于 2020-12-28 19:25 编辑
给你来个简单的吧:
active_01 = True
prompt_01 = "你多大了?输入你的年龄,来看看你的票价吧!"
prompt_01 += "\n输入”-1“以结束程序: "
while active_01:
age = input(prompt_01)
if age.isdigit():
age = int(age)
if 0<= age < 3:
print("您可以免票入场。")
elif 3<= age < 12:
print("您的票价为10美元。")
elif age >= 12:
print("您的票价为15美元。")
else:
active_01 = False
isdigit() 会检查字符串 string 是否为 纯数字 组成的,即单纯的由 0~9 组成的数字,不包含任何的 负数。此处年龄不可能为负数,且年龄不可包含字母,所以只有当用户输入的数值为非负数并且不含任意字母或文字的时候,active_01 才不会发生改变(不会变成 False)
再来给你一个极简版的吧:
while True:
age = input("你多大了?输入你的年龄,来看看你的票价吧!\n输入'-1'以结束程序:")
if age.isdigit():
age = int(age)
if 0<= age < 3:
print("您可以免票入场。")
elif 3<= age < 12:
print("您的票价为10美元。")
else:
print("您的票价为15美元。")
else:
break
while True 表示当条件为真时,持续运行,直到达到退出条件或者被用户手动关闭,和楼主的有异曲同工之处,只不过是简化了
此处的 elif age >= 12 可以被改成 else,因为只有当 input 为数字且不带符号(不为负数)时,才会通过 if age.isdigit() 的判断,所以此处的 else 即为 elif age >= 12
break 是直接退出当前的循环,即退出 while 循环。注意,如果是嵌套循环,则需要看break所处的位置鉴别跳出的是内层还是外层循环。此处是单层,只有一个的 while 循环,所以直接退出了
讲道理,楼上几位大佬用的那些 try 和 except,按照你现在的基础,应该是还没有学的,先不说能不能看懂,python 本来就是追求极简的。
如果该答案对你有帮助,请设置为最佳答案。码字不易,谢谢!
jackz007 发表于 2020-12-28 18:30
哈哈哈,又是大佬先来答的,眼熟你。
try和except在这方面的应用是我没想到的,感谢大佬提供的思路。
感谢大佬一直以来的帮助,以后还请多多指教。 太阳总会升起 发表于 2020-12-28 19:07
二楼的办法可以的,还有用户不能惯着,,让他输入-1退出,就不能让他输入别的退出,哈哈哈
哈哈哈,话是这样说,但是总觉得-1终止程序太怪了,可能是强迫症原因,总想找一个办法用str好好终止程序。 hrp 发表于 2020-12-28 19:09
很简单,首先判断用户输入是否是用于退出的字符就可以了
也眼熟这层大佬~
大佬给的思路我也想出了一个不错的方法:把int整形放在判断用户输入是否为“购票完毕”后来避免int与str的比较,这给我很大的启发。
感谢大佬之前的照顾,以后还请多多指教。
(每次大佬的答案都很好,只是很可惜每次都晚一步哈哈哈。 Daniel_Zhang 发表于 2020-12-28 19:12
给你来个简单的吧:
感谢大佬的答案,看出来大佬很用心的,要是大佬早来一步我就给最佳了哈哈哈。
跟着这层层主学会了isdigit(),确实不亏,这个我以前没接触过。
层主的答案也非常详细,甚至涉及break触发时的缩进问题,感激不尽。
非常感谢层主的帮助,以后还请多多关照! 根据大佬们的帮助,我以我自己的方式,写出了一个可行的方法:
prompt_01 = "你多大了?输入你的年龄,来看看你的票价吧!"
prompt_01 += "\n输入”输入完毕“以结束程序: "
while True:
age = input(prompt_01)
if age == '输入完毕':
break
age = int(age)
if age < 3:
print("您可以免票入场。")
elif age < 12:
print("您的票价为10美元。")
else:
print("您的票价为15美元。")
就是将int对用户输入的整形放到判断用户的输入是否为“购票完毕”(str)之后,来避免str与int在if条件中作比较所引起的报错问题。
感谢大佬们的帮助,我还是初学者,但是每天都很努(秃)力(头),以后还请眼熟我,多多关照{:10_254:}
页:
[1]