2016-11-11 18 views
-1

我正在努力简化这个:试图简化我的Python代码,但显示了语法错误:变量未定义

def get_average(name): 
    homework=average(name["homework"]) 
    quizzes=average(name["quizzes"])  
    tests=average(name["tests"]) 
    weighted_mark= homework *0.1+ quizzes*0.3 + tests*0.6 
    return weighted_mark 

所以我使用了一个循环:

def get_average(name): 
    component = ["homework","quizzes","tests"] 
    for thing in component: 
     thing = average(name[thing]) 
    weighted_mark= homework *0.1+ quizzes*0.3 + tests*0.6 
    return weighted_mark 

但是控制台显示语法错误:变量“作业”未定义。 是不是 thing = average(name[thing]) 定义了变量?

这是我与

+2

不,它定义了一个名为“thing”的变量。 –

+0

@DanielRoseman哦!谢谢!那么是否有另一种简化它的方法? – Yao

+1

第一个代码已经够简单了。 –

回答

1

您不能创建变量,如那。 thing = 2将始终为您留下一个名为thing的变量,与之前指出的名称无关。

由于您没有系统结构,因此在打印过程中仍需要枚举三个组件。如果你想摆脱这一点,你可以创建一个字典:

weights = { 
    "homework": 0.1, 
    "quizzes": 0.3, 
    "tests": 0.6, 
} 

,然后使用它像这样

weighted_mark = sum(average(name[thing]) * weights[thing] for thing in weights) 
0

工作你不声明变量dictionary。对于这个propouse,你可以做2件事:从列表中声明变量,或者使用一个字典。

如果要动态地创建变量,你可以使用globals()[]

for x in component: 
    globals()[x] = average(name[x]) 

如果你想创建一个字典,做下:

resultado = dict() 
for x in component: 
    resultado[x] = average(name[x]) 
0

我会通过词典连接这两个权重和组件。然后在一个循环中计算加权标记。

def get_average(name): 
     component = {"homework":0.1, "quizzes":0.3, "tests":0.6} 
     weighted_mark = 0 
     for thing in component: 
       weighted_mark = weighted_mark + average(name[thing]) * component[thing] 
     return weighted_mark 
相关问题