Форум сайта python.su
FishHook
RikinДорогой друг, вас очень сложно понять, чего же вы хотите. То-ли непоследовательно изучаете материал, и поэтому у вас задача на ООП, а вы не знаете как выполнить поиск в списке и отсюда всякая терминология вроде “выуживания строк”, то-ли у вас сложности с письменным русским языком и вы не можете корректно сформулировать мысль. Без обид, но я просто не понимаю чего вы хотите получить в итоге. У вас есть задание в том виде, как вам его дал преподаватель?
Офлайн
py.user.nextВы верно заметили, мне ( не только) нужно больше времени и упражнений и на переваривание материала по питону, особенно по ООП.
Офлайн
Я всё равно нифига не понял. Я дам вам какое-то решение, сами додумаете, что с этим делать
class Person: def __init__(self, name: str): self.name = name def __str__(self): return f'{self.name}' class Volunteer(Person): def __init__(self, name: str, city: str, status: str): super().__init__(name) self.city = city self.status = status def __str__(self): return f'{self.name}, {self.city}, f{self.status}' volunteer_data = [ {"name": "Ivanov", "place": "Moscow", "status": 'Consultant'}, {"name": "Pertov", "place": "St. Petersburg", "status": 'Mentor'}, {"name": "Schwarz", "place": "Viena", "status": 'Trainer'}] volunteeres = [Volunteer(d['name'], d['place'], d['status']) for d in volunteer_data] guests_names = ['Ivanov', 'Pertov'] guests = [v for v in volunteeres if v.name in guests_names]
Офлайн
Спасибо большое и с праздниками по старому календарю!
С наследованием - это Вы классно и поучительно сделали: “как доктор прописал”.
При решении новичку хотелось бы сосредотачиваться именно над темой, на которой фокусируется задание (для лучшего усвоения), в данном случае наследование классов.
А в остальных необходимых фрагментах хотелось бы применять наиболее простые решения.
Конечно, надо осваивать “пилотаж относительно повыше”, но не вот бы - постепенно.
Вот я тут ниже пытаюсь склеить решение и даже получаю на выходе кое-что:
class Person: def __init__(self, name: str): self.name = name def __str__(self): return f'{self.name}' class Volunteer(Person): def __init__(self, name: str, place: str, status: str): super().__init__(name) self.place = place self.status = status def __str__(self): return f'{self.name}, {self.place}, f{self.status}' volunteer_datas = [ {"name": "Ivanov", "place": "Moscow", "status": 'Consultant'}, {"name": "Pertov", "place": "St. Petersburg", "status": 'Mentor'}, {"name": "Schwarz", "place": "Viena", "status": 'Trainer'}] print('list of guests:') for volunteer_data in volunteer_datas: for i in volunteer_data: if i == 'name' and volunteer_data['name'] == 'Pertov' or 'Schwarz': obj_vol = Volunteer(volunteer_data['name'], volunteer_data['place'], volunteer_data['status']) print(obj_vol.__str__())
Список гостей : Ivanov, Moscow, fConsultant Ivanov, Moscow, fConsultant Ivanov, Moscow, fConsultant Pertov, St. Petersburg, fMentor Pertov, St. Petersburg, fMentor Pertov, St. Petersburg, fMentor Schwarz, Viena, fTrainer Schwarz, Viena, fTrainer Schwarz, Viena, fTrainer
Отредактировано Rikin (Янв. 14, 2022 02:31:34)
Офлайн
На выходе хотел бы получить:
{"name": "Pertov", "place": "St. Petersburg", "status": 'Mentor'}, {"name": "Schwarz", "place": "Viena", "status": 'Trainer'}]
Офлайн
Я тут сам пока стараюсь …
а вот если вкинуть скобки после and… а то ведь and доминирует (своей “гравитацией”) над or , то получается уже лучше, во всяком случае ушли многократные повторения одних и тех же гостей,
но их всё еще все трое, а не лишь двое последних из списка ‘Pertov’ или ‘Schwarz’ и всё еще буква f у статуса не ушла…
class Person: def __init__(self, name: str): self.name = name def __str__(self): return f'{self.name}' class Volunteer(Person): def __init__(self, name: str, place: str, status: str): super().__init__(name) self.place = place self.status = status def __str__(self): return f'{self.name}, {self.place}, f{self.status}' volunteer_datas = [ {"name": "Ivanov", "place": "Moscow", "status": 'Consultant'}, {"name": "Pertov", "place": "St. Petersburg", "status": 'Mentor'}, {"name": "Schwarz", "place": "Viena", "status": 'Trainer'}] print('Список гостей :') for volunteer_data in volunteer_datas: for i in volunteer_data: if i == 'name' and (volunteer_data['name'] == 'Pertov' or 'Schwarz'): obj_vol = Volunteer(volunteer_data['name'], volunteer_data['place'], volunteer_data['status']) print(obj_vol.__str__())
Список гостей : Ivanov, Moscow, fConsultant Pertov, St. Petersburg, fMentor Schwarz, Viena, fTrainer
Отредактировано Rikin (Янв. 14, 2022 02:33:03)
Офлайн
а вот и букву f у статуса убрали - там выше в строке с return - опечатка была, очевидно…
Но всё еще лишний Ivanov на выходе
Офлайн
Rikin
Я хотел бы получить на выходе данные лишь двух гостей с именем ‘Pertov’ или ‘Schwarz’ однократно (а не трижды каждого) и если можно, без буквы f у статуса…
Прошу подсказки-коррекции кода.
Rikin
На выходе хотел бы получить:
{“name”: “Pertov”, “place”: “St. Petersburg”, “status”: ‘Mentor’},
{“name”: “Schwarz”, “place”: “Viena”, “status”: ‘Trainer’}]
volunteer_datas = [ {"name": "Ivanov", "place": "Moscow", "status": 'Consultant'}, {"name": "Pertov", "place": "St. Petersburg", "status": 'Mentor'}, {"name": "Schwarz", "place": "Viena", "status": 'Trainer'}] for i in list(filter(lambda d: d['name'] in ("Pertov", "Schwarz"), volunteer_datas)): print(i)
{'name': 'Pertov', 'place': 'St. Petersburg', 'status': 'Mentor'}
{'name': 'Schwarz', 'place': 'Viena', 'status': 'Trainer'}
Отредактировано xam1816 (Янв. 14, 2022 11:36:10)
Офлайн
xam1816
зачем вы постоянно используете map и filter? Это уже давно устаревшие и нерекомендуемые функции, они отнюдь не добавляют вашему коду ни читабельности ни перформанса. Зачем вы кастуете генератор к списку и тут же его итерируете?
for i in volunteer_datas: if i['name'] in ("Pertov", "Schwarz"): print(i)
for i in (i for i in volunteer_datas if i['name'] in ("Pertov", "Schwarz")): print(i)
Офлайн
FishHookда есть такое, сначала у себя вывел так
Зачем вы кастуете генератор к списку и тут же его итерируете?
print(list(filter(lambda d: d['name'] in ("Pertov", "Schwarz"), volunteer_datas)))
FishHookто учту этот момент
Это уже давно устаревшие и нерекомендуемые функции
Офлайн