0 / 0 / 0
Регистрация: 14.12.2017
Сообщений: 86
1

Классы - проверить задание

22.05.2018, 21:19. Показов 573. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
class person():
 
    def __init__(self):
 
        self.surname = []
        self.name = []
        self.middlename = []
        self.mobtel = []
        self.dopinfo = []
        
    def addperson(self):
        self.surname.append(input("Фамилия"))
        self.name.append(input("Имя"))
        self.middlename.append(input("Отч"))
        self.mobtel.append(input("Тел"))
        self.dopinfo.append(input("доп"))
        
 
 
    def cout(self):
        print(        self.surname,
        self.name,
        self.middlename,
        self.mobtel,
        self.dopinfo)
  
p=person()
 
while True:
    choice = input("""
0 - выход
1 - добавить пользавателя
2 - показать всех
3 - найти
4 - редактировать
""")
    if choice == '0':
        break
    elif choice == '1':
        print("Пропускайте и заполняйте, после последнего студента поставте %")
        while True:
            c = input()
            if c != '%':
                p.addperson()
            else:
                break
    elif choice == '2':
            p.cout()
Надо реализовать телефонную книгу.Про одного человека хранить фио, моб., доп. инфу.Так вот, как это должно выглядеть?
В коде выше данные хранятся так:
[ Фамилия 1го,Фамилия 2го,...] [ Имя 1го,Имя 2го,...] и тд.
Или же надо [ Фамилия 1го,Имя 1го,...] [ Фамилия 2го,Имя 2го,...] и т.д.?
Какой из вариантов правильный?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2018, 21:19
Ответы с готовыми решениями:

Задание на классы и объекты
Здравствуйте, помогите, пожалуйста, решить задачу. Напишите программу, в которой создается цепочка...

Задание на классы
заключается в том, чтобы отработать базовые принципы объектно-ориентированного программирования на...

Задание на тему классы
реализовать класс студент Свойства 1 ФИО 2 Группа 3 Средний бал Методы 1 Print 2...

Задание на классы. Дата, Время.
Добрый день/вечер. Нужна помощь с данным заданием. Заранее спасибо. Тема: Класс, объект, поля,...

Классы, конструкторы и методы. Задание
Прошу больно не бить. Только начинаю изучать C#, первый семестр, который начал поздно, и накак не...

13
1291 / 908 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
22.05.2018, 21:42 2
Так правильнее

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
class person():
    def addperson(self):
        self.surname = input("Фамилия ")
        self.name = input("Имя ")
        self.middlename = input("Отч ")
        self.mobtel = input("Тел ")
        self.dopinfo = input("доп ")
    
    def cout(self):
        print(        self.surname,
        self.name,
        self.middlename,
        self.mobtel,
        self.dopinfo)
  
persons = []
 
while True:
    choice = input("""
0 - выход
1 - добавить пользавателя
2 - показать всех
3 - найти
4 - редактировать
""")
    if choice == '0':
        break
    elif choice == '1':
        print("Пропускайте и заполняйте, после последнего студента поставте %")
        while True:
            c = input()
            if c != '%':
                p=person()
                p.addperson()
                persons.append(p)
            else:
                break
    elif choice == '2':
            for p in persons:
                p.cout()
1
0 / 0 / 0
Регистрация: 14.12.2017
Сообщений: 86
22.05.2018, 21:49  [ТС] 3
init не нужен?
0
1291 / 908 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
22.05.2018, 21:58 4
В данном случае в классе не нужны списки для фамилии , имени и т.д., так что лучше сделать их просто строками
1
0 / 0 / 0
Регистрация: 14.12.2017
Сообщений: 86
22.05.2018, 22:39  [ТС] 5
Тогда как удалить пользователя?
Python
1
2
3
4
5
6
7
8
9
10
    elif choice == '4':
            for p in persons:
                p.deleteperson()
 
 
 
    def deleteperson(self):
        index =input("Выберите фамилию: ")
        self.person.pop(index)
        print("Удален")
