Python:从输入中添加奇数

时间:2018-04-17 22:24:04

标签: python addition

有一点问题。我正在编写一个简单的程序,它接受数字输入(例如,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个数字并将它们加在一起。

3 个答案:

答案 0 :(得分:1)

1567 % 10将返回7.您可能希望将在oddsum中打印的数字添加到列表中,并使用该列表上的sum函数返回正确答案。

答案 1 :(得分:1)

当前问题是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)

答案 2 :(得分:1)

正如@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为奇数,const http = require('http'); const server = http.createServer(...).listen(8080); server.on('connect', (req, cltSocket, head) => { console.log('This step will never be activated!'); ... if (...) { let srvSocket = net.connect('9999', '127.0.0.1', () => { cltSocket.write('\r\n\r\n'); srvSocket.write(head); srvSocket.pipe(cltSocket); cltSocket.pipe(srvSocket); }); } }); 将返回1。