Не обновляется словарь Python, хотя в PyCharm симуляторе срабатывает
У меня следующая проблема: добавляю в словарь новый ключ и значение, всё работает отлично в симуляторе PyCharm. НО: когда запускаю программу, которая должна добавлять ключи со значениями в импортированный словарь, пишет, что значение с ключом добавлены, а на самом деле, когда открываю словарь, там нет никаких изменений. Подскажите, пожалуйста, где ошибка ? Заранее благодарю
Словарь:
fruits = {
"banana": 'банан',
"plum": 'слива',
"apple": 'яблоко'
}
Сама программа:
from fruits import fruits
while True:
new_word = input("Please, input new word or phrase: ")
new_definition = input("Please, input new definition: ")
fruits[new_word] = new_definition
print(f'\nYou added follow:\n{new_word}: {new_definition}')
print(fruits)
wish = input("Would you like to continue ? ")
if wish == "no":
break
Ответы (1 шт):
Когда вы импортируете словарь fruits из модуля fruits.py, вы работаете с копией этого словаря в памяти. Изменения, которые вы делаете в этой копии, не отображаются в исходном файле fruits.py.Для более масштабных приложений лучше использовать базу данных вместо файла. Если вы не хотите сохранять изменения постоянно, можно использовать глобальную переменную в модуле fruits.py:
# fruits.py
global fruits
fruits = {
"banana": 'банан',
"plum": 'слива',
"apple": 'яблоко'
}
Основной код немного оптимизировал:
from fruits import fruits
import json
from pathlib import Path
def save_fruits(data: dict, file_path: Path = Path('fruits.py')):
file_path.write_text(f"fruits = {json.dumps(data, ensure_ascii=False, indent=4)}\n", encoding='utf-8')
def main():
while True:
new_word = input("Пожалуйста, введите новое слово или фразу: ").strip()
if not new_word:
print("Слово не может быть пустым. Попробуй еще раз.")
continue
new_definition = input("Пожалуйста, введите новое определение: ").strip()
if not new_definition:
print("Определение не может быть пустым. Попробуйте еще раз.")
continue
fruits[new_word] = new_definition
print(f'\nВы добавили следующее:\n{new_word}: {new_definition}')
save_fruits(fruits)
if input("Желаете продолжить? (да/нет) ").lower().strip() != "да":
break
if __name__ == "__main__":
main()