繁体   English   中英

如何在 python 中为文本文件添加行数限制

[英]How to add number of lines limit to a text file in python

作为教学大纲的一部分,我目前正在做一个 python 项目。 其中一项标准是最多应有 20 名玩家。 我该如何设置这个限制? 我知道如何将它们设置为 python 内的普通变量,但不是在外部文本文件中。 这可以通过限制用户输入播放器的次数来实现吗? 我添加了注释,以便您了解每条语句的作用。 如果需要,在哪里添加代码。

def playerMenu():
    runningplayer = True
    while runningplayer == True:
        time.sleep(0.3)
        print("\n====================================================")
        print("************|Welcome to The Player Menu|************")
        print("====================================================")
        time.sleep(0.2)
        choice = input('''
====================================================

    A: Add Player & Score
    B: Delete Player
    C: View Scores
    D: Back To Main Menu
    E: Exit Menu

====================================================
\nPlease select what you wish to do: ''')

# This ELIF statement will allow the user to write the name and score of the player.
        if choice == "A" or choice == "a":
            save_name = input('Enter your name: ').title()
            save_score = input('Enter your score: ')
            text_file = open("highscores.txt", "a")
            text_file.write("\n" + save_name + ' | ' + save_score + "\n")
            text_file.close()
            text_file = open("highscores.txt", "r")
            whole_thing = text_file.read()
            print (whole_thing)
            text_file.close()
            
# This ELIF statement will allow the user to delete a player and their score from the text file.
        elif choice == "B" or choice == "b":
            print("These are the current players and their score:")
            text_file = open("highscores.txt", "r")
            whole_thing = text_file.read()
            print(whole_thing)
            text_file.close()
            time.sleep(0.3)
            save_delete = input("Please enter the name of the player you wish to delete: ") + " | "
            #print(f"save_delete = {save_delete}")
            with open("highscores.txt", "r") as f:
                lines = f.readlines()
                #print(lines)
            with open("highscores.txt", "w") as f:
                for line in lines:
                    if not(line.startswith(save_delete)):
                        f.write(line)

# This ELIF statement will allow the user to view the scores of all players.
        elif choice == "C" or choice == "c":
            with open('highscores.txt', encoding = 'utf-8', mode = 'r') as my_file:
                file = open("highscores.txt", encoding='utf-8', mode='r')
                text = file.read()
                print(text)

有多种方法可以解决这个问题,但是,我想您应该将高分表视为具有固定最大长度的队列。 每次输入新的高分时,您都会计算所有现有的高分条目 - 如果计数超过 20,则删除最后一个(最旧的)条目。

编辑:如果你应该保存前 20 个分数,你可以在每次添加新分数时对它们进行排序,然后删除最后一个(最小)分数。

因此,在添加播放器之前,您可以从文件中读取行。 如果行数为 20,则不添加播放器,但如果行数较少,则可以添加它们。

一个简单的方法是使用readlines()这将返回一个包含每一行的列表。 然后你可以检查列表的长度。

# This ELIF statement will allow the user to write the name and score of the player.
save_name = input('Enter your name: ')
save_score = input('Enter your score: ')
text_file = open("untitled.txt", "r")
whole_thing = text_file.readlines()
text_file.close()
if len(whole_thing) < 20:
    text_file = open("untitled.txt", "a")
    text_file.write("\n" + save_name + ' | ' + save_score + "\n")
    text_file.close()
text_file = open("untitled.txt", "r")
whole_thing = text_file.readlines()
print (whole_thing)
text_file.close()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM