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