为何统计数位奇偶的Python程序中变量d总是返回326
问题排查及修复方案
根因定位
代码的核心错误出在循环内更新变量a的语句:
你使用了a = a / 10,Python3中/属于浮点除法,运算后a会变为浮点数类型。比如输入数字12,第一次运算后a会变成1.2,后续会依次变为0.12、0.012…… 由于正数做浮点除法永远得到正数,循环会一直执行,直到浮点数精度下溢变为0才终止,整个循环会固定执行326次左右,因此你得到的d值始终固定为326。
修复方案
将浮点除法替换为整数除法//即可,//会直接丢弃除法结果的小数部分,只保留整数部分,每次循环刚好移除已经处理过的最后一位数字,直到a变为0退出循环,完美匹配逐位统计的需求。
修改后的核心代码行:a = a // 10
修复后完整代码
a=int(input("enter a number:")) c=0 d=0 while a>0: b=a%10 a=a//10 if b%2==0: c=c+1 else: d=d+1 print("even numbers:",c) print("odd numbers:",d)
效果验证
输入测试用例1234:
- 偶数位为2、4,共2个
- 奇数位为1、3,共2个
程序输出:
even numbers: 2 odd numbers: 2
与预期结果一致。
内容的提问来源于stack exchange,提问作者Karlo Blaskovic
相关产品推荐
相关产品推荐