Что то явно не то
P.s вместо рор - remove ,но всё равно не то
0
1291 / 908 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
22.05.2018, 22:58 6
Python
1
2
3
4
5
6
7
8
9
elif choice == '4':
            p.deleteperson()
 
 
 
    def deleteperson(self):
        index =input("Выберите фамилию: ")
        self.person.pop(index)
        print("Удален")
0
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
23.05.2018, 03:02 7
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
class Phonebook:
    count = 0
    def __init__(self):
        self.persons = []
 
    def addperson(self, person):
        self.persons.append(person)
        Phonebook.count+=1
 
    def delperson(self, person):
        self.persons.remove(person)
        Phonebook.count-=1
 
    def get_all(self):
        return self.persons
 
    def find(self, name):
        for p in self.persons:
            if p.name == name:
                return p
        return None
 
    def edit(self):
        pass
 
class Person():
    def __init__(self, name='', surname='', midname='', mobtel='', dopinfo=''):
        self.surname = surname
        self.name = name
        self.midname = midname
        self.mobtel = mobtel
        self.dopinfo = dopinfo
        
    def __repr__(self):
        return str(self.name) + ' ' + str(self.surname)
 
        
p = Phonebook()
d = {
    0: ('выход', exit),
    1: ('добавить пользавателя', lambda: p.addperson(Person(*input().split()))),
    2: ('показать всех', lambda: print(*p.get_all(), sep='\n')),
    3: ('найти', lambda: print(p.find(input()))),
    4: ('редактировать', lambda: p.edit())}
 
while True:
    for k,v in d.items():
        print (k, '-', v[0])
    d[int(input(': '))][1]()
1
0 / 0 / 0
Регистрация: 14.12.2017
Сообщений: 86
23.05.2018, 17:24  [ТС] 8
слишком сложно
0
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
23.05.2018, 17:59 9
Цитата Сообщение от ОноРаботает Посмотреть сообщение
слишком сложно
Ну меню и ввод пользователя можно и проще сделать, а структуры именно так должны выглядеть. Никаких input() в теле класса не должно быть. И класс person не является классом телефонной книги
1
0 / 0 / 0
Регистрация: 14.12.2017
Сообщений: 86
23.05.2018, 23:03  [ТС] 10
Спасибо что объяснили

Добавлено через 1 час 1 минуту
Цитата Сообщение от oldnewyear Посмотреть сообщение
Ну меню и ввод пользователя можно и проще сделать, а структуры именно так должны выглядеть. Никаких input() в теле класса не должно быть. И класс person не является классом телефонной книги
Python
1
2
3
4
5
6
    count = 0 
Phonebook.count+=1
 
 
 1: ('добавить пользавателя', lambda: p.addperson(Person(*input().split()))),
    2: ('показать всех', lambda: print(*p.get_all(), sep='\n')),
Для чего счетчик?
И зачем * перед input и *p.get_all()

Добавлено через 1 час 21 минуту
oldnewyear, а как сделать чтобы юзер видел что он вводит?Что бы было написано:Фамилия(ввод)
(новая строка) имя(ввод)

Добавлено через 13 минут
И как всётаки удалить пользователя?list.remove(x): x not in list хотя он там есть

Добавлено через 23 минуты
Я про этот код
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
class Phonebook:
    count = 0
    def __init__(self):
        self.persons = []
 
    def addperson(self, person):
        self.persons.append(person)
        Phonebook.count+=1
 
    def delperson(self, person):
        self.persons.remove(person)
        Phonebook.count-=1
         
    def get_all(self):
        return self.persons
 
    def find(self, name):
        for p in self.persons:
            if p.name == name:
                return p
        return None
 
    def edit(self):
        pass
 
class Person():
    def __init__(self,  surname='',name='', midname='', mobtel='', dopinfo=''):
        self.surname = surname
        self.name = name
        self.midname = midname
        self.mobtel = mobtel
        self.dopinfo = dopinfo
        
    def __repr__(self):
        return 'Фамилия: '+str(self.surname) + '\nИмя: ' + str(self.name)+ '\nОтчество: ' + str(self.midname)+ '\nМоб: ' + str(self.mobtel)+ '\nДоп.инфо: ' + str(self.dopinfo)
 
