当我将输入设为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
答案 0 :(得分:1)
这会导致无限循环。 sum
的值在执行内部while
循环期间永远不会改变,因此while sum > 10:
循环永远不会终止,因为一旦总和超过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)
答案 1 :(得分:0)
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)
答案 2 :(得分:0)
命名变量并不容易,但使用描述性名称可以简化生活:)
y
打印9