我正在尝试制作一个程序,它将询问用户名,然后提出一系列问题。每次问题正确时都加一个点。我正在尝试使其将分数和用户名一起存储到文本文件中,以便在文本文件中看起来像这样:
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的新手,对不起,如果我犯了任何错误,谢谢!
好吧,首先,您可以将每个人的分数存储在字典中。让我们介绍一个scores对象:
scores
scores = {}
它将名称作为键,将分数作为值。像那样:
scores = {'John': 2, 'Mary': 5}
如果您引入了新玩家,我们将在上述字典中创建一个新元素,我们将其命名为'John',并带有一个得分0:
'John'
0
scores['John'] = 0
然后,如果玩家猜对了,我们将增加玩家的得分:
scores['John'] += 1
(+=如果您只想向对象添加一些内容,则可以使用运算符。这是一种简短的说法scores['John'] = scores['John'] + 1。
+=
scores['John'] = scores['John'] + 1
然后魔术开始了! Python中有一个名为的内置模块pickle,该模块可以将对象(如我们制作的字典- scores)存储在文件中,然后将它们从文件中弹出,然后将它们还原!
pickle
有一个快速手动如何一起工作pickle。简而言之,您可以将分数保存到文件中,如下所示:
import pickle pickle.dump(scores, open("scores.p", "wb"))
然后像这样加载它:
scores = pickle.load(open("scores.p", "rb"))
这并不是真正的最佳存储方式- 还有更多诸如json,csv,sqlite甚至手动读/写之类的东西,但您现在可以了:)