Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 9, 2015 14:05:20

oxeed
Зарегистрирован: 2015-04-09
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Передать аргумент в class

Интересует, как можно имя, фамилию, телефон вводить по запросу Input и далее пользоваться, как аргументом класса.

class Phone_Book:
    def new_contact(self, name, surname, tel):
        self.name = name
        self.surname = surname
        self.tel = tel
        print 'Person:', self.name, self.surname
        print 'Telephone number: ', self.tel
if __name__ == '__main__':
    new_contact = Phone_Book()
    new_contact.new_contact('Vasya', 'Pupkin', 295598789)

Отредактировано oxeed (Апрель 9, 2015 14:16:47)

Офлайн

#2 Апрель 9, 2015 14:22:48

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Передать аргумент в class

if __name__ == __main__:
    new_contact = Phone_Book()
    name = input("Enter name:")
    surname = input("Enter surname:")
    tel = int(input("Enter tel:"))
    new_contact.new_contact(name, surname, tel)

Отредактировано Romissevd (Апрель 9, 2015 14:23:26)

Офлайн

#3 Апрель 13, 2015 22:51:25

oxeed
Зарегистрирован: 2015-04-09
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Передать аргумент в class

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

class PhoneBook:
    def new_contact(self, name, surname, tel):
        self.name = name
        self. surname = surname
        self.tel = tel
        print 'Person:', name, surname
        print'Telephone number: ', tel
    def contact_write(self, contacts):
        self.contacts = contacts
        address_book = open('address_book.txt', 'a')
        for item in contacts:                   
            address_book.write('%s ' % item)
        address_book.close()
        print'Contact saved'
if __name__ == '__main__':
    new_contact = PhoneBook()
    while True:
        name = str(input('Name: '))                
        surname = str(input('Surname: '))
        tel = str(input('Telephone number: '))
        contacts = [name, surname, tel]
        new_contact.new_contact(name, surname, tel)
        new_contact.contact_write(contacts)

Отредактировано oxeed (Апрель 13, 2015 22:52:07)

Офлайн

#4 Апрель 13, 2015 22:58:20

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Передать аргумент в class

address_book.write('%s\n' % item)



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Апрель 13, 2015 23:08:11

oxeed
Зарегистрирован: 2015-04-09
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Передать аргумент в class

Возможно неправильно задал вопрос.

terabayt
address_book.write('%s\n' % item)
В данном случае вывод записи в файл будет такой:

Имя
Фамилия
Телефон
Имя1
Фамилия1
Телефон1


А я хочу добиться вывода:

Имя Фамилия Телефон
Имя1 Фамилия1 Телефон1

Отредактировано oxeed (Апрель 13, 2015 23:09:34)

Офлайн

#6 Апрель 13, 2015 23:18:48

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Передать аргумент в class

def contact_write(self, contacts):
    with open('address_book.txt', 'a') as address_book:
        address_book.write('%s\n' % ' '.join(contacts))
    print'Contact saved'



————————————————
-*- Simple is better than complex -*-

Офлайн

#7 Апрель 15, 2015 11:26:54

oxeed
Зарегистрирован: 2015-04-09
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Передать аргумент в class

Столкнулся со следубщей задачей. Поиск в телефонной книге.
Реализовал это, таким образом:

def search_name(name):
    name = name
    with open('address_book.txt', 'r') as address_book:
            for line in address_book:
                if name in line:
                    print(line)
               else:
                    print("Don't find")
if __name__ == '__main__':
    name = str(input('Input name: '))
    search_name(name)

Как сделать, так чтобы, выдача текста ('Dont find') происходила только один раз, а не на каждой строке.

Отредактировано oxeed (Апрель 15, 2015 11:27:27)

Офлайн

#8 Апрель 15, 2015 11:40:17

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

Передать аргумент в class

def search_name(name):
    with open('address_book.txt', 'r') as address_book:
        lines = [line for line in address_book.readlines() if name in line]
        if lines:
            for line in lines:
                print line
        else:
            print("Don't find")
 
if __name__ == '__main__':
    name = str(input('Input name: '))
    search_name(name)

Офлайн

#9 Апрель 15, 2015 11:51:07

oxeed
Зарегистрирован: 2015-04-09
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Передать аргумент в class

botinag
lines = [line for line in address_book.readlines() if name in line]

Можете объяснить вот эту строчку? Как она работает?

Офлайн

#10 Апрель 15, 2015 12:03:32

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

Передать аргумент в class

lines = [line for line in address_book.readlines() if name in line]
=
lines = []
for line in address_book:
    if name in line:
        lines.append(line)

Отредактировано botinag (Апрель 15, 2015 12:04:12)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version