0
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

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

4

7 回答 7

1

下面是一个使用交互式 shell 的快速示例:

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

这使用了一种叫做列表理解的东西和内置的方法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

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

>>> [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
于 2013-09-26T20:09:24.640 回答
0

This should do the trick:

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

You can make it even more succinct using list comprehensions:

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])

Not that for both range functions, I have used end+1 because range will only go up to the number before the second parameter to the function.

于 2013-09-26T19:42:37.900 回答
0

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

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
于 2013-09-26T19:46:07.657 回答
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
于 2013-12-12T16:47:08.233 回答
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)))

于 2013-09-26T19:44:47.817 回答
0

首先,您的开头打印语句错误地说明了程序应该做什么。

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

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

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

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

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

于 2013-09-26T20:03:14.170 回答
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

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

所以对于一个独家范围...

(6, 8), 期望 0, (6 - 8) / 2 = 1, 6 甚至是这样减去 1 => 0

(5, 7), 期望 1, (5 - 7) / 2 = 1, 5 是奇数所以什么都不做 => 1

(6, 7), 期望 0, (6 - 7) / 2 = 0.5 (四舍五入到 1), 6 是偶数, 所以减去 1 => 0

(7, 8), 期望 0, (7 - 8) / 2 = 0.5 (四舍五入到 1), 8 是偶数, 所以减去 1 => 0

(7, 10), 期望 1, (7 - 10) / 2 = 1.5 (四舍五入到 2), 10 是偶数, 所以减去 1 => 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
于 2013-09-26T20:03:28.187 回答