Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 20, 2013 22:52:15

ntkirt
Зарегистрирован: 2013-08-20
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать класс телефонная книга?

Здравствуйте, несколько дней назад начал изучать питон и столкнулся с сложностью в создании классов. Есть программа телефонная книга которая позволяет вводить и выводить информацию об абонентах, удалять её и производить поиск по имени и телефону. Каким образом эту программу реализовать на основе одного класса методами которого будут: добавление абонента, удаление абонента, вывод всех абонентов, поиск по имени и поиск по телефону?

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

Офлайн

#2 Авг. 21, 2013 01:51:58

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Как сделать класс телефонная книга?

например так

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()



Офлайн

#3 Авг. 21, 2013 01:55:49

kise97
Зарегистрирован: 2012-05-31
Сообщения: 83
Репутация: +  4  -
Профиль  

Как сделать класс телефонная книга?

А в чем, собственно заключается проблема?

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

Офлайн

#4 Авг. 21, 2013 08:35:08

ntkirt
Зарегистрирован: 2013-08-20
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать класс телефонная книга?

kise97
А в чем, собственно заключается проблема?
Проблема заключается в том, что саму программу без класса реализовал, а теперь не знаю как эту же программу сделать в классе.

Офлайн

#5 Авг. 21, 2013 08:56:39

ntkirt
Зарегистрирован: 2013-08-20
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать класс телефонная книга?

Начал снова делать, выводит ошибку при вызове, подскажите в чём проблема?

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()
Вот текст ошибки:
Traceback (most recent call last):
File “CDocuments and Settings/Александр/Рабочий стол/попытка.py”, line 32, in <module>
NumBook.add_abon()
TypeError: add_abon() missing 3 required positional arguments: ‘self’, ‘name’, and ‘num’
>>>

Отредактировано ntkirt (Авг. 21, 2013 08:59:31)

Офлайн

#6 Авг. 21, 2013 09:07:17

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Как сделать класс телефонная книга?

Смотрим на функцию:

def add_abon(self, name, num):
Она ожидает два аргумента.

Передаем функции аж
NumBook.add_abon()
НОЛЬ аргументов…



Отредактировано 4kpt (Авг. 21, 2013 09:07:36)

Офлайн

#7 Авг. 21, 2013 09:08:47

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Как сделать класс телефонная книга?

И еще. Так не делают

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

P.S. По-моему, лучше сразу наследовать от словаря, а не от object…



Отредактировано 4kpt (Авг. 21, 2013 09:13:43)

Офлайн

#8 Авг. 21, 2013 09:18:37

ntkirt
Зарегистрирован: 2013-08-20
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать класс телефонная книга?

Спасибо

Офлайн

#9 Авг. 21, 2013 09:22:14

ntkirt
Зарегистрирован: 2013-08-20
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать класс телефонная книга?

Теперь он выдает:
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’
>>>

Офлайн

#10 Авг. 21, 2013 09:32:06

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Как сделать класс телефонная книга?

Создаете экземпляр класса:

num_book = NumBook()
Обращаетесь к чему?
NumBook.add_abon()
К классу. При этом пытаетесь вызвать метод экземпляра.

Исправьте:
num_book.add_abon()



Отредактировано 4kpt (Авг. 21, 2013 09:32:25)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version