インデントエラーです。あなたは以下のこのブロックは最初のインデントレベルになりたい:
for name in sorted(user_scores):
# get the highest score in the list
average = sum(user_scores[name]) /float(len(user_scores[name]))
print(name, "'s average from the last 3 scores is", average)
また、あなたのコードが悪い方法で書かれている多くの場所があります。
user_scores = {}
# 'with' will automatically closes the file after leaving its code block:
with open("Class1.txt") as scorefile:
for line in reversed(scorefile.readlines()):
name, score = line.split()
# nested if inside if/else is better than if-and plus if not:
if name in user_scores:
if len(user_scores[name]) < 3:
user_scores[name].append(int(score))
else:
user_scores[name] = [int(score)]
# If you want to sort by the numeric value, replace 'sorted(user_scores)' with
# 'sorted(user_scores, key=lambda k: user_scores[k])':
for name in sorted(user_scores):
# in Python 3 the '/' operator always returns the appropriate format.
# to get a pure integer division without decimal places, you would use '//'.
# Therefore no need for the float(...) conversion.
average = sum(user_scores[name])/len(user_scores[name])
# str.format(...) is more flexible than just printing multiple items:
print("{}'s average from the last 3 scores is {}".format(name, average))
# No need to store another dictionary with best scores.
# If you want to sort by the numeric value, replace 'sorted(user_scores)' with
# 'sorted(user_scores, key=lambda k: user_scores[k])':
for name in sorted(user_scores):
print("{}'s best score is {}".format(name, max(user_scores[name])))
データを作成するためのツリーメソッドを使用します。 'ast.literal_eval(line.strip()) 'と一緒に使うことができます – dsgdfg
ありがとうございました! – Canadian1010101
出力を名前、または数値(最高得点/平均)でアルファベット順にソートしますか? –