Python三角形校验程序小于号比较逻辑异常问题排查
问题根因排查
- 核心问题是输入获取的边长为字符串类型,未转换为数值类型,所有运算和比较都是字符串规则而非数值规则:
- Python中
input()函数的返回值默认是字符串类型,直接执行a+b时做的是字符串拼接操作,不是数值加法:比如输入3和4,a+b得到的是字符串'34'而非数值7 - 字符串的大小比较是按字符的ASCII码逐位对比:比如
'5' < '34'对比第一位的ASCII码,5的ASCII码大于3,直接返回False,符合3、4、5输入校验失败的现象 - 全相同的数字比如三个5能通过的原因:三个字符串都是
'5',拼接后是'55',逐位对比到第一位相同后,长度更短的字符串判定为更小,所以'5' < '55'会返回True,刚好巧合符合判断条件。
- Python中
修复方案
只需要在获取输入后,把值转换为数值类型即可,需要整数边长用int(),需要支持小数边长用float(),修复后代码如下:
a = int(input('a= ')) b = int(input('b= ')) c = int(input('c= ')) print(c < (a+b)) print(b < (a+c)) print(a < (b+c)) print(a) print(b) print(c) while not(c < (a+b) and b < (a+c) and a < (b+c)): print('not a triangle.') a = int(input('a= ')) b = int(input('b= ')) c = int(input('c= ')) print('Loaded triangle a= {0}, b= {1}, c= {2}.'.format(a,b,c))
内容的提问来源于stack exchange,提问作者bigaminn
相关产品推荐
相关产品推荐

