小编典典

用户分数保存程序

python

我正在尝试制作一个程序,它将询问用户名,然后提出一系列问题。每次问题正确时都加一个点。我正在尝试使其将分数和用户名一起存储到文本文件中,以便在文本文件中看起来像这样:

Name    Score

因此,以约翰为例,如果他要获得4分,它将在文本文件中写为:

John    4

但是我想要这样,如果约翰要再次参加考试而不是两次让约翰参加:

John    4
John    6

我希望它读为:

John    4   6

与其重写名称和分数,不如写出tab,然后将分数与名称为John in的那一行写在同一行。

到目前为止,这是我的代码:

import random
name = input("Hello user, what is your name?")
count = (0)
score = (0)
while count != (8):
    count = count + (1)
    symbols = ['+', '-', '*']
    valueF = random.randint(1,10)
    valueS = random.randint(1,10)
    chosensymb = random.choice (symbols)
    question = input("What is %d %s %d ? :"%(valueF, chosensymb, valueS))
    answer = eval(str(valueF) + chosensymb + str(valueS))
    if question == str(answer):            
        score = score + (1)
        print ("Correct")
    else:
        print ("Incorrect")

print("%s, you have scored %d points"%(name,score))
filewrite = open("ScoreSheet.txt","a")
filewrite.write("\n%s\t%d"%(name,score))
filewrite.close()

我不知道该怎么做,我是python的新手,对不起,如果我犯了任何错误,谢谢!


阅读 192

收藏
2021-01-20

共1个答案

小编典典

好吧,首先,您可以将每个人的分数存储在字典中。让我们介绍一个scores对象:

scores = {}

它将名称作为键,将分数作为值。像那样:

scores = {'John': 2,
          'Mary': 5}

如果您引入了新玩家,我们将在上述字典中创建一个新元素,我们将其命名为'John',并带有一个得分0

scores['John'] = 0

然后,如果玩家猜对了,我们将增加玩家的得分:

scores['John'] += 1

+=如果您只想向对象添加一些内容,则可以使用运算符。这是一种简短的说法scores['John'] = scores['John'] + 1

然后魔术开始了!
Python中有一个名为的内置模块pickle,该模块可以将对象(如我们制作的字典-
scores)存储在文件中,然后将它们从文件中弹出,然后将它们还原!

一个快速手动如何一起工作pickle。简而言之,您可以将分数保存到文件中,如下所示:

import pickle
pickle.dump(scores, open("scores.p", "wb"))

然后像这样加载它:

scores = pickle.load(open("scores.p", "rb"))

这并不是真正的最佳存储方式-
还有更多诸如jsoncsvsqlite甚至手动读/写之类的东西,但您现在可以了:)

2021-01-20