Answer the question
In order to leave comments, you need to log in
Can't add list to json?
Hello. Help me figure out what's wrong with the code, I'll explain the issue in the comments of the code. Thank you in advance
# код сравняет набранные очки и сохраняет рекорды в scores.json
def save_high_score(stats, settings, date_now, hour_now):
with open('data/scores.json', 'r') as file:
data = json.load(file)
scores = data['scores'] # список рекордных очков
dates = data['dates'] # список времён когда была зарегистрована рекорд
# для теста
print("loaded score date data:", scores, dates, "len:", len(scores), len(dates))
# список должна быть длины не более 7(установлена в settings.amount_of_score_labels)
if len(scores) >= settings.amount_of_score_labels:
# заработает если список достиг лимита(седьмого индекса)
for index in range(len(scores)):
# сравниваем набранные очки и установленные ранее рекорды
if int(stats.score) == int(scores[index]):
# если уже есть такой рекорд, выйдем из цикла
break
elif int(scores[index])<int(stats.score):
# если есть побитый рекорд, добавляем нового и убираем лишний индекс
dates.insert(index, f"{date_now} - {hour_now}")
scores.insert(index, stats.score)
dates = dates[:7]
scores = scores[:7]
break
elif len(scores)<settings.amount_of_score_labels:
# заработает если список рекордов не достиг лимита(ниже 7)
for index in range(len(scores)):
# если уже есть такой рекорд, выйдем из цикла
if int(stats.score) == int(scores[index]):
break
elif int(scores[index])<int(stats.score):
# добавляем новый рекорд в соответствующем месте
dates.insert(index, f"{date_now} - {hour_now}")
scores.insert(index, stats.score)
break
elif len(scores) == 0:
# заработает только в самом начале записи рекордов
dates.append(f"{date_now} - {hour_now}")
scores.append(stats.score)
print(scores, dates) # для теста
for obj in data:
obj['dates'] = []
# программа вывела ошибку в строке выше, текст ошибки ниже
# TypeError: 'str' object does not support item assignment
# в чем дело? я вроде список дал в значении obj['dates']
obj['scores'] = []
obj['dates'].extend(dates)
obj['scores'].extend(scores)
with open('data/scores.json', 'w') as file:
file.write(data)
file.close()
{
"dates": [],
"scores": []
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question