Python, список травления в файл - PullRequest
0 голосов
/ 13 ноября 2018

У меня проблема в моей викторине.После викторины, очки и имя игрока должны быть отправлены в файл данных.Проблема в том, что когда я пытаюсь открыть сохраненный файл, я вижу только одно имя: запись рекорда.Где ошибка?Весь код: код

В коде add_score def должен сохранять счет в список, а после всего кода я хочу его открыть.Может ли кто-нибудь мне помочь?

def add_score(name,score):
    """
    Dodaje wynik do osobnego pliku .
    :param name:
    :param score:
    :return:
    """

    my_list = []
    scores = (name,score)
    my_list.append(scores)
    with open("score_games.dat", "ab") as f:
        pickle.dump(my_list, f)
    f.close()

Затем, когда я пытаюсь открыть счет:

main()
print("Wyniki gry:")
with open("score_games.dat", "rb") as f:
    my_list_1 = pickle.load(f)
    print(my_list_1)


f.close()

1 Ответ

0 голосов
/ 13 ноября 2018

Проблема здесь в том, что каждый раз, когда вы звоните add_score(), вы создаете новый список с одной записью, а затем выбираете его.Таким образом, когда вы загружаете файл рассола, вы возвращаете последний список, который содержит только одну запись.

add_score() должен сначала загрузить список рассола, затем добавить к нему счет, а затем засолить его.

def add_score(name,score):
    """
    Dodaje wynik do osobnego pliku .
    :param name:
    :param score:
    :return:
    """

    try:
        # Load the existing list of scores first, if it exists
        with open("score_games.dat", "rb") as f:
            my_list = pickle.load(f)
    except FileNotFoundError:
        my_list = []

    scores = (name,score)
    my_list.append(scores)
    with open("score_games.dat", "ab") as f:
        pickle.dump(my_list, f)
    f.close()
...