【问题标题】:How to make loop repeat until the sum is a single digit?如何使循环重复直到总和为一位数?
【发布时间】:2016-09-17 21:24:34
【问题描述】:

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

【问题讨论】:

  • 似乎是使用递归的绝佳机会。
  • 使用 if 语句和len()
  • 你为什么要让你的程序做所有这些算术?把一个数字变成一个字符串,然后把每个字符变成一个数字。
  • 对于终止条件:'一位十进制数字'的数值可以说什么?如何在上下文中使用它?这可以而且可能应该在不使用浮点数或字符串的情况下解决。
  • 没有这样的一位数了吗?而 n>9

标签: python


【解决方案1】:

这应该可以工作,不涉及分工。

n = int(input("Input an integer:"))
while n > 9:
    n = sum(map(int, str(n)))
print(n)

它基本上将整数转换为字符串,然后使用列表推导对数字求和并继续直到数字不大于 9。

【讨论】:

  • 您不需要将列表发送到sum - 如果您删除括号,它将是一个生成器。或者,由于您要映射到的函数是内置函数,因此您可以使用 n = sum(map(int, str(n)))
【解决方案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))

【讨论】:

  • "You need to" 太强了:迭代解决方案也是可能的,因为这是尾递归的情况,没有递归非常简单。
【解决方案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)

【讨论】:

    【解决方案4】:

    您不需要在这里将整数转换为浮点数;只需在循环中使用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)
    

    【讨论】:

      【解决方案5】:

      我不确定这在 Python 中是否违反惯例,因为我对该语言一无所知,但这是我的解决方案。

      n = int(input("Input an integer:"))
      
      def sum_int(num):
          numArr = map(int,str(num))
          number = sum(numArr)
          if number < 10:
              print(number)
          else:
              sum_int(number)
      
      sum_int(n)
      

      再次,我不确定 Python 中函数内的递归,但是嘿,它有效 :)

      【讨论】:

        【解决方案6】:

        如果你喜欢递归,你必须:

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

        【讨论】:

          【解决方案7】:
          def add_digits(num):
                  return (num - 1) % 9 + 1 if num > 0 else 0
          

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

          【讨论】:

            【解决方案8】:
            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))
            

            这可能对你有帮助..!

            【讨论】:

              【解决方案9】:

              尝试字符串理解:

              new = input("insert your number: ")
              
              new = new.replace(" ","")
              
              new =sum([int(i) for i in new])
              
              if new not in range (10):
                  new = str(new)
                  
                  new = sum ([int(i) for i in new])
              
              print (new)
              

              【讨论】:

                猜你喜欢
                • 2021-05-22
                • 2015-06-05
                • 1970-01-01
                • 1970-01-01
                • 2021-05-17
                • 1970-01-01
                • 2023-03-09
                • 2010-11-07
                • 2021-04-25
                相关资源
                最近更新 更多