使用isdigit()方法强制输入整数:代码合规性与问题分析
代码规范判断与输入校验问题分析
先看这段待分析的代码:
while True: Iq = input("What is your Iq? ") if Iq.isdigit(): print(Iq) break else: print("that is not a number")
代码规范问题
这段代码逻辑能正常运行,但细节上不符合Python的PEP8编码规范:
- 变量命名:
Iq采用了大驼峰命名,PEP8要求变量使用小写字母加下划线的蛇形命名,比如改成iq或者iq_score更规范。 - 文本格式:提示语里的"Iq"无需大写,改成"your IQ?"或者"your iq?"更自然;错误提示
that is not a number首字母应该大写,写成That is not a number才符合英文语法规范。
输入校验的潜在问题
用isdigit()做整数输入强制校验,存在不少场景覆盖不全的问题:
- 无法识别负整数:如果用户输入
-100,负号不属于数字字符,isdigit()会返回False,直接判定为无效输入,但负整数本身是合法的整数类型。 - 不支持带小数点的整数值:比如用户输入
123.0,虽然这个值本质等价于整数123,但字符串里包含小数点,isdigit()会判定为非数字。 - 无法处理前后带空格的输入:如果用户不小心输入了
123(前后有空格),isdigit()返回False,但实际上去掉空格后就是有效整数。 - 不支持其他进制的整数:像十六进制的
0x1A、八进制的0o12这类合法的整数表示方式,isdigit()都无法识别。
内容的提问来源于stack exchange,提问作者NiksterAT
相关产品推荐
相关产品推荐