p = Phonebook()
d = {0: ('выход', exit),
     1: ('добавить пользавателя', lambda: p.addperson(Person(*input().split()))),
     2: ('показать всех', lambda: print(*p.get_all(), sep='\n')),
     3: ('найти', lambda: print(p.find(input()))),
     4: ('редактировать', lambda: p.edit()),
     5: ('удалить', lambda: p.delperson(input("Фамилия кого удалить: ")))}
while True:
    for k,v in d.items():
        print (k, '-', v[0])
    d[int(input('Выбор: '))][1]()
Добавлено через 2 часа 4 минуты
GLOBAL UPDATE
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
class Phonebook:
    count = 0
    def __init__(self):
        self.persons = []
 
    def addperson(self, person):
        self.persons.append(person)
        Phonebook.count+=1
 
    def delperson(self, person):
        for p in self.persons:
            if p.surname == person.lower():
                self.persons.remove(p)
        Phonebook.count-=1
         
    def get_all(self):
        return self.persons
 
    def find(self, surname):
        for p in self.persons:
            if p.surname == surname.lower():
                print(p)
        return "Готово"
 
    def findy(self, smt):
        for p in self.persons:
            if (p.surname.find(smt) >= 0) or (p.name.find(smt) >= 0) or(p.midname.find(smt) >= 0) or(p.mobtel.find(smt) >= 0) or(p.dopinfo.find(smt) >= 0):
                print(p)
        return "Надеюсь это, то что вы ожидали"
 
   
 
class Person():
    def __init__(self,  surname='',name='', midname='', mobtel='', dopinfo=''):
        self.surname = surname
        self.name = name
        self.midname = midname
        self.mobtel = mobtel
        self.dopinfo = dopinfo
        
    def __repr__(self):
        return 'Фамилия: '+str(self.surname) + '\nИмя: ' + str(self.name)+ '\nОтчество: ' + str(self.midname)+ '\nМоб: ' + str(self.mobtel)+ '\nДоп.инфо: ' + str(self.dopinfo)+'\n'
 
p = Phonebook()
d = {0: ('выход', exit),
     1: ('добавить пользавателя', lambda: p.addperson(Person(*input().split()))),
     2: ('показать всех', lambda: print(*p.get_all(), sep='\n')),
     3: ('найти по фамилии', lambda: print(p.find(input("Фамилия кого найти: ")))),
     4: ('мне повезёт', lambda: print(p.findy(input("Значение: ").lower()))),
     5: ('удалить', lambda: p.delperson(input("Фамилия кого удалить: "))),
}
while True:
    for k,v in d.items():
        print (k, '-', v[0])
    d[int(input('Выбор: '))][1]()
Осталось
1.Переработать ввод.Чтобы пользователь видел что именно у него просят ввести.Есть пункт доп информация,так что разделение по пробелу не подходит.
2.Переработать метод редактирование.В классе не должно быть инпута. Что должно уметь:изменить фамилию,имя и т.д..Пользователь вводит фамилию ,следом новую (или как проще реализовать).
0
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
24.05.2018, 03:52 11
Цитата Сообщение от ОноРаботает Посмотреть сообщение
Для чего счетчик?
А сам не знаю зачем я его сделал

Цитата Сообщение от ОноРаботает Посмотреть сообщение
И зачем * перед input и *p.get_all()
* распаковывает список. Делает из [1, 2, 3] 1 2 3

