Python 中特定方式的数字总和

Sum of Digits in a specific way in Python

我正在寻找可运行的代码,即:

    int(input) = 2565

打印输出应该是这样的:

    2 + 5 + 6 + 5  = 18 = 1 + 8 = 9

我写了给出最终答案“9”的代码。但是我无法用每个数字分隔的“+”号来写它。假设我需要使用 while 循环,但如何编写代码才能像上面的输出一样?

你可以这样使用:

def sum_of_digits(s):
    if s < 10:
        return s
    return sum_of_digits(sum(int(c) for c in str(s)))
    
> sum_of_digits(2565)
9

它递归地检查数值是否小于 10。如果是,它 returns 这个值。如果不是,它会添加数字,然后在结果上递归调用自身。

编辑

要在进行过程中打印出步骤,您可以这样做:

def sum_of_digits(s):
    if s < 10:
        print(s)
        return s
    print(' + '.join(c for c in str(s)) + ' = ')
    return sum_of_digits(sum(int(c) for c in str(s)))

我是菜鸟,但这应该可以满足您的要求。

干杯, 古列尔莫

import math
import sys

def sumdigits(number):

    digits = []
    for i in range( int(math.log10(number)) + 1):
      digits.append(int(number%10))
      number = number/10

    digits.reverse()
    string = ''
    thesum = 0
    for i,x in enumerate(digits):
      string += str(x)
      thesum += x
      if i != len(digits)-1: string += ' + '
      else: string += ' = '

    if thesum > 10:
      return string,thesum,int(math.log10(number))+1
    else:
      return string,thesum,0


def main():

    number = float(sys.argv[1])
    finalstring = ''

    string,thesum,order = sumdigits(number)
    finalstring += string
    finalstring += str(thesum)
    
    while order > 0:
      finalstring += ' = '
      string,thesum,order = sumdigits(thesum)

      finalstring += string
      finalstring += str(thesum)


    print 'myinput = ',int(number)
    print 'Output = ',finalstring

if __name__ == "__main__":
    main()

首先初始化一个空字符串output_str.
使用 while 循环,当我们的整数大于 9 时继续:

  1. [s for s in str(x)] 将创建一个整数列表(作为字符串)。它叫做 list comprehension,非常有用,我的建议是阅读一些相关内容。
  2. 使用 " + ".join() 我们创建一个字符串,在 数字。在 output_str.
  3. 的末尾添加此字符串
  4. " = "添加到output_str的末尾。
  5. 计算数字的和(我们不能使用sum(lst_of_digits),因为它是一个字符串列表。sum([int(s) for s in lst_of_digits])将字符串列表转换为一个inter列表,可以使用[=19=求和]).将总和存储到 x.
  6. 将新的 x + " = " 添加到 output_string

在字符串的末尾,我们有一个多余的“=”(因为不需要最后一个 (5)),让我们从中删除最后 3 个字符 (=)。

x = 2565
output_str = ""
while x > 9:
    lst_of_digits = [s for s in str(x)]
    output_str += " + ".join(lst_of_digits)
    output_str += " = "
    x = sum([int(s) for s in lst_of_digits])
    output_str += f"{x} = "
output_str = output_str[:-3]

输出:
output_str = '2 + 5 + 6 + 5 = 18 = 1 + 8 = 9'

您可以使用 print 函数的 end 关键字参数,它是 print 在其所有参数都被打印之后将放置的最后一个 character/string,默认为 "\n",但可以根据您的需要进行更改。

和来自字符串的 .join 方法,它将给定的字符串放在给定的 list/iterable 字符串之间以获得所需的结果:

>>> " + ".join("123")
'1 + 2 + 3'
>>> 

混合在一起:

def sum_digit(n):
    s = sum(map(int,str(n)))
    print(" + ".join(str(n)),"=",s, end="")
    if s<10:
        print()
        return s
    else:
        print(" = ",end="")
        return sum_digit(s)

这里我们先求出s上的数字之和,然后随意打印,用end=""打印不会跳到下一行,这是递归步骤所必需的,然后我们检查是否完成,在这种情况下打印一个新的空行,如果没有我们打印一个额外的 = 以将其绑定到下一个递归步骤

>>> sum_digit(2565)
2 + 5 + 6 + 5 = 18 = 1 + 8 = 9
9
>>> 

这可以很容易地修改为 return 通过添加额外的参数或迭代的累积字符串,但我将它们留作 reader 的练习:)