【问题标题】:Adding numbers in python and in line using function recursion在 python 中添加数字并使用函数递归
【发布时间】:2021-09-27 19:29:04
【问题描述】:

大家好,我有这样的代码

def add_sum(n):
    numStr = str(n)
    sum = 0

    for i in range(len(num_str)):
        sum += int(numStr[])
    return sum
print(add_sum(546))

我希望答案是这样的。

输出:5 + 4 + 6 = 15

我怎样才能使这项工作为我工作?

【问题讨论】:

  • 这段代码充满了错误(并且没有递归)。这是一道测试题吗?
  • 是的,我是一名即将到来的程序员,我想学习,这就是为什么我想要一个与该输出相关的代码。谢谢。

标签: python recursion arraylist sequence add


【解决方案1】:
add_sum = lambda number: sum([int(x) for x in str(number)])

如果你想做字符串转换的方式

编辑:当您提到“递归”时,我假设您指的是循环?

如果你想循环一个数字的数字,你也可以使用模块 10 并每次除数。

【讨论】:

    【解决方案2】:

    你可以试试这个

    def add_sum(n):
        numStr = str(n)
        sum1 = 0
        for i in range(len(numStr)):
            sum1 += int(numStr[i])
        return ' + '.join([str(x) for x in n]),sum1
    i,j=add_sum('546')
    print(i,'=',j)
    

    【讨论】:

      【解决方案3】:

      一种不将 int 转换为 str 的递归解决方案(这是一种昂贵的操作):

      def add_sum(n):
          return 0 if n == 0 else n % 10 + add_sum(n // 10)
      

      如果您更喜欢没有递归的解决方案:

      def add_sum(n):
          result = 0
          while n != 0:
              result += n % 10
              n //= 10
          return result
      

      如果要将 int 转换为 str:

      def add_sum(n):
          return sum(map(int, str(n)))
      

      【讨论】:

        【解决方案4】:
        def add_sum(n):
            numStr = str(n)
            sum = 0
            for i in range(len(numStr)):
                sum += int(numStr[i])
            return sum
        print(add_sum(546))
        

        这是您的代码的正确版本!

        您可以像这样使用递归函数!

        def add_sum(n, sum=0):
            if n == 0:
                return sum
            else:
                sum += n % 10
            return add_sum(int(n/10), sum)
        print(add_sum(546))
        

        给你!溶胶。递归

        def add_sum(n, sum=0, orignal=0):
            if n == 0:
                return(f"{orignal} => {' + '.join(str(orignal))} = {sum}")
            elif orignal == 0:
                orignal = n
                sum += n % 10
            else:
                sum += n % 10
            return add_sum(int(n/10), sum, orignal)
        print(add_sum(54236))
        
        Output:
            54236 => 5 + 4 + 2 + 3 + 6 = 20
        

        【讨论】:

        • 是的,现在我怎样才能得到如下输出:示例:564 => 5 + 6 + 4 = 14 746 = >7 + 4 + 6 = 17 按此顺序。
        • 你的意思是你需要像 564 => 5 + 6 + 4 = 14 那样打印它?
        • 是的,先生。这就是我想要的样子
        • 已更新,请查收!
        【解决方案5】:

        你可以试试这个非递归代码。

        def add_sum(n):
            temp = list(str(n))
            ans = 0
            for i in temp:
                ans += int(i)
        
            print(f"{' + '.join(temp)} = {ans}")    
        
        
        for i in range(3):
            num = int(input())
            add_sum(num)
        
        
        Output:
        
        546
        5 + 4 + 6 = 15
        258
        2 + 5 + 8 = 15
        6985
        6 + 9 + 8 + 5 = 28
        

        【讨论】:

        • 使用for循环并调用add_sum()
        • 更新了答案。请检查。
        • 你好@Ram 请以这种方式为我推进它。一个例子:7988 => 7 + 9 + 8 + 8 = 32 ==> 3 + 2 =5 你不断地添加值直到它变成单个数字。
        【解决方案6】:

        这也有效

        def add(num):
            num_ = str(num)
            if (len(num_) == 1):
                return int(num)
            else:
                x = add(num_[1:])
            return (x + int(num_[0]))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-03
          • 2011-06-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多