python中将数字字符串转化为数值类型再比较大小
问题背景错误原因解决办法第一种:使用系统自带的转化函数第二种:使用我的自定义函数
16进制字符串转化10进制数值类型
问题背景
在工作中,看到一个上线的python代码竟然隐藏了代码,大家来感受下这段代码:(为避免泄露商业信息我做了去除隐私处理)
if str1 > '30' and str1 < '5000' and str1 != '1000':
print("succs")
else:
print("fail")
我们将str1赋一个值进行一下测试,来看看这惊为天人的代码效果如何。
来上图,公开处刑: 我输入的是一个40000的字符串值,按理说是不包含在30到5000出去1000的范围内的。
这竟然是一个已经上线了的代码,开发和测试都干嘛去了。。。。。惊呆了。
错误原因
python虽然是很动态类型的语言,很好用,但是它还没智能到这个程度,一切字符串都是按照字典顺序进行比较的。所以“40000”第一个字符“4”比“30”第一个字符“3”大,比“5000”第一个字符“5”要小,且不等于“1000”的第一个字符“1”。所以成立。
解决办法
第一种:使用系统自带的转化函数
如: int(strparam) 函数
缺点:如果输入的strparam字符串包含字母或特殊字符将会直接报错,不能根据需求自己定制功能。
第二种:使用我的自定义函数