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