Ниже приводится один из возможных вариантов решения задачи с подробными комментариями и пошаго...
import json
def loadokens(filename=tokens.json):
Функция загружает данные из файла tokens.json.
Если файла не существует, возвращается пустой список.
try:
with open(filename, r, encoding=utf-8) as file:
tokens = json.load(file)
except FileNotFoundError:
tokens = []
return tokens
def saveokens(tokens, filename=tokens.json):
Функция сохраняет данные tokens в файл tokens.json с отступами.
with open(filename, w, encoding=utf-8) as file:
json.dump(tokens, file, indent=4, ensurescii=False)
def updateprice(tokens):
Функция запрашивает у пользователя название токена и новый price,
затем ищет токен по name и обновляет его price,
если такой токен найден.
Если токена с заданным именем не существует, выводится сообщение.
tokename = input(Введите название токена для обновления цены: )
Флаг для проверки, найден ли токен
found = False
Проходим по всем токенам
for token in tokens:
if token.get(name) == tokename:
Если нашли нужный токен, запрашиваем новый price
while True:
try:
newrice = float(input(Введите новое значение price: ))
break
except ValueError:
print(Цена должна быть числом. Попробуйте снова.)
token[price] = newrice
found = True
print(fЦена токена {tokename} успешно обновлена.)
break
if not found:
print(fТокен с названием {tokename} не найден.)
def main():
Шаг 1: ЗАГРУЗКА данных из файла tokens.json
tokens = loadokens()
Если список пуст, сообщаем пользователю и предлагаем добавить новый токен
if not tokens:
print(Файл tokens.json не найден или он пуст. Добавьте новый токен.)
tokename = input(Введите название токена: )
while True:
try:
price = float(input(Введите значение price: ))
break
except ValueError:
print(Цена должна быть числом. Попробуйте снова.)
newoken = {
name: tokename,
price: price
}
tokens.append(newoken)
print(Новый токен добавлен.)
Шаг 2: Изменение данных – поиск токена по name и обновление его price
updateprice(tokens)
Шаг 3: Сохранение обновленного списка токенов в файл tokens.json с отступами
saveokens(tokens)
print(Файл tokens.json успешно обновлен.)
if == :
main()
────────────────────────────
Пошаговое объяснение решения:
-
Импорт модуля json:
Мы используем модуль json для чтения и записи данных в формате JSON.
-
Функция loadokens():
• Пытаемся открыть файл tokens.json для чтения.
• Если файл открыт успешно, данные загружаются с помощью json.load() и возвращаются.
• Если файл не найден (FileNotFoundError), возвращается пустой список tokens.
-
Функция saveokens():
• Принимает обновлённый список токенов и сохраняет его в файл tokens.json.
• Для сохранения используется json.dump() с параметрами indent=4 (для отступов) и ensurescii=False, чтобы корректно сохранялись кириллические символы.
-
Функция updateprice():
• Запрашивает у пользователя ввести название токена, для которого требуется изменить цену.
• Перебирает элементы списка tokens, каждый из которых является словарем.
• Если в токене ключ name совпадает с введенным значением, запрашивает новый price.
• Проводится проверка введённого значения на возможность преобразования в число (float). При неверном вводе пользователю предлагается повторить ввод.
• После успешного ввода новое значение записывается в токен под ключом price.
• Если токен не найден, выводится соответствующее сообщение.
-
Функция main():
• Вызывается функция loadokens() для загрузки данных из файла.
• Если список токенов пуст (что может означать, что файл не существует или пустой), пользователю предлагается добавить новый токен.
• Затем вызывается функция updateprice() для изменения цены у выбранного токена.
• После изменения данных вызывается функция saveokens(), которая записывает обновленные данные обратно в файл tokens.json с красивым форматированием.
• Выводится сообщение об успешном обновлении файла.
-
Блок if == :
• Обеспечивает запуск функции main() при выполнении скрипта напрямую, что является стандартной практикой в Python.
Таким образом, программа выполняет условие задачи: читает JSON-файл, позволяет пользователю изменить значение price по названию токена и сохраняет обновленный файл в отформатированном виде.