试图简化我的Python代码但显示语法错误:未定义变量

时间:2016-11-11 12:46:04

标签: python loops

我试图简化这个:

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

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

这是我与之合作的dictionary

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

您没有声明变量。对于该propouse,您可以做两件事:从列表中声明变量,或使用字典。

如果您想动态创建变量,可以使用globals()[]

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

如果你想创建一个字典,请执行下一步:

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

答案 2 :(得分: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