python帮助,d未定义,从最高到最低

时间:2015-03-29 11:01:45

标签: python

所以我正在尝试制作一个可以打印3个已保存文本文件(X,Y和Z)的乐谱的程序。

这是我到目前为止所拥有的

option = input("Do you want to review the scores in/from: A)Alphabetical order with highest score. B) Highest-lowest. C)Average from highest-lowest. D)Top 3 scores. [A/B/C/D]? : ") 

if option == 'C':
    def read_scores(scorefile):
        with open(scorefile, 'r') as f:
               d = {}
               averages =[]
    for name, v in d.items():
        average = (sum(v)/len(v))
        averages.append((name, average))
    for name, average in sorted(averages, key=lambda a: a[1], reverse=True):
        print(name, average)
        for scorefile in ['Class X.txt', 'Class Y.txt', 'Class Z.txt']:
            if Class == "X":
                read_scores('Class X.txt')
            elif Class == "Y":
                read_scores('Class Y.txt')
            elif Class == "Z":
                    read_scores('Class Z.txt')'

问题是我试图调整这段编码,以便它可以让我从每个文本文件中打印最高分或最低分,但同样的错误是' d'没有定义发生,任何人都可以帮助我弄清楚我做错了什么,如果可以的话,这将是惊人的。

此外,这是每个文本文件中列出每个分数的方式 -

奥利弗:2

并且文本文件中保存的每个分数都在10以外。

我使用的是Python 3.3.2版。

1 个答案:

答案 0 :(得分:1)

def read_scores(scorefile):
    with open(scorefile, 'r') as f:
           d = {}
           averages =[]

只有定义函数read_scores() - 除非你调用它,d实际上是未定义的,所以下一行会产生错误你提到的消息。

然后,您实际上并没有在该函数中执行任何操作 - 例如,您从未从文件中读取任何内容,因此d仍将是函数末尾的空字典。

最后,daverages是函数的局部变量,所以即使你确实对它们做了一些事情,当函数退出时它们也会被丢弃,所以你要在最不需要return他们。