鱼C论坛

 找回密码
 立即注册
查看: 1497|回复: 9

[已解决]关于while循环的一个int与str之间的疑问

[复制链接]
发表于 2020-12-28 18:24:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
是这样的,我根据书本上的作业编写了这么一段代码,
用来接收用户输入的年龄,再用if条件判断从而打印相应的语句。
  1. active_01 = True
  2. prompt_01 = "你多大了?输入你的年龄,来看看你的票价吧!"
  3. prompt_01 += "\n输入”-1“以结束程序: "
  4. while active_01:
  5.     age = int(input(prompt_01))
  6.     if age == -1:
  7.         active_01 = False
  8.     if 0<= age < 3:
  9.         print("您可以免票入场。")
  10.     elif 3<= age < 12:
  11.         print("您的票价为10美元。")
  12.     elif age >= 12:
  13.         print("您的票价为15美元。")
复制代码

我的问题是,是否存在一种方法,能够接收用户输入的除了int以外的,例如str来终止这个程序。

我现在很迷茫,因为我遇到了这样的问题:
大家知道input返回的type是str,是不能用来在if中与int作比较的,否则会报错。
可是我如何能保证用户输入的年龄能进行比较的前提下,接收用户输入的str(如:购票完毕)来终止这个循环呢?
在我目前的这个程序下,如果用户输入“购票完毕”诸如此类的str会报错,因为int不能整形str。
所以遇到困难了,有没有大佬能帮忙支个招。
谢谢大家。
最佳答案
2020-12-28 18:30:25
本帖最后由 jackz007 于 2020-12-28 18:35 编辑
  1. active_01 = True
  2. prompt_01 = "你多大了?输入你的年龄,来看看你的票价吧!"
  3. prompt_01 += "\n输入”-1“以结束程序: "
  4. while active_01:
  5.     s = input(prompt_01) . strip()
  6.     try:
  7.         age = int(s)
  8.         if age == -1:
  9.             active_01 = False
  10.         if 0<= age < 3:
  11.             print("您可以免票入场。")
  12.         elif 3<= age < 12:
  13.             print("您的票价为10美元。")
  14.         elif age >= 12:
  15.             print("您的票价为15美元。")
  16.     except:
  17.         if(s == '购票完毕'):
  18.             active_01 = False
  19.         else:
  20.             print("请输入数字.")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-28 18:30:25 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-12-28 18:35 编辑
  1. active_01 = True
  2. prompt_01 = "你多大了?输入你的年龄,来看看你的票价吧!"
  3. prompt_01 += "\n输入”-1“以结束程序: "
  4. while active_01:
  5.     s = input(prompt_01) . strip()
  6.     try:
  7.         age = int(s)
  8.         if age == -1:
  9.             active_01 = False
  10.         if 0<= age < 3:
  11.             print("您可以免票入场。")
  12.         elif 3<= age < 12:
  13.             print("您的票价为10美元。")
  14.         elif age >= 12:
  15.             print("您的票价为15美元。")
  16.     except:
  17.         if(s == '购票完毕'):
  18.             active_01 = False
  19.         else:
  20.             print("请输入数字.")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-12-28 19:07:24 | 显示全部楼层
二楼的办法可以的,还有用户不能惯着,,让他输入-1退出,就不能让他输入别的退出,哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-28 19:09:17 From FishC Mobile | 显示全部楼层
很简单,首先判断用户输入是否是用于退出的字符就可以了
  1. prompt_01 = "你多大了?输入你的年龄,来看看你的票价吧!"
  2. prompt_01 += "\n输入”购票完毕“以结束程序: "
  3. while True:
  4.     userinput = input(prompt_01)
  5.     if userinput =="购票完毕":
  6.         break
  7.     try:
  8.         age = int(userinput)
  9.     except:
  10.         print("输入不符合要求!")
  11.         continue
  12.     if 0<= age < 3:
  13.         print("您可以免票入场。")
  14.     elif 3<= age < 12:
  15.         print("您的票价为10美元。")
  16.     elif age >= 12:
  17.         print("您的票价为15美元。")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-12-28 19:12:00 | 显示全部楼层
本帖最后由 Daniel_Zhang 于 2020-12-28 19:25 编辑

