Python求三数最大值时仅按首位比较返回错误结果求助
Python三数求最大值输出异常排查
核心触发原因
你感知到的“系统判断大小时仅扫描数字第一个字符”的现象,本质是类型不匹配引发的字符串字典序比较逻辑:
- Python中
input()的返回值固定为字符串类型,即使用户输入纯数字,拿到的也是文本形态的字符串,并非可参与算术运算的数值类型 - 字符串的大小对比规则是逐位比对字符的ASCII编码值,从第一个字符开始校验,只要当前位能分出大小差异,就直接终止后续位的对比
- 对应你的测试场景输入47、57、9,程序实际存储的是三个字符串
"47"、"57"、"9":逐位对比第一位的ASCII值,'4'(编码52) < '5'(编码53) < '9'(编码57),因此max()函数判定"9"为三者最大值,最终出现混合位数输入时输出全局最小数的反常结果。
原代码附带的其他逻辑缺陷
- 输入校验完全失效:三层嵌套的if分支全部只对
num_one做了合法性校验,完全没有检查num_two、num_three的输入是否为合法数字,存在校验漏洞 - 缺失类型转换环节:通过
isdecimal()校验后,没有把字符串转成数值类型就直接传入比较逻辑,直接触发了字符串的字典序比较 - 冗余代码:定义了全程未使用的变量
num4,无实际运行作用
修正后的可运行代码
def maximum(a, b, c): # 传入参数为数值类型时,可直接通过列表求最大值 return max([a, b, c]) num_one = input("Enter 1st Number: ") num_two = input("Enter 2nd Number: ") num_three = input("Enter 3rd Number: ") # 同时校验三个输入的合法性 if num_one.isdecimal() and num_two.isdecimal() and num_three.isdecimal(): # 将字符串转换为整数类型后再参与比较 a = int(num_one) b = int(num_two) c = int(num_three) print(maximum(a, b, c)) else: print("wrong input")
内容的提问来源于stack exchange,提问作者AstroVon
相关产品推荐
相关产品推荐

