Мой код продолжает удалять оценки и имена пользователей - PullRequest
1 голос
/ 20 июня 2020

Я новичок ie в программировании, и я попытался написать простой код, который должен задать пользователю вопрос и добавить балл, если ответ правильный, или убрать балл, если ответ неправильный. Проблема возникает, когда я пытаюсь сохранить счет для следующего открытия «игры».

Мой код выглядит так:

    from random import randint as ran
    from os import remove as rem
    from os import rename as ren
    
    name = input("Whats ur name?(the name is case sensitive)\n")
    sco = []
    i = -1
    s = 0
    NewUser = False
    update = open ("score.tmp", "w")
    getpoint = open ("score.txt", "r")
    
    for line in getpoint:
        a = line.split()
        sco.append(a)
    
    getpoint.close()
    
    try:
        for item in sco:
            i = i + 1
            if(sco[i][0]) == name:
                s = sco[i][1]
                break
            else:
                continue
    except:
        NewUser = True
    
    #some random code here
    
    if NewUser == True:
        with open ("score.txt", "a") as the:
            the.write(name + " " + str(s) + "\n")
    elif NewUser == False:
        sco[i][1] = s
        Update = (str(sco).strip("[]"))

        update.write(Update)
        rem("score.txt")
        update.close()
        ren("score.tmp", "score.txt")

Теперь в обоих случаях (NewUser == True и NewUser == False) предыдущий счет в файле score.txt удаляется. Даже несколько дней назад, когда тот же самый код по какой-то причине «работал так, как должен», например, если score.txt выглядел так:

    Ann 100
    Daven 180
    Bella 90
    Brandon 80

, код вернул бы это:

    [Ann], [100], [Daven], [180], [Bella], [90], [Brandon], [80]

, и это делает невозможным работу программы в следующий раз, когда кто-нибудь ее запустит: (

Пожалуйста, помогите решить эту проблему.

1 Ответ

2 голосов
/ 20 июня 2020

Это из-за этой строки:

update = open ("score.tmp", "w")

, которая открывает файл для записи, усекая его, если он существует. И это ваш первый доступ к этому файлу, поэтому создается впечатление, что он был удален. Он только что был обнулен.

В качестве исправления эту строку нужно переместить так, чтобы она находилась непосредственно перед write(), использующим ее. Кроме того, вы смешиваете open()/close() с pythoni c with open ... - вам следует попытаться придерживаться одного стиля (и with ... рекомендуется).

В общем, не пытайтесь получить доступ к один и тот же файл одновременно с использованием нескольких дескрипторов, если вы не знаете, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...