Добавлено через 5 минут
Цитата Сообщение от ОноРаботает Посмотреть сообщение
И как всётаки удалить пользователя?list.remove(x): x not in list хотя он там есть
Python
1
p.delperson(p.find(input('Введите имя: ')))
1
0 / 0 / 0
Регистрация: 14.12.2017
Сообщений: 86
24.05.2018, 07:09  [ТС] 12
oldnewyear, а как можно
1.Переработать ввод.Чтобы пользователь видел что именно у него просят ввести.Есть пункт доп информация,так что разделение по пробелу не подходит.
0
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
24.05.2018, 07:36 13
Цитата Сообщение от ОноРаботает Посмотреть сообщение
oldnewyear, а как можно
1.Переработать ввод.Чтобы пользователь видел что именно у него просят ввести.Есть пункт доп информация,так что разделение по пробелу не подходит.
Напишите свою функцию

Python
1
2
3
4
5
6
def my_func(p):
    person = Person()
    person.surname = input('Фамилия:')
    person.name = input('Имя:')
    ...
    p.addperson(person)
Python
1
2
3
   ...
1: ('добавить пользавателя', lambda: my_func(p)),
   ...
1
0 / 0 / 0
Регистрация: 14.12.2017
Сообщений: 86
24.05.2018, 17:21  [ТС] 14
GLOBAL UPDATE V2.0
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
class Phonebook:
    count = 0
    def __init__(self):
        self.persons = []
 
    def addperson(self, person):
        self.persons.append(person)
        Phonebook.count+=1
 
    def delperson(self, person):
        for p in self.persons:
            if p.surname.lower() == person.lower():
                self.persons.remove(p)
        Phonebook.count-=1
         
    def get_all(self):
        return self.persons
 
    def find(self, surname):
        for p in self.persons:
            if p.surname.lower() == surname.lower():
                print(p)
        return "Готово"
 
    def findy(self, smt):
        for p in self.persons:
            if (p.surname.find(smt) >= 0) or (p.name.find(smt) >= 0) or(p.midname.find(smt) >= 0) or(p.mobtel.find(smt) >= 0) or(p.dopinfo.find(smt) >= 0):
                print(p)
        return "Надеюсь это, то что вы ожидали"
 
    def edit(self, surname):
        for p in self.persons:
            if p.surname == surname:
                while True:
                    c = input("""0 - Выход
Изменить:
1 - Фамилию
2 - Имя
3 - Отчество
4 - Мобильный телефон
5 - Инфо про контакт
""")
                    if c == '0':
                        break
                    elif c == '1':
                        p.surname =(input("Новая фамилия"))
                    elif c == '2':
                        p.name =(input("Новое имя"))
                    elif c == '3':
                        p.midname =(input("Новое отечество"))
                    elif c == '4':
                        p.mobtel =(input("Новый телефон"))
                    elif c == '5':
                        c = input("""1.Дополнить
Что угодно.Новое """)
                        if c == '1':
                           p.dopinfo =p.dopinfo +(input("Дополняйте: "))                          
                        else:
                           p.dopinfo =(input("Новая доп инфо: "))
 
def my_func(p):
    person = Person()
    person.surname = input('Фамилия: ')
    person.name = input('Имя: ')
    person.midname = input('Отчество: ')
    person.mobtel = input('Моб: ')
    person.dopinfo = input('Доп. инфо: ')
    p.addperson(person)                           
 
class Person():
    def __init__(self,  surname='',name='', midname='', mobtel='', dopinfo=''):
        self.surname = surname
        self.name = name
        self.midname = midname
        self.mobtel = mobtel
        self.dopinfo = dopinfo
        
    def __repr__(self):
        return 'Фамилия: '+str(self.surname) + '\nИмя: ' + str(self.name)+ '\nОтчество: ' + str(self.midname)+ '\nМоб: ' + str(self.mobtel)+ '\nДоп.инфо: ' + str(self.dopinfo)+'\n'
 
p = Phonebook()
d = {0: ('выход', exit),
     1: ('добавить пользавателя v2.0', lambda: p.addperson(Person(input("Фамилия: "),input("Имя: "),input('Отчество: '),input('Моб: '),input('Доп. инфо: ')))),
     2: ('добавить пользавателя', lambda:my_func(p)),
     3: ('показать всех', lambda: print(*p.get_all(), sep='\n')),
     4: ('найти по фамилии', lambda: print(p.find(input("Фамилия кого найти: ")))),
     5: ('мне повезёт', lambda: print(p.findy(input("Значение: ").lower()))),
     6: ('удалить', lambda: p.delperson(input("Фамилия кого удалить: ")))
}
while True:
    for k,v in d.items():
        print (k, '-', v[0])
    d[int(input('Выбор: '))][1]()
