Python:将输入的奇数相加

Python: Adding odd numbers together from an input

有点问题。我正在编写一个简单的程序,它接受数字输入(例如 1567)并将奇数相加并在输出中列出它们。这是我的代码:

import math

def oddsum(n):
    y=n%10
    if(y==0):
        return
    if(y%2!=0):
        oddsum(int(n/10))
        print (str(y),end="")
        print (" ",end="")
    else:
        oddsum(int(n/10))

def main():
    n=int(input("Enter a value : "))
    print("The odd numbers are ",end="")
    oddsum(n)
    s = 0

    while n!=0:
        y=n%10
        if(y%2!=0):
            s += y
            n //= 10

        print("The sum would be ",end=' ')
        print("=",s)
        return

main()

它输出很好,在这个例子中它会打印 1 5 和 7 作为奇数。但是,当它计算总和时,它只是说“7”而不是应该的 13。我真的无法理解我做错事背后的逻辑。如果有人能帮我一点忙,我将不胜感激:)

我知道这是 "s += y" 的问题,因为它基本上只是将 7 相加,但我不确定如何获取输出的 3 个数字并将它们相加。

1567 % 10 将 return 7. 您可能想将您在 oddsum 中打印的数字添加到列表中,然后使用该列表上的 sum 函数来return 正确答案。

直接的问题是 n 仅在余数为奇数时才会更改。例如,1,567 将正确地抓取 7,然后 n=156。 156 是偶数,所以 s 无法递增并且 n 无法除以 10,而是永远停留在 156。

更广泛地说,你为什么不利用你的职能?您已经在遍历以确定数字是否为奇数。您可以添加一个全局参数(或者只是继续向下传递)来增加它。

并且在更高效的规模上,您不需要递归来执行此操作。您可以利用 python 的功能来列出清单。将您的数字 (1567) 转换为字符串 ('1567'),然后遍历字符串字符:

total = 0
for c in '1567':
   c_int = int(c)
   if c_int%2!= 0:
      total += c_int
      print(c)

print(total)

正如@Anthony 所提到的,您的代码永远保持在 156,因为它是一个偶数。

我建议您直接使用字符串输入并循环遍历每个元素。

n = input("Enter a value : ") #'1567'
sum_of_input = sum(int(i) for i in n if int(i)%2) #1+5+7=13
[print(i, end="") for i in n if int(i)%2] #prints '157'

注意如果是奇数,int(i)%2 将 return 1。