2

我正在研究一个采用正整数N并计算以下总和的函数:

1 - 2 + 3 - 4 + 5 - 6 + .... N. 

我的教授说我们不能在这上面使用“数学公式”,那我该怎么办呢?

我考虑过使用for循环,但我不知道如何或为该print语句编写什么。这是我到目前为止所拥有的:

n=int(input("enter N="))
for i in range(1, n+1, 1):
    if i % 2 == 0:
        # I'm not sure what print statement to write here

我试过print(i= "+" i+1)了,只是这样奇怪的东西,但我得到了错误,然后就迷路了。

我现在拥有的

n=int(input('enter N='))
total=0
print("sum",)
for i in range(1, n+1, 1):
    if i % 2 == 0:
        count=count - i
        print("-", i)
    else:
        count=count + i
        print("+", i, end=" ")
print("=", total)

#still get errors saying name count not defined and unsupported sperand for +:   
4

5 回答 5

2

首先,要按照描述累加总和,并通过循环而不是“使用数学公式”来完成,您想要这样做:

n=int(input("enter N="))
total = 0
for i in range(1, n+1, 1):
    if i % 2 == 0:
        ????
    else:
        ????
print(total)

你应该能够弄清楚是什么????是:你需要为每个 i 做一些总计,并且对于偶数和奇数来说是不同的。

现在,如果您希望它打印出如下内容:

总和 1 - 2 + 3 - 4 + 5 - 6 + .... N = X

您可以像这样打印一些东西:

n=int(input("enter N="))
total = 0
print ("sum", end=" ")
for i in range(1, n+1, 1):
    if i % 2 == 0:
        print("-", i, end=" ")
        ????
    else:
        if i == 1:
           print(i, end=" ")
        else:
           print("+", i, end=" ")
        ????
print("=", total)

如果您想分别保留负总数和正总数,然后添加它们,正如您在编辑中提到的那样,更改total = 0ntotal, ptotal = 0, 0,然后更改每个 ???? 部分,所以一个对一个整体起作用,一个对另一个起作用。

以上都是针对 Python 3 的。如果你想在 Python 2 中运行它,你需要把这些print函数调用变成print语句。对于我们使用默认换行符结尾的简单情况,这只是删除括号的问题。但是,当我们使用 时end=" ",Python 2 的print语句不会像这样使用关键字参数,因此您必须使用“魔术逗号”,这意味着以空格而不是换行符结束打印输出。因此,例如,而不是这样:

print("+", i, end=" ")

你会这样做:

print "+", i,

同样,对于 Python 3,您不必担心这一点。(另外,有一些方法可以让完全相同的代码在 Python 2 和 3 中运行——例如,使用sys.stdout.write——如果你经常使用这两种语言,你可能需要阅读它。)

于 2012-09-21T22:06:16.483 回答
1

你已经大部分时间了。不过,我不确定您为什么认为需要在循环中放置一个 print 语句。你只想要一个结果,对吧?你已经有了 if i % 2 == 0 - 这是偶数的情况 - 你想根据当前 i 是奇数还是偶数进行加法或减法。所以保持一个正在运行的计数,在每个循环迭代中酌情加减,并在最后打印计数。

于 2012-09-21T22:05:47.653 回答
1

您会看到奇数和偶数发生的情况之间的区别,这很好。

因此,当您在列表中循环时,如果数字是偶数,则执行一项操作,否则执行另一项操作。

计算出结果后,打印它。

于 2012-09-21T22:06:07.757 回答
1

已经在这里的答案中有很多解释。因此,我将尝试解决计算此总和的不同方法:

方法一

def mySum(N):
    answer = 0
    for i in range(1, N+1):
        if i%2:
            answer += i
        else:
            answer -= i
    return answer

方法二

def mySum(N):
    answer = 0
    for i in range(1, N+1, 2):
        answer += i
    for i in range(2, N+1, 2):
        answer -= i
    return answer

方法3

def mySum(N):
    pos = range(1, N+1, 2)
    neg = range(2, N+1, 2)
    return sum(pos) - sum(neg)

方法四

def mySum(N):
    return sum([a-b for a,b in zip(range(1, N+1, 2), zip(2, N+1, 2))])

方法5

def mySum(N):
    return sum([i*-1 if not i%2 else i for i in range(1,N+1)])

方法6

def mySum(N):
    return sum(map(lambda n: n*[-1, 1][i%2], range(1, N+1)))

同样,这些只是为了帮助您入门 python。其他人提供了很好的解释,这并不意味着

于 2012-09-21T22:31:51.693 回答
-2
count = 0
print "0"
for i in range(1, n+1, 1):
    if i % 2 == 0:
        count = count - i
        print "-" , i
    else:
        count = count + i
        print "+" , i
print "=", count
于 2012-09-21T22:07:35.063 回答