Python如何实现输入年级超出预设最值时触发重复询问
原代码存在的问题
你写的逻辑有3个核心错误,无法正常运行:
- 提前把输入转成
int类型:如果用户输入字母、特殊符号这类非数字内容,int()转换会直接触发程序崩溃,根本进不了后续校验;而且int类型变量没有isalpha()方法,调用这个方法会直接报错 - 校验逻辑写反:
isalpha()是判断字符串是否全为字母,你要校验的是合法数字,加这个判断完全不符合需求 - 存在语法错误:错误提示的print语句字符串没闭合引号,循环内外重复写了相同的input输入逻辑,冗余还容易出问题
正确实现代码
首先提前定义好合法年级的上下限常量,再做循环校验,同时兼容非数字输入的异常场景:
# 先定义合法年级范围常量,可根据实际业务调整 MIN_YEAR = 7 MAX_YEAR = 13 while True: input_content = input("what year are you in?") # 先判断输入是不是纯数字,避免转int崩溃 if not input_content.isdigit(): print("输入无效,请输入合法的数字年级") continue year = int(input_content) # 再判断年级是否在合法范围 if MIN_YEAR <= year <= MAX_YEAR: # 输入合规,跳出循环 break print("Thats not within Carmels Year levels please try again") # 后续就可以直接用合规的year变量做业务逻辑处理
逻辑说明
- 用
while True做无限循环,只有输入完全合规才会跳出,不用在循环内外重复写input代码 - 先校验输入是否为纯数字,从根源避免转int的崩溃问题,也能过滤掉符号、字母这类无效输入
- 数字校验通过后再做范围判断,不符合要求就直接进入下一轮循环重新询问,符合要求就终止循环拿到正确的年级值
内容的提问来源于stack exchange,提问作者magnolia Barker
相关产品推荐
相关产品推荐

