Skip to main content
 首页 » 编程设计

python之添加 int 和 Python 的数字

2025年05月04日9cyq1162

import sys 
 
def keepsumming(number): 
    numberlist = [] 
    for digit in str(number): 
        numberlist.append(int(digit)) 
    total = reduce(add, numberlist) 
    if total > 9: 
        keepsumming(total) 
    if total <= 9: 
        return total 
 
def add(x,y): 
    return x+y 
 
keepsumming(sys.argv[1]) 

我想创建一个函数,将任意数字的各个数字相加,并不断对数字求和,直到结果仅为一位数字。 (例如 1048576 = 1+0+4+8+5+7+6 = 31 = 3+1 = 4)。该功能似乎适用于某些鞋带,但不适用于其他鞋带。例如:

$python csp39.py 29 

返回无,但是:

$python csp39.py 30 

返回 3,因为它应该...

如有任何帮助,我们将不胜感激!

请您参考如下方法:

正如其他人所提到的,问题似乎出在零件上

if total > 9: 
    keepsumming(total)  # you need return here! 

为了完整起见,我想向您展示一些如何更优雅地解决此任务的示例(如果您有兴趣的话)。第一个也使用字符串:

while number >= 10: 
  number = sum(int(c) for c in str(number)) 

第二个使用模运算,因此根本不需要字符串操作(应该快得多):

while number >= 10: 
  total = 0 
  while number: 
    number, digit = divmod(number, 10) 
    total += digit 
  number = total 

如果你想对数字做不同的事情,你也可以使用迭代器:

def digits(number, base = 10): 
  while number: 
    yield number % base 
    number //= base 
 
number = 12345 
 
# sum digits 
print sum(digits(number)) 
# multiply digits 
from operator import mul 
print reduce(mul, digits(number), 1) 

恕我直言,最后一个是非常好的和惯用的 Python。您可以使用它来实现您的原始功能:

def keepsumming(number, base = 10): 
  if number < base: 
    return number 
  return keepsumming(sum(digits(number, base)), base) 

或迭代:

def keepsumming(number, base = 10): 
  while number >= base: 
    number = sum(digits(number, base)) 

更新:感谢 Karl Knechtel 提示这实际上是一个非常微不足道的问题。如果正确利用基础数学,它可以在一行中解决:

def keepsumming(number, base = 10): 
  return 1 + (number - 1) % (b - 1)