Осталось
Переработать метод редактирование.В классе не должно быть инпута. Что должно уметь:изменить фамилию,имя и т.д..Пользователь вводит фамилию ,следом новую (или как проще реализовать).Или же только отдельной функцией писать?

Добавлено через 52 минуты
oldnewyear, а можно ли сделать в словаре подменю?Нажимаю 7 .Предлагает выбрать что редактировать,ввожу фамилию кого редактировать и новое значение=>идет к методам класса
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
    def editsurname(self, surname,newsurname):
        for p in self.persons:
            if p.surname.lower() == surname.lower():
                return p.surname==newsurname
        return "Не найдено"
    
    def editname(self, surname,newname):
        for p in self.persons:
            if p.surname.lower() == surname.lower():
                return p.name==newname
        return "Не найдено"
    
    def editmidname(self, surname,newmidname):
        for p in self.persons:
            if p.surname.lower() == surname.lower():
                return p.midname==newmidname
        return "Не найдено"
    
    def editmobtel(self, surname,newmobtel):
        for p in self.persons:
            if p.surname.lower() == surname.lower():
                return p.mobtel==newmobtel
        return "Не найдено"
    
    def editdopinfo(self,choice,surname,newmobtel):
        for p in self.persons:
            if p.surname.lower() == surname.lower():
                if choice==1:
                    return p.dopinfo==newdopinfo
                else:
                    return p.dopinfo==p.dopinfo+newdopinfo
        return "Не найдено"
Добавлено через 14 минут
Переделал
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    def edit(self,choice, surname,new):
        for p in self.persons:
            if p.surname.lower() == surname.lower():
                if choice==1:
                    return p.surname==new
                elif choice==2:
                    return p.name==new
                elif choice==3:
                    return p.midname==new
                elif choice==4:
                    return p.mobtel==new
                elif choice==5:
                    return p.dopinfo==new
                elif choice==6:
                    return p.dopinfo==p.dopinfo+new
                elif choice==0:
                    break
Добавлено через 16 минут
oldnewyear, хм что то не меняет
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    def edit(self,choice,surname,newi):
        for p in self.persons:
            if p.surname.lower() == surname.lower():
                if choice==1:
                    return p.surname==newi
                elif choice==2:
                    return p.name==newi
                elif choice==3:
                    return p.midname==newi
                elif choice==4:
                    return p.mobtel==newi
                elif choice==5:
                    return p.dopinfo==newi
                elif choice==6:
                    return p.dopinfo==p.dopinfo+newi
                elif choice==0:
                    break
            else:
                return "ничего"
Python
1
7: ('редактировать', lambda: p.edit(input("Выбор: "),input("Фамилия кого редактировать: "),input("Пишите: ")))
Добавлено через 7 минут
if p.surname.lower() == surname.lower():
прошло,а дальше в ифы не попадает
0
24.05.2018, 17:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2018, 17:21
Помогаю со студенческими работами здесь

Задание на вложенные классы и интерфейсы
Пожалуйста, помогите с заданием. Создать объект класса Date, используя вложенные классы Год,...

задание по ООП, классы, матрицы
Составить описание класса, обеспечивающего представление матрицы произвольного размера с...

Задание На Классы С++Дня начинающих
Уважаемые программисты Прошу помочь. так как эту тему я не понял :(. Задание: Обьявить в классе 2...

Задание про классы, как сделать
Помоги решить, пожалуйста. 1. Описать класс с именем REMONT (информация о разговорах), содержащий...

Не могу понять задание,пожалуйста.Классы
Реализовать в задании три конструктора (без аргументов, инициализации, копирования) и деструктор....


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru