如何使循环重复,直到总和是一位数?

时间:2016-09-17 21:24:34

标签: python

提示:编写一个程序,将整数中的所有数字相加。如果结果总和超过一位数,则继续重复,直到总和为一位数。例如,数字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

9 个答案:

答案 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

一个简单,优雅的解决方案。