Найти - Пользователи
Полная версия: Как сделать класс телефонная книга?
Начало » Python для новичков » Как сделать класс телефонная книга?
1 2 3 4
ntkirt
Здравствуйте, несколько дней назад начал изучать питон и столкнулся с сложностью в создании классов. Есть программа телефонная книга которая позволяет вводить и выводить информацию об абонентах, удалять её и производить поиск по имени и телефону. Каким образом эту программу реализовать на основе одного класса методами которого будут: добавление абонента, удаление абонента, вывод всех абонентов, поиск по имени и поиск по телефону?

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
Budulianin
например так

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()
kise97
А в чем, собственно заключается проблема?

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
ntkirt
kise97
А в чем, собственно заключается проблема?
Проблема заключается в том, что саму программу без класса реализовал, а теперь не знаю как эту же программу сделать в классе.
ntkirt
Начал снова делать, выводит ошибку при вызове, подскажите в чём проблема?

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’
>>>
4kpt
Смотрим на функцию:
def add_abon(self, name, num):
Она ожидает два аргумента.

Передаем функции аж
NumBook.add_abon()
НОЛЬ аргументов…
4kpt
И еще. Так не делают
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…
ntkirt
Спасибо
ntkirt
Теперь он выдает:
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’
>>>
4kpt
Создаете экземпляр класса:
num_book = NumBook()
Обращаетесь к чему?
NumBook.add_abon()
К классу. При этом пытаетесь вызвать метод экземпляра.

Исправьте:
num_book.add_abon()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB