我是编程新手,我刚开始使用这个网站。我找不到任何与我的简单问题类似的东西。我正在使用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。仍在努力理解这些概念。但是我相信基础知识应该涵盖这个问题。但我不知道怎么做。我一直在努力解决这个问题。我非常感谢你的帮助。
如果我不是很清楚,请原谅我。我会尽力澄清你的任何问题。
由于
扎克
答案 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