![](/img/trans.png)
[英]Finding sum of digits of a number until sum becomes single digit in python
[英]Getting wrong sum in program to condense a number to a single digit by adding the digits recursively in Python 2.7
当我将输入设为 12345678 时,为什么我在这里得到的总和为 8 而不是 9 ?
这是我的代码:
def single_digit(a):
n=a
sum=0
while(n>0):
r=n%10
sum+=r
n=n/10
while sum>10:
single_digit(a)
return sum
a=input("\nEnter a number : ")
val=single_digit(a)
print"The number condensed to a single digit = ",val
这将导致无限循环。 sum
的值在内部while
循环的执行过程中永远不会改变,因此while sum > 10:
循环永远不会终止,因为一旦 sum 超过 10,您就无法修改它。 换句话说,一旦sum
超过 10,控件就无法退出循环。
我会写如下函数
def single_digit(a):
# Already in the simplest form. Nothing to do
if a < 10:
return a
num = a
sum_of_digits = 0
# Compute sum of digits of the number
while num > 0:
remainder = num % 10
sum_of_digits += remainder
num = num // 10
# Further condese the output to bring it to simple form i.e. single digit
if sum_of_digits > 10:
return single_digit(sum_of_digits)
else:
return sum_of_digits
编写相同代码的另一种简洁明了的方法,在我看来是
def single_digit(a):
sum_of_digits = sum(int(digit) for digit in str(a))
if sum_of_digits < 10:
return sum_of_digits
else:
return single_digit(sum_of_digits)
while sum>10:
single_digit(a)
您正在计算的数字之和a
则检查是否总和是一个单一的数字,如果不是,你计算原号码的数字的总和a
再次,你应该计算为新的总和。
while sum>10:
sum = single_digit(sum)
另外,如果你想递归,就完全递归:
def single_digit(a):
# now it also works for negative numbers too
if -10 < a < 10:
return a
n=a
sum=0
while(n>0):
r=n%10
sum+=r
n= n/10
return single_digit(sum)
# a=input("\nEnter a number : ")
a = 12345678
val=single_digit(a)
print("The number condensed to a single digit = ",val)
命名变量并不容易,但使用描述性名称会让生活更轻松:)
def sum_of_digits(num):
""" Recursively add the digits of a positive integer until the sum
becomes a single digit. Return the sum. """
if num < 10: # base case
return num
num_copy = num
result = 0
while num_copy > 0:
remainder = num_copy % 10
result += remainder
num_copy //= 10
return sum_of_digits(result)
print(sum_of_digits(12345678))
它打印 9
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.