我在python中创建了一个简单的命令行游戏。
用户首先输入他们的昵称,该昵称存储为name
在游戏结束时,用户的分数存储在如下文件中:
wins = str(wins)
losses = str(losses)
file = open('scores.py','a')
file.write(name + ": wins = " + wins + " losses = " + losses + "\n\n")
file.close
(我将'胜利'和#39;变量转换为字符串,因为我似乎无法将整数写入文件,我不知道'知道这是否可行(我确定是这样)但我不知道该怎么做。)
我希望玩游戏的用户有累积分数,即如果他们玩1场比赛并赢得6轮,玩另一场比赛并赢得2轮,我不希望在那里有2个参赛作品&score; score.py'文件,我想说:
*User*: wins = 8 losses = 0
我能想到这样做的唯一方法是,在每场比赛结束后,用户的名字和分数将附加到&scoreH分数。文件,但在此之前,逐行扫描文件以检查用户的昵称是否已经输入了分数。如果在游戏开始时输入的名称与在&rbsp; score.py'中特定行上读取的名称相同。文件,提取行,将胜利和损失的字符串值转换为整数,将游戏中的当前分数添加到存储的分数,然后将其写回文件。
非常感谢任何和所有的帮助,如果代码很糟糕且解决方案很简单,请原谅我,我对python非常陌生,而且我对代码也不是很精通。
答案 0 :(得分:0)
您可以使用内置的json
模块。我认为它非常适合您的用例。
import json
def update_scores(name, wins, losses, scores_file='scores.json'):
try:
with open(scores_file, 'r') as f:
scores = json.load(f)
except (IOError, ValueError):
# Non existing or empty file.
scores = {}
try:
scores[name]['wins'] += wins
scores[name]['losses'] += losses
except KeyError:
# Initialize user score
scores[name] = {'wins': wins, 'losses': losses}
with open(scores_file, 'w') as f:
json.dump(scores, f)
# Use:
update_scores('foo', 3, 8) # {"foo": {"wins": 3, "losses": 8}}
update_scores('foo', 3, 2) # {"foo": {"wins": 6, "losses": 10}}
update_scores('bar', 8, 0) # {"foo": {"wins": 6, "losses": 10}, "bar": {"wins": 8, "losses": 0}}