我正在处理一个函数,它取一个正整数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 +:
答案 0 :(得分: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 = 0
更改为ntotal, 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
- 如果您经常使用这两种语言,可能需要阅读这些代码。)
答案 1 :(得分:1)
你已经完成了大部分工作。我不确定为什么你认为你需要在循环中放置一个print语句。你只需要一个结果,对吗?你已经拥有了i%2 == 0 - 这是偶数的情况 - 并且你想根据当前的i是奇数还是偶数来加或减。因此,请保持运行计数,在每次循环迭代中添加或减少,并在最后打印计数。
答案 2 :(得分:1)
你看到奇数和偶数发生的情况之间存在差异,这很好。
因此,当您循环浏览列表时,如果数字是偶数,则执行一项操作,或其他执行其他操作。
计算完结果后,再将其打印出来。
答案 3 :(得分:1)
这里的答案已有很多解释。因此,我将尝试解决您计算此总和的不同方式:
方法1 :
def mySum(N):
answer = 0
for i in range(1, N+1):
if i%2:
answer += i
else:
answer -= i
return answer
方法2 :
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)
方法4 :
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。其他人提供了很好的解释,这并不意味着
答案 4 :(得分:-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