Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 04.04.2020
Сообщений: 15

Создание записной книги

22.04.2020, 23:40. Показов 2953. Ответов 4

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Хотелось бы просить у вас помощи, т.к. сам не могу до конца разобраться.
Написал код, который должен сохранять номер телефона и имя человека, но этого не получается. Сам по себе выводит необходимые записи, но не более.
Собственно сами вопросы:
1. Что я сделал не так? Хочется понять саму ошибку, где я что не дописал. т.к. кажется что я допустил ошибки
2. Если я допустил ошибку с функциями, то какую и какая функция может это исправить, названия и небольшого пояснения будет достаточно что бы я нарыл информацию сам. (с терминами могу немного ошибаться)
3. Что нужно указать в коде, что бы при вводе имени мне выдавали номер телефона.
4. В строке 8 после вводе pickle.dump, в скобках обязательно ли указывать какой файл нужно поместить? т.к. при работе ошибки ни какой не выдает
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import pickle
 
class Phonebook():
 
    phonebookfile = 'Phonebook.data'
    
    f = open (phonebookfile, 'wb')
    pickle.dump (' ', f)
    f.close
 
    f = open ('Phonebook.data', 'rb')
    storedlist = pickle.load (f)
    print (storedlist)
 
    def __init__ (self, name, number):
        self.name = name
        self.number = number
 
    def add ():
        name = input ('Введите имя: ')
        number = input ('Введите номер: ')
        print ('Контакт сохранен.')
 
    def deletio ():
        name = input ('Введите имя: ')
        print ('Контакт удален.')
 
    def search ():
        name = input ('Укажите имя которое нужно найти: ')
        print (name)
 
a = Phonebook
job = int (input('Что нужно сделать? 1 - Записать контакт? 2 - Удалить контакт? 3 - Найти номер?'))
if job == 1:
    a.add ()
elif job == 2:
    a.deletio ()
elif job == 3:
    a.search ()
 
print (a.storedlist)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.04.2020, 23:40
Ответы с готовыми решениями:

База данных по типу записной книги
Подскажите, с помощью каких компонентов можно реализовать записную книгу с столбиком от а до я( фильтрация базы) возможность добавлять и...

Создание Записной книжки
Доброго времени суток всем.Есть задача-создать записную книжку в С++ с такими условиями: Класс Дата(Date) поля день(int) ...

Создание записной книжки C++\STL
Должна содержать поля: дата,заголовок,текст функции:добавление в файл,изменение,поиск,сортировка .. ну вот я stl только начал...

4
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
23.04.2020, 08:18
Лучший ответ Сообщение было отмечено mouse1555 как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# -*- coding: utf-8 -*-
 
import pickle
 
 
 
class Phonebook:
 
    def __init__(self, name: str):
        self.__name__ = name
        self.contancts = {}
 
    def __str__(self, name: str) -> str:
        return f"{self.__class__.__name__}({self.name})"
 
    def append(self, name: str, number: str):
        self.contancts[name] = number
 
    def remove(self, name: str):
        self.contancts.pop(name, None)
 
    def search(self, name: str) -> str:
        return self.contancts.get(name, None)
 
    def clear(self):
        self.contancts.clear()
 
    def load(self, path: str = ""):
        with open(f"{path}\\{self.__name__}.data", "rb") as file:
            self.contancts = pickle.load(file)
 
    def save(self, path: str = ""):
        with open(f"{path}\\{self.__name__}.data", "wb") as file:
            pickle.dump(self.contancts, file)
 
 
 
 
friends = Phonebook("Friends")
 
friends.append("Vasya", "800000000000")
friends.append("Kolya", "811111111111")
friends.append("Batman", "822222222222")
print(friends.contancts)
# {'Vasya': '800000000000', 'Kolya': '811111111111', 'Batman': '822222222222'}
friends.save()
friends.clear()
print(friends.contancts)
# {}
friends.load()
print(friends.contancts)
# {'Vasya': '800000000000', 'Kolya': '811111111111', 'Batman': '822222222222'}
friends.remove("Batman")
print(friends.contancts)
# {'Vasya': '800000000000', 'Kolya': '811111111111'}
print(friends.search("Vasya"))
# 800000000000
1
0 / 0 / 0
Регистрация: 04.04.2020
Сообщений: 15
23.04.2020, 16:29  [ТС]
Спасибо за ответ.
0
0 / 0 / 0
Регистрация: 04.04.2020
Сообщений: 15
23.04.2020, 23:47  [ТС]
Вообщем написал вот такой код.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import pickle
Phone_book = {}
 
