Python实现数字根功能时while循环未按预期运行问题排查
你的代码存在两个核心逻辑错误:
- while循环条件完全写反了
你设定的循环执行条件是total >= 0 and total < 10,也就是当前总和已经是个位数的时候才会执行求和逻辑,和你需要的「总和超过1位就重复求和」的需求刚好相反。你初始化total为0,第一次循环执行完计算出的总和是24,已经大于10,循环条件直接不满足,程序直接终止,自然不会进入下一轮拆解多位数的逻辑。 - 求和逻辑冗余且有多处错误
str(num).split()默认按空白符切割,数字转字符串后没有空白字符,切割后得到的是只有完整数字字符串的列表,你后续用join加空格、存列表、正则匹配的拆位逻辑绕了完全不必要的弯路,甚至还会出现running_list未定义的风险(如果num是个位数的情况下,不会进入if int(i) >9的分支,running_list就不会被声明)。- 循环过程中你没有把上一轮的求和结果赋值给num重新计算,也没有在每次循环前重置total的值,就算循环能正常执行,后续的计算也会在上一轮总和的基础上累加,结果完全不符合预期。
修正后的参考代码:
def kata(num): # 只要数字超过1位就继续循环求和 while num >= 10: total = 0 # 直接遍历数字字符串即可拿到每一位 for digit_char in str(num): total += int(digit_char) # 把求和结果赋值给num,进入下一轮判断 num = total return num n = 132189 print(kata(n))
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

