Ari*_*ito 4 python sum function digits python-3.x
我想解决这个问题,但我不知道如何解决
\n我\xc2\xb4d 感谢你的帮助
\n给定n,如果该值有多于一位数字,则取n的数字之和,继续直到\xc2\xb4s只有一位
\n预期输出:
\n16 -> 1 + 6 = 7\n942 -> 9 + 4 + 2 = 15 -> 1 + 5 = 6\n
Run Code Online (Sandbox Code Playgroud)\n我尝试了这个,但我不\xc2\xb4t 知道如何重复它,直到只有一位数字
\nDef sum_digit(n):\n list_of_digits = list(map(int,str(n)))\n\nsu = []\nfor x in list_of_digits:\nx = sum(list_of_digits)\nsu = x\n\nprint(su)\n\nsum_digit(6784)\n
Run Code Online (Sandbox Code Playgroud)\n
您可以使用while
循环重复,直到数字减少到一位数。
def sum_digit(n):
while n > 9:
n = sum(int(i) for i in str(n))
return n
Run Code Online (Sandbox Code Playgroud)
sum_digit(16)
#7
sum_digit(942)
#6
Run Code Online (Sandbox Code Playgroud)
从这个结果来看,每个整数都与其数字之和 mod 9 全等。
\n证明很简单:
\nn \xe2\x89\xa1 sum_{k=0}^{m} 10^k d_k (mod 9) \xe2\x89\xa1 sum_{k=0}^{m} (9+1)^k d_k (mod 9) \xe2\x89\xa1 sum_{k=0}^{m} d_k (mod 9)
, 当m
= 中的位数n
-1
因此,只需计算n % 9
即可找到直到一位数字的数字之和n
,无需任何循环/递归。
def sum_digits(n): # assumes n > 0, otherwise n = 0 is trivial\n # assert(n > 0)\n return (n-1) % 9 + 1 # 1. this will work\n # return n % 9 if n % 9 else 9 # 2. this will also work\n
Run Code Online (Sandbox Code Playgroud)\n