如何解决在Python中使用递归相加输入数字的位数
因此,我尝试使用代码使用Python将输入的数字相加。我必须使用递归,否则我的教授不会例外。而且我一直在不断遇到问题。但是,最令人气愤的是,当输出对输入的整数的总和说“无”时。
这是我的代码:
def run():
inputNum = int(input("Enter an int: "))
print(f"sum of digits of {inputNum} is {digit_sum(inputNum)}.")
def digit_sum(inputNum):
if (inputNum < 10):
return inputNum
elif (inputNum >= 10):
inputNum = inputNum % 10
digit_sum(inputNum / 10)
if __name__ == "__main__":
run()
每当我输入除一位数字以外的任何整数时,都会说“ {输入的数字}的数字总和为None”。而且我不知道为什么。如果有人可以帮助我,我将非常感谢。
解决方法
正如Green Cloak Guy所说的那样,您在elif语句中没有返回任何值。因此,您将获得“无”结果。
还要查看您的代码,它只会根据初始值除以10返回一个值。您可能要尝试:
retNum = inputNum % 10
baseNum = inputNum - retNum
return retNum + digit_sum(baseNum/10)
这将把模值加到递归方法返回的值上。希望我能够提供帮助
,检查以下代码很容易,希望对您有帮助
def run():
num = int(input("Enter an int: "))
result = sum_of_digit(num)
print("Sum of digits in",num,"is",result)
def sum_of_digit( n ):
if n == 0:
return 0
return (n % 10 + sum_of_digit(int(n / 10)))
if __name__ == "__main__":
run()
,
我发现了几个问题:
-
elif
可以替换为else
-
return
在else
部分中的要求 -
else
逻辑不正确
以下是更正的代码:
def run():
input_num = int(input("Enter an int: "))
print(f"sum of digits of {input_num} is {digit_sum(input_num)}.")
def digit_sum(input_num):
if input_num < 10:
return input_num
else:
return int(input_num % 10) + digit_sum(int(input_num/10))
if __name__ == "__main__":
run()
样本输出:
Enter an int: 678
sum of digits of 678 is 21.
,
这可以简单地通过while循环完成,
def digit_sum(inputNum):
result = 0
while len(str(inputNum)) > 1:
result += inputNum % 10
inputNum //= 10
return inputNum + result
如果您只喜欢递归,请尝试此操作。
def digit_sum(inputNum,result=0):
if inputNum >= 10:
result = inputNum % 10
inputNum //= 10
return result + digit_sum(inputNum,result)
else:
return inputNum
,
您的代码中至少有两个错误:
inputNum = inputNum % 10
digit_sum(inputNum / 10)
首先,当您在下一条语句中仍然需要inputNum
的值时,请在其中进行更改。其次,您犯了一个常见的递归初学者错误,即如果函数返回值,则在递归调用函数时需要处理该返回值。您的代码的有效版本可能显示为:
def digit_sum(inputNum):
if inputNum < 10:
return inputNum
return inputNum % 10 + digit_sum(inputNum // 10)
我们还可以使用经常被遗忘的divmod
函数来实现另一种方法:
def digit_sum(number):
if number < 10:
return number
quotient,remainder = divmod(number,10)
return remainder + digit_sum(quotient)
SO上有两个类似的递归数字求和问题。一个简单地将数字求和。另一个继续应用求和逻辑,直到结果归结为一位数为止。在查询中提供示例输入和输出可以帮助您弄清楚要实现的算法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。