Python如何校验用户输入,避免字符串作为二次函数系数的输入值
问题修复方案
原代码存在的问题
- 语法错误:
a1 = int(a1) or a1 = float(a1)是非法写法,Python不支持在or逻辑运算符两侧直接写赋值语句 - 逻辑错误:获取b、c参数的代码中错误引用了a1变量,不会对b、c的用户输入做校验,还会把a的值直接赋给b、c
- 冗余问题:三个参数的校验逻辑完全重复,没有复用
- 遗漏依赖:代码最后调用了
os.system("pause")但没有导入os模块,运行会报错
修正后代码
import os # 封装通用的数值输入校验函数,减少重复代码 def get_numeric_input(prompt): while True: input_val = input(prompt) try: # 优先尝试转整数,失败则转浮点数,覆盖所有数值类型场景 return int(input_val) if input_val.lstrip('-').isdigit() else float(input_val) except ValueError: print("你输入了非数值字符,请按照要求输入数字!") # 调用函数获取三个系数 a = get_numeric_input("请输入ax²的系数a = ") b = get_numeric_input("请输入bx的系数b = ") c = get_numeric_input("请输入常数项系数c = ") # 测试输出,可根据需要删除 print(f"你输入的三个系数分别为:a={a}, b={b}, c={c}") os.system("pause")
代码说明
- 把重复的校验逻辑封装为
get_numeric_input函数,传入提示文本即可返回合法的数值,后续新增参数也可以直接调用,不用重复写循环 - 兼容整数和浮点数输入,只要是合法数值都可以正常接收,非数值输入会触发错误提示要求重新输入
- 补充了os模块的导入,避免最后暂停代码运行报错
- 如果你需要保留原波兰语的提示文本,直接替换函数传入的prompt参数和错误提示内容即可
内容的提问来源于stack exchange,提问作者MaksymalnyMaks
相关产品推荐
相关产品推荐

