所以我正在尝试制作一个可以打印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版。
答案 0 :(得分:1)
def read_scores(scorefile):
with open(scorefile, 'r') as f:
d = {}
averages =[]
只有定义函数read_scores()
- 除非你调用它,d
实际上是未定义的,所以下一行会产生错误你提到的消息。
然后,您实际上并没有在该函数中执行任何操作 - 例如,您从未从文件中读取任何内容,因此d
仍将是函数末尾的空字典。
最后,d
和averages
是函数的局部变量,所以即使你确实对它们做了一些事情,当函数退出时它们也会被丢弃,所以你要在最不需要return
他们。