给你来个简单的吧:

  1. active_01 = True
  2. prompt_01 = "你多大了?输入你的年龄,来看看你的票价吧!"
  3. prompt_01 += "\n输入”-1“以结束程序: "
  4. while active_01:
  5.     age = input(prompt_01)
  6.     if age.isdigit():
  7.         age = int(age)
  8.         if 0<= age < 3:
  9.             print("您可以免票入场。")
  10.         elif 3<= age < 12:
  11.             print("您的票价为10美元。")
  12.         elif age >= 12:
  13.             print("您的票价为15美元。")
  14.     else:
  15.         active_01 = False
复制代码


isdigit() 会检查字符串 string 是否为 纯数字 组成的,即单纯的由 0~9 组成的数字,不包含任何的 负数。此处年龄不可能为负数,且年龄不可包含字母,所以只有当用户输入的数值为非负数并且不含任意字母或文字的时候,active_01 才不会发生改变(不会变成 False)

再来给你一个极简版的吧:

  1. while True:
  2.     age = input("你多大了?输入你的年龄,来看看你的票价吧!\n输入'-1'以结束程序:")
  3.     if age.isdigit():
  4.         age = int(age)
  5.         if 0<= age < 3:
  6.             print("您可以免票入场。")
  7.         elif 3<= age < 12:
  8.             print("您的票价为10美元。")
  9.         else:
  10.             print("您的票价为15美元。")
  11.     else:
  12.         break
复制代码


while True 表示当条件为真时,持续运行,直到达到退出条件或者被用户手动关闭,和楼主的有异曲同工之处,只不过是简化了
此处的 elif age >= 12 可以被改成 else,因为只有当 input 为数字且不带符号(不为负数)时,才会通过 if age.isdigit() 的判断,所以此处的 else 即为 elif age >= 12
break 是直接退出当前的循环,即退出 while 循环。注意,如果是嵌套循环,则需要看break所处的位置鉴别跳出的是内层还是外层循环。此处是单层,只有一个的 while 循环,所以直接退出了

讲道理,楼上几位大佬用的那些 try 和 except,按照你现在的基础,应该是还没有学的,先不说能不能看懂,python 本来就是追求极简的。

如果该答案对你有帮助,请设置为最佳答案。码字不易,谢谢!


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-12-28 21:09:49 | 显示全部楼层

哈哈哈,又是大佬先来答的,眼熟你。

try和except在这方面的应用是我没想到的,感谢大佬提供的思路。

感谢大佬一直以来的帮助,以后还请多多指教。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-28 21:11:10 | 显示全部楼层
太阳总会升起 发表于 2020-12-28 19:07
二楼的办法可以的,还有用户不能惯着,,让他输入-1退出,就不能让他输入别的退出,哈哈哈

哈哈哈,话是这样说,但是总觉得-1终止程序太怪了,可能是强迫症原因,总想找一个办法用str好好终止程序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-28 21:14:16 | 显示全部楼层
hrp 发表于 2020-12-28 19:09
很简单,首先判断用户输入是否是用于退出的字符就可以了

也眼熟这层大佬~

大佬给的思路我也想出了一个不错的方法:把int整形放在判断用户输入是否为“购票完毕”后来避免int与str的比较,这给我很大的启发。

感谢大佬之前的照顾,以后还请多多指教。

(每次大佬的答案都很好,只是很可惜每次都晚一步哈哈哈。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-28 21:17:51 | 显示全部楼层
Daniel_Zhang 发表于 2020-12-28 19:12
给你来个简单的吧:

感谢大佬的答案,看出来大佬很用心的,要是大佬早来一步我就给最佳了哈哈哈。

跟着这层层主学会了isdigit(),确实不亏,这个我以前没接触过。

层主的答案也非常详细,甚至涉及break触发时的缩进问题,感激不尽。

非常感谢层主的帮助,以后还请多多关照!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-28 21:22:08 | 显示全部楼层
根据大佬们的帮助,我以我自己的方式,写出了一个可行的方法:
  1. prompt_01 = "你多大了?输入你的年龄,来看看你的票价吧!"
  2. prompt_01 += "\n输入”输入完毕“以结束程序: "
  3. while True:
  4.     age = input(prompt_01)
  5.     if age == '输入完毕':
  6.         break
  7.     age = int(age)
  8.     if age < 3:
  9.         print("您可以免票入场。")
  10.     elif age < 12:
  11.         print("您的票价为10美元。")
  12.     else:
  13.         print("您的票价为15美元。")
复制代码

就是将int对用户输入的整形放到判断用户的输入是否为“购票完毕”(str)之后,来避免str与int在if条件中作比较所引起的报错问题。

感谢大佬们的帮助,我还是初学者,但是每天都很努(秃)力(头),以后还请眼熟我,多多关照
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 12:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表