IndexError: list index out of range, хотя такого не должно быть

пытаюсь написать код, получаю ошибку:

lines[1] += 1

IndexError: list index out of range

вот так выглядит файл stats.txt: (на него опирается программа) (в самом файле отсутствуют комментарии)

0 % # здесь рейтинг побед ( кол-во побед / кол-во игр )
0 # здесь кол-во игр (итераций в общей сумме)
0 # здесь кол-во побед
0 # здесь кол-во поражений

строк здесь 4, а значит, что проблема не в файле. основной код:

# программа для построения статистики игры

import random
import sys

"""
!!game возвращает список: 0 индекс - победитель, 1 индекс - все проигравшие,
2 индекс - все учавствовшие игроки ( range(1, 101) ),
с 3 по 9 индексы - проигравшие в соответствующий раундах!!
"""
from tournament import game


# обновляет винрейт (нулевая строка в файле stats.txt)
def update_winrate(datas: list):
    wr_exit = float(int(datas[2]) / int(datas[1]))
    return wr_exit


# обновляет данные в файле, после того, как отформатировал данные нужным образом
def update(path, winrate: float, stats: list):
    with open(path, "w") as f:
        stats[0] = winrate
        output = ""
        for j, i in zip(range(len(stats)), stats):
            if j == 0:
                i = f"{i} %\n"
            else:
                i = f"{i}\n"
            output += i

            f.write(output)


# главный цикл
for _ in range(1):

    # каждую итерацию читаем файл, чтобы поддерживать актуальность данных
    with open("stats.txt", "r") as file:

        # пустой список, который мы в будущем будем использовать в update()
        lines = []

        # редактируем каждую строку файла. проверяем на наличие препятствующих символов
        for summary, line in zip(range(len([i for i in file])), file):
            line = str(line).replace("\n", "").replace("%", "").replace(" ", "")
            try:
                int(line)
            except ValueError:
                sys.exit("error in statistics file!")
            # добавляем в список каждую отредактированную строку
            lines.append(int(line))

    # делаем 'ставку'
    bet = random.choice([i for i in range(1, 101)])
    # воспроизводим игру
    data = game()
    # обновляем данные, для последующей их записи в файл
    if bet == data[0]:
        lines[0] += 1
        lines[1] += 1
        lines[2] += 1
    elif bet != data[0]:
        lines[1] += 1
        lines[3] += 1

    update("stats.txt", update_winrate(lines), lines)

    # просто проверка
    print(lines)

могу предоставить код tournament, если потребуется.

прошу помочь мне с данной проблемой.


Ответы (0 шт):