Форум сайта python.su
У меня есть проблема. В моём коде, когда добавляешь новый адрес(метод add()), он не сохраняется.
Что мне надо сделать с моим кодом что бы он сохранял в словарь новый адрес?
import pickle addressBook = {} class Ab: def save(): with open('addressBook.pickle', 'wb') as f: pickle.dump(addressBook, f) def load(): with open('addressBook.pickle', 'rb') as f: addressBook = pickle.load(f) def add(): name = input("Введите имя:") address = input("Введите адрес:") addressBook[name] = address print("Адрес добавлен") def delete(): name = input("Введите имя, данные которого хотите удалить") del addressBook[name] print("Адрес удалён") def printAb(): for name, address in addressBook.items(): print("Адрес {0}: {1}".format(name, address)) def change(): name = input("Введите имя, чей адрес вы хотите изменить:") address = input("Введите новый адрес") addresslist[name] = address def find(): name = input("Введите имя, чей адрес вы хотите узнать") print(addressBook[name]) a = Ab num = int(input("Что вы хотите сделать? 1-Добавить новый адрес. 2-Удалить существующий адрес. 3-Вывести все адреса в адреской книге. 4-Изменить существующий адрес. 5-Найти определённый адрес из книги: ")) a.save() if num == 1: a.add() elif num == 2: a.delete() elif num == 3: a.printAb() elif num == 4: a.change() elif num == 5: a.find() else: print("Введите 1 из указанных цифр") print(addressBook)
Отредактировано MortalZorchik (Окт. 1, 2019 12:29:00)
Офлайн
Ab.addressBook = pickle.load(f)
Офлайн
RodegastНе помогло
Офлайн
Ошибок в выводе нет. Напишите все без класса. Функций он у вас все равно никаких не выполняет, а только вас запутывает.
Офлайн
doza_andДело в том, что я учил python по книге ‘A Byte Of Python’ и там была задача:
Ошибок в выводе нет. Напишите все без класса. Функций он у вас все равно никаких не выполняет, а только вас запутывает.
Офлайн
MortalZorchikПрограммирование требует четкости включения логики в голове.
но у меня не сохраняется на жёстком диске объекты.
with open('addressBook.pickle', 'wb') as f: pickle.dump(Ab.addressBook, f) # ок хотя это глупость использовать объект в классе Ab.addressBook def load(): with open('addressBook.pickle', 'rb') as f: addressBook = pickle.load(f) # с какой радости addressBook теперь без Ab? def delete(): name = input("Введите имя, данные которого хотите удалить") del Ab.addresslist[name] # Откуда тут addresslist??? Вы забыли как назвали объект? print("Адрес удалён")
Офлайн
doza_andЯ исправил код. С чего я взял то что файл не сохраняется, потому что при повторном вызове значение добавленное в addressBook с помощью метода Ab.add() не сохраняется(См. скриншот).
Прикреплённый файлы: screenshot_5.png (29,3 KБ)
Офлайн
MortalZorchik
потому что при повторном вызове значение добавленное в addressBook с помощью метода Ab.add()
Отредактировано doza_and (Окт. 1, 2019 21:01:59)
Офлайн
doza_andА что по вашему мнению у меня не работает? Я считаю что именно 3 пункт не работает потому что по скриншоту видно что при вводе нового адреса и выводе опять этой переменной(addressBook) предыдущее имя исчезает(то есть не сохраняется).
Офлайн
MortalZorchikмда, все смешалось люди, кони….
Я считаю что именно 3 пункт не работает потому что по скриншоту видно что при вводе нового адреса и выводе опять этой переменной(addressBook) предыдущее имя исчезает(то есть не сохраняется).
import pickle addressBook = {} # создаетм пустой словарь class Ab: # тут пока неважно что внутри .... a = Ab # хмм связываем класс "Ab" с переменной "а", зачем? вы не знаете как работать с классами? может вам какую книжку почитать или туториал? num = int(input("Что вы хотите сделать? 1-Добавить новый адрес. 2-Удалить существующий адрес. 3-Вывести все адреса в адреской книге. 4-Изменить существующий адрес. 5-Найти определённый адрес из книги: ")) a.save() # сохраняем пустой словарь на диск if num == 1: a.add() # если 1 добавляем запись в словарь elif num == 2: a.delete() # если 2 удаляем запись из словаря elif num == 3: a.printAb() # если 3 выаодим содержание словаря elif num == 4: a.change() # если 4 то по сути ничем не отличаеться от 1 elif num == 5: a.find() # если 5 то выводим адрес else: print("Введите 1 из указанных цифр") # защита от дурака print(addressBook) # вывод словаря в консоль и выход из программы
[code python][/code]
Отредактировано PEHDOM (Окт. 2, 2019 16:05:35)
Офлайн