私はこの本にある演習を行ってきましたが、ちょっとした障害にぶつかりました。課題は次のとおりです。
「トリビア チャレンジ ゲームを改善して、ハイスコアのリストをファイルに保持できるようにします。プログラムは、プレイヤーの名前とスコアを記録する必要があります。ハイスコアは、ピクルス オブジェクトを使用して保存します。」
スコアをリストに保存し、このリストを dat ファイルに追加することができました。ただし、スコアを表示したりファイルを読み取ろうとすると、最初に入力したスコアしか表示されないようです。バットファイルを見てみたところ、正しくリストをダンプしているように見えるので、取得部分をめちゃくちゃにしているのではないでしょうか?
読んでくれてありがとう
コードは次のとおりです(BEFORE):
def high_score():
"""Records a player's score"""
high_scores = []
#add a score
name = input("What is your name? ")
player_score = int(input("What is your score? "))
entry = (name, player_score)
high_scores.append(entry)
high_scores.sort(reverse=True)
high_scores = high_scores[:5] # keep only top five
# Open a new file to store the pickled list
f = open("pickles1.dat", "ab")
pickle.dump(high_scores, f)
f.close()
choice = None
while choice !="0":
print(
"""
0 - Quit
1 - Show high scores
"""
)
choice = input("choice: ")
print()
# exit
if choice == "0":
print("Goodbye")
# show a score
if choice == "1":
f = open("pickles1.dat", "rb")
show_scores = pickle.load(f)
print(show_scores)
f.close()
input("\n\nPress enter to exit.")
ソリューション (後):
def high_score():
"""Records a player's score"""
# no previous high score file
try:
with open("pickles1.dat", "rb") as f:
high_scores = pickle.load(f)
except EOFError:
high_scores = []
#add a score // Do current stuff for adding a new score...
name = input("What is your name? ")
player_score = int(input("What is your score? "))
entry = (name, player_score)
high_scores.append(entry)
high_scores.sort(reverse=True)
high_scores = high_scores[:5] # keep only top five
# dump scores
with open("pickles1.dat", "wb") as f:
pickle.dump(high_scores, f)