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 时继续:
[s for s in str(x)]
将创建一个整数列表(作为字符串)。它叫做 list comprehension,非常有用,我的建议是阅读一些相关内容。
- 使用
" + ".join()
我们创建一个字符串,在
数字。在 output_str
. 的末尾添加此字符串
- 将
" = "
添加到output_str
的末尾。
- 计算数字的和(我们不能使用
sum(lst_of_digits)
,因为它是一个字符串列表。sum([int(s) for s in lst_of_digits])
将字符串列表转换为一个inter列表,可以使用[=19=求和]).将总和存储到 x
.
- 将新的
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 的练习:)
我正在寻找可运行的代码,即:
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 时继续:
[s for s in str(x)]
将创建一个整数列表(作为字符串)。它叫做 list comprehension,非常有用,我的建议是阅读一些相关内容。- 使用
" + ".join()
我们创建一个字符串,在 数字。在output_str
. 的末尾添加此字符串
- 将
" = "
添加到output_str
的末尾。 - 计算数字的和(我们不能使用
sum(lst_of_digits)
,因为它是一个字符串列表。sum([int(s) for s in lst_of_digits])
将字符串列表转换为一个inter列表,可以使用[=19=求和]).将总和存储到x
. - 将新的
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 的练习:)