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, если потребуется.
прошу помочь мне с данной проблемой.