class Phonebook:
    
    def __init__ (self, name, number):
        self.name = name
        self.number = number
    
    def add (self):
        file = open ('addressbook.txt', 'rb') # открываем сам файл для использования
        Phone_book = pickle.load (file)        # загружаем объект из файла
        file.close()           # закрываем файл 
        Phone_book[self.name] = self.number    # обращаемся к списку
        file = open ('addressbook.txt', 'wb') # открываем файл для редактирования
        pickle.dump (Phone_book, file)         # помещаем данные в словарь
        file.close ()          # закрываем файл 
 
    def change (self):
        name = input ('Введите имя которое нужно изменить: ') # указываем имя для изменения
        number = input ('Введите номер телефона: ') # указываем телефон для изменения
        a = False              # создаем переменную "а" если были указанны не верные данные, то файл не будет изменен
        file_1 = open ('addressbook.txt', 'rb') # открытие файла
        Phone_book = pickle.load (file_1) # загружаем объект из файла
        file_1.close ()        # закрытие файла
        for key in Phone_book:  # проходит по ключам словаря Phone_book
            if key == name:    # ключ равен имени
                a = True       # то "а" истина
                break          # и программа прерывается
        if a is True:          # если "а" истина то идет замена 
            Phone_book[name] = number      # номера телефона в имени
            file = open ('addressbook.txt', 'wb') # открываем файл
            pickle.dump (Phone_book, file) # помещаем данные в словарь
            file.close ()      # закрываем файл
        else:
            print ('Ошибка.')
    
    def deleted (self):        # удаление имени и номера
        name = input ('Введите имя для удаления: ')
        a = False              # присвоим переменной "а" значение "ложь"
        file = open ('addressbook.txt', 'rb') # открываем файл для редактирования
        Phone_book = pickle.load (file)    # загружаем объект из файла 
        file.close ()          # закрываем файл
        for key in Phone_book:  # проходим по ключам словаря 
            if key == name:        # проверяем условие равенства имени
                a = True       # переменная "а" имеет верное значение
                break          # программа прерывается
        if a is True:          # условие верно то выполняется
            del Phone_book[name]           # удаление имени из словаря 
            file = open ('addressbook.txt', 'wb') # открываем файл
            pickle.dump (Phone_book, file) # помещаем данные в словарь
            file.close ()                 # закрываем файл  
        else:
            print ('Ошибка.')
 
    def find (self):
        name = input ('Введите имя для поиска: ')
        a = False             # присвоим переменной "а" значение "ложь"
        file = open ('addressbook.txt', 'rb') # открываем файл для редактирования
        Phone_book = pickle.load (file)       # загружаем объект из файла
        file.close ()         # закрываем файл
        for key in Phone_book: # проходим по ключам словаря
            if key == name:       # проверяем условие равенства имени 
                a = True          # переменная "а" имеет верное значение
                break             # программа прерывается
        if a is True:         # условие верно то выполняется
            Phone_book[name] = number      # поиск номера по имени
            file = open ('addressbook.txt', 'wb') # открываем файл
            pickle.dump (Phone_book, file) # помещаем данные в словарь
            file.close ()                 # закрываем файл  
        else:
            print ('Ошибка')
 
 
S = Phonebook # указываем переменный "S" значение класса "Phonebook"
sisi = input ('Что нужно сделать: 1 - добавить имя; 2 - изменить; 3 - удалить; 4 - найти: ; 5 - выход') # запрашиваем что нужно сделать
while str (sisi): # выполняем цикл в строке "sisi"
    if str (sisi) != str:   # если "sisi" не равна строке
        break    # то цикл прекращается
    else:
        sisi = input ('Что нужно сделать: 1 - добавить имя; 2 - изменить; 3 - удалить; 4 - найти: ; 5 - выход ') # запрашиваем что нужно сделать
 
