Форум сайта python.su
0
Здравствуйте, несколько дней назад начал изучать питон и столкнулся с сложностью в создании классов. Есть программа телефонная книга которая позволяет вводить и выводить информацию об абонентах, удалять её и производить поиск по имени и телефону. Каким образом эту программу реализовать на основе одного класса методами которого будут: добавление абонента, удаление абонента, вывод всех абонентов, поиск по имени и поиск по телефону?
book = {'Ваня': 4098, 'Коля': 4139, 'Петя': 1489,} e = "test" x = 0 control = 0 while control == 0: a = int(input("""0 - новый контакт 1 - просмотр книги 2 - поиск по имени 3 - поиск по номеру 4 - удаление записи """)) if a == 1: b = book.keys() b = list(b) b.sort() for key in b: print(key +'-' +str(book[key])) elif a == 0: e = input("""Введите имя """) x = int(input("""Введите номер """)) book[e]= x elif a == 2: e = input("""Введите имя """) if e in book: print(book[e]) else: print("Контакта не существует") elif a == 3: x = int(input("""Введите номер """)) mirror = dict(zip(book.values(), book.keys())) if x in mirror: print(mirror[x]) else: print("Контакта не существует") elif a == 4: e = input("""Введите имя """) if e in book: del book[e] else: print("Такой записи не существует") else: print("ERROR") break
Офлайн
33
например так
class NumBook(object): def __init__(self): self.abonents = {} def add_abon(self, name, num): self.abonents.update({num: name}) def del_abon(self, num): del self.abonents[num] def out_abon(self): print("Abonents:") for key in self.abonents.keys(): print key,': ', self.abonents[key] def find_num_abon(self, num): print 'find_num: ', self.abonents.get(num, 'unknown name') def find_name_abon(self, name): for key in self.abonents.keys(): if self.abonents[key] == name: print 'find_name:', key num_book = NumBook()
Офлайн
А в чем, собственно заключается проблема?
class PhoneBook: def new_contact(): pass def show_book(): pass def search_by_name(): pass def search_by_phone_number(): pass def remove_contact(): pass
Офлайн
0
kise97Проблема заключается в том, что саму программу без класса реализовал, а теперь не знаю как эту же программу сделать в классе.
А в чем, собственно заключается проблема?
Офлайн
0
Начал снова делать, выводит ошибку при вызове, подскажите в чём проблема?
class NumBook(object): def __init__(self): self.abonents = {'Ваня': 4098, 'Коля': 4139, 'Петя': 1489} def add_abon(self, name, num): self.name = name self.num = num self.name = input("""Введите имя """) self.num = int(input("""Введите номер """)) self.abonents[self.name]= self.num def del_abon(self, num): del self.abonents[num] def out_abon(self): print("Abonents:") for key in self.abonents.keys(): print( key,': ', self.abonents[key]) def find_num_abon(self, num): print( 'find_num: ', self.abonents.get(num, 'unknown name')) def find_name_abon(self, name): for key in self.abonents.keys(): if self.abonents[key] == name: print( 'find_name:', key) num_book = NumBook() a = int(input("""0 - новый контакт 1 - просмотр книги 2 - поиск по имени 3 - поиск по номеру 4 - удаление записи """)) if a == 0: NumBook.add_abon()
Documents and Settings/Александр/Рабочий стол/попытка.py”, line 32, in <module>Отредактировано ntkirt (Авг. 21, 2013 08:59:31)
Офлайн
63
Смотрим на функцию:
def add_abon(self, name, num):
NumBook.add_abon()
Отредактировано 4kpt (Авг. 21, 2013 09:07:36)
Офлайн
63
И еще. Так не делают
self.name = name self.num = num self.name = input("""Введите имя """) self.num = int(input("""Введите номер """))
def add_abon(self, name=None, tel=None): if name is None: name = input("Input name: ") if tel is None: tel = int(input("Input tel: ")) self.abonents["name"] = tel
Отредактировано 4kpt (Авг. 21, 2013 09:13:43)
Офлайн
0
Спасибо 
Офлайн
0
Теперь он выдает:
Traceback (most recent call last):
File “C:\Documents and Settings\Александр\Рабочий стол\попытка.py”, line 34, in <module>
NumBook.add_abon()
TypeError: add_abon() missing 1 required positional argument: ‘self’
>>>
Офлайн
63
Создаете экземпляр класса:
num_book = NumBook()
NumBook.add_abon()
num_book.add_abon()
Отредактировано 4kpt (Авг. 21, 2013 09:32:25)
Офлайн