创建一个函数来对方程的结果求和。请看,不是那么简单吗?

时间:2014-04-04 13:43:31

标签: python function loops sum equation

我是编程新手,我刚开始使用这个网站。我找不到任何与我的简单问题类似的东西。我正在使用Phyton 3.3。我正在创建一个测量太阳能电池板太阳能强度的代码。我最初做得很好,但我决定使方程更复杂,以更好地反映现实世界的情况。

我正在使用类似于我遇到的问题的简化方程式:

total=0
def equation():
    x=2+i
    total+=x             
    print (total)

for i in range(1,32): #represents no of days in January (31 days)
    equation()
for i in range (32,61): #represents no.of days in February (28days)
    equation()

etc....for all the months

这是问题(“总+ = x)。我无法添加x的所有结果。错误说”total“在赋值之前被引用。现在我可以在函数中引用它但是它会给我每次迭代的结果(x),而不是所有迭代的总和。

真实的等式包含超过15行公式。我想将等式插入不同的范围(一年中的所有12个月)。我不想在每个范围内复制和粘贴这个巨大的公式。看起来很乱。我更喜欢更有效的解决方案并重用代码。到目前为止,我正在挠头。

我还考虑使用内置的SUM函数而不是“total +”,并使用'while'循环找到各种方法来规避问题。没有运气

我正在学习类和在Python中使用OOP。仍在努力理解这些概念。但是我相信基础知识应该涵盖这个问题。但我不知道怎么做。我一直在努力解决这个问题。我非常感谢你的帮助。

如果我不是很清楚,请原谅我。我会尽力澄清你的任何问题。

由于

扎克

5 个答案:

答案 0 :(得分:4)

您的意思是以下代码吗?您似乎忘记了函数i中的equation()参数...

total=0
def equation(i):
    global total
    x=2+i
    total+=x             
    print (total)

for i in range(1,32): #represents no of days in January (31 days)
    equation(i)
for i in range (32,61): #represents no.of days in February (28days)
    equation(i)

但我会这样写:

def equation(x):
     return x + 2

total = sum(map(equation, range(1,32)))
total += sum(map(equation, range(32,61)))

print total # 1830

或者如果你有简单的等式(适合一行):

total = sum(map(lambda i: i + 2, range(1,32)))
total += sum(map(lambda i: i * 2, range(32,61)))

print total # 3226

答案 1 :(得分:1)

如果要在函数内部分配全局变量,则需要在该函数内将其声明为global

def equation():
    global total

但是,虽然这可以解决该错误,但此代码存在其他问题,正如其他人所指出的那样。

答案 2 :(得分:1)

您应该更改函数以i作为输入。然后将求和移出函数。

total=0
def equation(i):
    x=2+i
    return x

for i in range(1,32): #represents no of days in January (31 days)
    total += equation(i)
print total 

或者你可以用list comprehensions这样做。

#OR 
total += sum(equation(i) for i in range(1,32))
print total

答案 3 :(得分:0)

def equation():
  x=2+i

这是你的问题。该函数中的i

中的i不同
for i in range(1,32):

等式中的i是指您的代码中未显示的其他一些先前定义的i变量。 for循环会创建与i引用的equation不同的新equation,但不会将其传递给equation

// note the argument def equation(i): 更改为

equation

然后i会将for循环中的{{1}}作为参数,然后才能正常工作。

答案 4 :(得分:0)

您需要在Python中使用全局变量声明。您可以尝试以下代码:

total=0
def equation(i):
 x=2+i
 global total
 total+=x

for i in range(1,32): #using January as an example
 equation(i)
print total

使用变量设置为global时,请注意不良副作用。

最好使用以下内容:

def equation(i):
x=2+i

def sum_results(s,e): # where s is the starting point and e is the end point
total=0
for i in range(s,e+1):
 total+=equation(i)
print total