提示:编写一个程序,将整数中的所有数字相加。如果结果总和超过一位数,则继续重复,直到总和为一位数。例如,数字2345的总和2+3+4+5 = 14
不是单个数字,因此重复1+4 = 5
这是一个数字。
这是我到目前为止的代码。它适用于第一部分,但我无法弄清楚如何使它重复,直到总和是一个数字。我很确定我应该将我已有的代码嵌套到另一个while
语句
n = int(input("Input an integer:"))
sum_int=0
while float(n)/10 >= .1:
r= n%10
sum_int += r
n= n//10
if float(n)/10 > .1: print(r, end= " + ")
else: print(r,"=",sum_int)
这是代码的示例输出
输入一个整数:98765678912398
8 + 9 + 3 + 2 + 1 + 9 + 8 + 7 + 6 + 5 + 6 + 7 + 8 + 9 = 88
8 + 8 = 16
1 + 6 = 7
答案 0 :(得分:5)
这应该有效,不涉及任何分工。
n = int(input("Input an integer:"))
while n > 9:
n = sum(map(int, str(n)))
print(n)
它基本上将整数转换为字符串,然后使用列表推导对数字求和,并继续直到数字不大于9。
答案 1 :(得分:3)
您可以尝试此解决方案, 如果n = 98,那么您的输出将是8
def repitative_sum(n):
j=2
while j!=1:
n=str(n)
j=len(n)
n=list(map(int,n))
n=sum(n)
print(n)
答案 2 :(得分:2)
您不需要在此处将整数转换为浮点数;只需在循环中使用divmod()
function:
def sum_digits(n):
newnum = 0
while n:
n, digit = divmod(n, 10)
newnum += digit
return newnum
通过使其成为一种功能,您可以更轻松地将其重复应用于数字,直到它小于10:
n = int(input("Input an integer:"))
while n > 9:
n = sum_digits(n)
print(n)
答案 3 :(得分:2)
你可以利用递归。
试试这个:
def sum_of_digits(n):
s = 0
while n:
s += n % 10
n //= 10
if s > 9:
return sum_of_digits(s)
return s
n = int(input("Enter an integer: "))
print(sum_of_digits(n))
答案 4 :(得分:1)
我不确定它是否是Python中的反实践,因为我对该语言一无所知,但这是我的解决方案。
ul
我再次不确定Python中函数内的递归,但是嘿,它有效:)
答案 5 :(得分:1)
如果您喜欢递归,则必须:
>>> def sum_digits_rec(integ):
if integ <= 9:
return integ
res = sum(divmod(integ, 10))
return sum_digits(res)
>>> print(sum_digits_rec(98765678912398))
7
答案 6 :(得分:0)
您可以使用reduce模块中的functools函数 * 将字符串“减少”到一位数字。 reduce
对序列中的每个元素重复执行操作,直到将序列简化为单个项目为止。
该操作可以是任何功能,但是operator模块为常见操作(包括加法)提供了许多有用的功能。
>>> import functools, operator
>>> functools.reduce(operator.add, (int(x) for x in "98765678912398"), 0)
88
最后一个0
参数用作序列的初始元素,以处理序列为空的情况;通常,您会希望这是操作的标识,0
用于加法,1
用于乘法等。
* 在Python 2中,由于它是内置函数,因此无需从functools
导入reduce。
答案 7 :(得分:0)
def digit_sum(num):
if num < 10:
return num
last_digit = num % 10
num = num / 10
return digit_sum(last_digit + digit_sum(num))
input_num = int(input("Enter an integer: "))
print("result : ",digit_sum(input_num))
这可能对您有帮助..!
答案 8 :(得分:0)
def add_digits(num):
return (num - 1) % 9 + 1 if num > 0 else 0
一个简单,优雅的解决方案。