Python计算整数各位数字之和时负数计算错误问题求解
问题根因
现有代码无法处理负整数的核心原因有两点:
- 循环执行的判断条件为
n > 0,输入负整数时初始n值小于0,循环体完全不会执行,累加变量suma始终是初始值0,直接输出错误结果 - Python中负数的取模、整除运算规则和正数存在差异,就算放开循环条件,直接对负数做
%10、//10运算也会得到不符合数位计算预期的结果,比如-56 % 10返回值是4而非6,-56 // 10返回值是-6而非-5 - 循环内部额外嵌套的
if n > 0判断属于完全冗余的逻辑,没有实际作用
修改要点
只需要补1处核心逻辑,删除1处冗余代码即可:
- 读取输入后,立刻用内置
abs()函数将n转换为绝对值,统一把负整数转为对应正整数后再做数位累加,不需要单独编写正负分支判断 - 删除while循环内部多余的
if n > 0判断语句
修改后完整代码
n = int(input("Input a number: ")) suma = 0 n = abs(n) # 统一转为非负整数,兼容正负整数输入 while n > 0: last = n % 10 suma += last n = n // 10 print("The sum of digits of the number is: ", suma)
效果验证
- 输入
-56时,n先被转为56,循环累加6+5=11,输出正确结果 - 输入正整数(比如
123)时,abs处理后值不变,累加3+2+1=6,和原有正整数场景的运行结果完全一致
内容的提问来源于stack exchange,提问作者S1ngle
相关产品推荐
相关产品推荐