while int (sisi) >= 1 or int (sisi) <= 5:  # если введенная цифра равно 1 но меньше 5 то должен исполниться цикл
    if int (sisi) == 1:
        name = input ('Введите имя: ')
        number = input ('Введите номер: ')
        S = Phonebook (name, number)
        S.add ()
        sisi = input ('Что нужно сделать: 1 - добавить имя; 2 - изменить; 3 - удалить; 4 - найти: ; 5 - выход ') # запрашиваем что нужно сделать
    elif int (sisi) == 2:
        Phonebook.change(Phone_book)
        sisi = input ('Что нужно сделать: 1 - добавить имя; 2 - изменить; 3 - удалить; 4 - найти: ; 5 - выход ') # запрашиваем что нужно сделать
    elif int (sisi) == 3:
        Phonebook.deleted (Phone_book)
        sisi = input ('Что нужно сделать: 1 - добавить имя; 2 - изменить; 3 - удалить; 4 - найти: ; 5 - выход ') # запрашиваем что нужно сделать
    elif int (sisi) == 4:
        Phonebook.find (Phone_book)
        sisi = input ('Что нужно сделать: 1 - добавить имя; 2 - изменить; 3 - удалить; 4 - найти: ; 5 - выход ') # запрашиваем что нужно сделать
    elif int (sisi) == 5:
        print ('Закрытие программы.')
        break
    else:
        print ('Ошибка')
        sisi = input ('Что нужно сделать: 1 - добавить имя; 2 - изменить; 3 - удалить; 4 - найти: ; 5 - выход ') # запрашиваем что нужно сделать
Получаю такую ошибку:
Python
1
2
3
4
5
6
7
8
9
10
d:\python>python phone_book3.py
Что нужно сделать: 1 - добавить имя; 2 - изменить; 3 - удалить; 4 - найти: ; 5 - выход1
Введите имя: qqqqqqqqqq
Введите номер: 2222222222
Traceback (most recent call last):
  File "phone_book3.py", line 88, in <module>
    S.add ()
  File "phone_book3.py", line 12, in add
    Phone_book = pickle.load (file)        # загружаем объект из файла
EOFError: Ran out of input
Почитал про режимы в которых можно просматривать и редактировать файл, все с ними вроде верно.
Прошу вас поправить меня, если есть где то ошибка.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
24.04.2020, 02:27
mouse1555, Посмотрите как метод __init__ определен у DmFat.
У Вашего класса при создании экземпляра должно запрашиваться имя телефонной книги, а не имя абонента, а также должен создаваться (изначально пустой) словарь, для размещения списка телефонов.
Так же при создании экземпляра телефонной книги должен указываться аргумент, имя телефонной книги.
Смотрите как это сделано у DmFat.
Цитата Сообщение от DmFat Посмотреть сообщение
friends = Phonebook("Friends")
Похоже Вы не понимаете, что такое класс. И путаете класс "Телефонная книга" с классом "Телефонная запись".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.04.2020, 02:27
Помогаю со студенческими работами здесь

В записной книжке указаны фамилии и номера телефонов 30-ти человек. Составить программу, которая определяет, есть ли в записной книжке информация о че
В записной книжке указаны фамилии и номера телефонов 30-ти человек. Составить программу, которая определяет, есть ли в записной книжке...

Создание записной книжки в Python с использованием Pandas
Всем привет! Недавно начал изучать Питон, ради тренировки решил попробовать создать записную книжку Почитал-почитал, решил, что буду...

Сравнить ФИО из книги 1 и книги 2, и если совпадают, то в столбец А книги 1, подставить данные из столбца В книги 2
Добрый день! Подскажите, как сделать-есть 2 книги. Нужно сравнить фамилии из книги 1 и книги 2 и если ФИО совпадает, то в столбец А книги...

Описать структуру Bibliotec, содержащую следующие поля: автор книги, инвентарный номер книги, название книги
Описать структуру BIBLIOTEC содержащий следующие поля: автор книги , инвентарный номер книги , название книги. Подсчитать , книги скольких...

Создание Гостевой книги
Добрый вечер. Зарегистрировала гостевую книгу на сайте. Теперь надо вставить код &quot;Самый простой способ - это вставить в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru