从python中删除分数并将其插入文本文件

2024-06-12 05:32:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python3.3中创建了一个基于文本的游戏,用户可以为他们的角色选择一个类。我想让游戏存储三个分数,这样就可以算出平均分了。我的问题是,我不确定如何让程序在文件中搜索名称并删除最旧的分数,保存分数的文件如下所示:

Bennie
33
62
94
Josh
82
55
31
Jackie
10
4
3

我的当前代码,看看他们是否已经做过游戏,如果没有,写在文件中的分数,如果他们有我已经得到的代码,分裂行和阅读他们。它需要删除的分数衣柜到他们的名字和插入和新的分数前一个名字,但我不确定如何做到这一点。这是我现在的代码

^{pr2}$

Tags: 文件代码用户文本程序名称游戏角色
3条回答

给出一个示例python方法来为文件添加分数(伪代码),根据需要修改以满足您的需要(您的需求不是最有效的方法):

def add_score(user, score, text_file):
    lines = text_file.splitlines()
    count = len(lines)
    user_exists = False
    user_index = -1
    num_scores = 3
    user_num_scores = 0
    for i in range(count-1):
        line = lines[i]
        if user == line:
            # user previous scores start after here
            user_exists = True
            user_index = i
            break

    if not user_exists:
        # user does not exist, create by appending
        lines.append(user)  
        lines.append(str(score)) 
    else: # user exists, fix the scores 
        j=1
        while j <= num_scores:
            line = lines[user_index+j]
            j += 1
            if line.isdigit():
               # user score line
               user_num_scores +=1
        if user_num_scores == num_scores:
            for i in range(1,num_scores-1): lines[user_index+i] = lines[user_index+i+1] # shift up
            lines[user_index+num_scores] = str(score) # add the latest score  
        else: # just append/insert the score, as the previous scores are less than num_scores
            lines.insert(user_index+user_num_scores, str(score))

    return "\n".join(lines)   # return the new text_file back

这样使用:

^{pr2}$

注意给定的函数将不更改文件它只对给定的文件内容进行操作(作为text_file参数)。这是有目的的,因为如果函数本身操纵了文件,它将限制它的使用,因为人们可以在任何方便的瞬间读取或写入整个应用程序的文件。所以这个函数只对字符串起作用。这并不是最有效的方法,例如每个用户可以使用一个文件和一个简单得多的格式,但由于这一点,这个问题的答案仅限于此。在

当您完成添加分数和操作文件后,您可以通过将updated_text写回文件来更新该文件。(如果文件已经在read模式下打开,则必须关闭它,然后在write模式下重新打开)。在

要用新内容写入(更新)文件,请使用如下方法:

file.write(updated_text)

例如,请参见here for python file I/O operations

为什么不尝试创建一个.ini文件并将数据存储在节下面的属性中。它的框架适合您的需求。它的工作方式有点像xml文件,但是由于您的输入和输出参数是有限的(如您所提到的,3分),它似乎是最好的选择。只需在python文档中使用python完成ini文件操作,就知道该怎么做了。干杯!在

不可能更改文件中的一行。只能在文件末尾附加内容或覆盖整个内容。 如果你想把分数存储在一个文件中,你需要一行一行地读取文件,把每一行存储在一个辅助变量中(连接行),当你到达需要修改的行时,把修改过的行连接到辅助变量中。然后继续逐行读取文件并将其存储到辅助变量中。 完成后,在文件中写下辅助变量的内容。在

相关问题 更多 >