我需要在Python中将两个其他数字之间的偶数相加

时间:2013-09-26 19:27:00

标签: python python-2.7

print "This program computes and prints the sum of all even values"
print "between 2 and a positive integer value entered by the user. \n"

integer = input("Enter a positive integer: ")
while integer <2:
        if integer <2:
            print "Integer must be greater than 2!"
        integer = input("Enter a positive integer: ")
else:
    integer2 = input("Now enter a second integer: ")

evens = (integer - integer2)/2 + 1

while True

我必须能够向用户询问两个号码,然后我的程序应该能够将两个号码之间的所有偶数相加。我刚刚开始编程,所以我没有学到很多东西。我试着四处寻找答案,但这里的答案对我没有任何意义,因为他们使用的技术对我来说太先进了。谢谢!

7 个答案:

答案 0 :(得分:1)

以下是使用交互式shell的快速​​示例:

>>> x = 9
>>> y = 31
>>> sum([z for z in range(x, y + 1) if z % 2 == 0])
220

这使用名为list comprehension的内容和内置方法sum

现在,有关这一切如何协同工作的解释:

Range,正如您所知,它返回两个参数之间的数字列表。

>>> range(x, y + 1)
[9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]

模运算符(%)用于除以两个数字,然后给出余数。这使得找到偶数非常方便:任何偶数除以2的余数都为0。

>>> 5 % 2
1
>>> 4 % 2
0

list comprehension使用这个技巧来构建一个包含给定范围内每个偶数的值列表。

>>> [z for z in range(x, y + 1) if z % 2 == 0]
[10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30]

最后,sum()迭代并累加该列表生成的所有值。

>>> sum([z for z in range(x, y + 1) if z % 2 == 0])
220

答案 1 :(得分:0)

这应该可以解决问题:

start = 0
end = 0

while start < 2 or end <= start:
    start = int(raw_input("Enter start -> "))
    end = int(raw_input("Enter end ->"))

total = 0
for x in range(start, end+1):
    if x % 2 == 0:
        total += x

print total

您可以使用列表推导使其更简洁:

start = 0
end = 0

while start < 2 or end <= start:
    start = int(raw_input("Enter start -> "))
    end = int(raw_input("Enter end -> "))

print sum([x for x in range(start, end+1) if x % 2 == 0])

对于两个范围函数,我都使用end+1,因为范围只会达到函数第二个参数之前的数字。

答案 2 :(得分:0)

一旦你有两个数字,你需要找到它们之间的所有偶数,对吗?

好吧,要查找它们之间的所有数字,请使用range(integer,integer2+1)+1就在那里,因为我假设你想要包括 integer2 )。 要查找该范围内的所有偶数,请使用filter(lambda x: x%2==0, range(integer, integer2+1)),然后将所有使用sum()的总和加起来..所以最后:

sum(filter(lambda x: x%2==0, range(integer, integer2+1)))

答案 3 :(得分:0)

为了生成整数列表,您可以使用范围函数。

range(10, 20)
>> [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

给定一个整数列表,您可以使用列表推导来过滤它。

[number for number in [1, 2, 3, 4, 5, 6] if not number % 2]
>> [10, 12, 14, 16, 18]

给定一个整数列表,您可以使用内置的sum函数计算总和。

sum([1, 2, 3])
>> 6

您可以将所有这些结合起来,并在一个简单的陈述中获得答案。

sum([even for even in range(10, 20) if not even % 2])
>> 70

答案 4 :(得分:0)

首先,您打开的打印语句会错误地说明程序应该执行的操作。

其次,要非常具体。如果它们是偶数,您是否希望将端点包含在总和中?给定的问题陈述不包括它们。

第三,在编程之前先用头脑。所有偶数整数的总和,从2开始,到2N结束是N(N + 1)。如果你从另一个偶数2L开始,其中2L> 2,那么你只需要从2到2L-2中减去该部分。但是你知道那是什么:它是(L-1)L,我所做的就是在“从2开始的所有偶数整数之和”中用N代替L-1。因此,从2L开始到2N结束的所有偶数和的总和为
N(N + 1) - (L-1)L,其中2L和2N包括在总和中。

第四,设置代码以确保使用正确的起点/终点。请记住,用户可能会使用2个均衡,2个赔率,奇数偶数或偶数奇数。你必须考虑所有情况。

第五,在测试任何程序时,尽可能打印出多个中间值。这将使任何错误显而易见。您可以稍后注释掉这些打印语句。

第六,在简单的情况下测试你的程序。

答案 5 :(得分:0)

给出的所有答案都解决了这个问题,但其方式与您尝试的方式不同(IE,使用方程而不是语言功能或基本循环...如果传入非常大的话会降低性能范围),让我试着帮助你解决方程式。

有几件事情出了问题。可能最基本的问题是你的表达背后的逻辑。

例如,您希望以下输入的输出与您的表达式 输出的内容相比...

假设绝对值和地板四舍五入......

(5,7),期望1,(5 - 7)/ 2 + 1 = 2

(6,8),期望0,(6 - 8)/ 2 + 1 = 2

(6,7),期望0,(6 - 7)/ 2 + 1 = 1

似乎你需要检测其中一个整数是否实际上是...整数%2 == 0

所以对于专属范围...

(6,8),期望0,(6-8)/ 2 = 1,6甚至如此减1 =&gt; 0

(5,7),期望1,(5 - 7)/ 2 = 1,5是奇数所以不做任何事情=&gt; 1

(6,7),期望0,(6-7)/ 2 = 0.5(向上舍入到1),6是偶数,因此减去1 =&gt; 0

(7,8),期望0,(7-8)/ 2 = 0.5(向上舍入到1),8是偶数,因此减去1 =&gt; 0

(7,10),期望1,(7-10)/ 2 = 1.5(向上舍入到2),10是偶数,因此减去1 =&gt; 1

现在,我认为这适用于所有输入值。让我们修改代码。

import math

...

evens = math.ceil(math.fabs((integer - integer2) / 2.0))
if integer % 2 == 0 or integer2 % 2 == 0:
    evens -= 1

如果你想让它成为一个包容范围,IE(6,8)会返回2 ...

evensInclusive = evens + (integer + 1) % 2 + (integer2 + 1) % 2

答案 6 :(得分:0)

def addEvenNumbers(num, num1):
    total=0

    for v in range(num,num1+1):
        if v>=0 and v % 2 == 0:
            total+=v  
    return total