Помогите, пожалуйста, с питоном. Последнее задание...
Задача 5. Одна семья
В одной базе данных хранится информация о членах нескольких разных семей. Хранение реализовано с помощью словаря с парами «Ф. И. — возраст».
Напишите программу, которая запрашивает у пользователя фамилию и выводит на экран возраст всех членов одной семьи. Учтите, что, например, у двух людей разного пола фамилии различаются окончаниями. Поиск не должен быть регистрозависимым.
Пример:
Введите фамилию: Сидоров
Сидоров Никита 35
Сидорова Алина 34
Сидоров Павел 10
Пожалуйста, еще один вариант
family_bd = {
'Сидоров Никита': 35,
'Сидорова Алина': 34,
'Сидоров Павел': 10,
'Петров Виктор': 29,
'Петрова Мария': 24,
'Янковский Георгий': 47,
'Янковская Алена': 45,
'Кравец Анна': 33,
'Блок Александр': 57
}
ending = {
'ов': 'ова',
'ова': 'ов',
'ев': 'ева',
'ева': 'ев',
'ий': 'ая',
'ая': 'ий',
}
search_fio = input('Поиск по фамилии: ').lower()
template_str = ''
for i_key, i_value in ending.items():
if search_fio.endswith(i_key):
print('Сложная фамилия')
# Фамилия сложная, то формируем строку с фамилией противоположного рода
template = (search_fio.rpartition(i_key))
template_str = template[0] + i_value
for i_fam, i_age in family_bd.items():
if ((i_fam.split()[0].lower()) == search_fio) or ((i_fam.split()[0].lower()) == template_str):
print(i_fam, i_age)
family_members = {
('Кондаков', "Андрей"): 23,
('Сидоров', 'Никита'): 35,
('Миронов', 'Миша'): 3,
('Сидорова', 'Алина'): 34,
('Ушкова', 'Наташа'): 20,
('Пушкин', 'Саша'): 56,
('Сидоров', 'Павел'): 10,
}
surname_list = list(input('Введите фамилию: '))
surname = ''
for i in range(len(surname_list) - 1):
surname += surname_list[i]
for i_person, i_age in family_members.items():
for i_family in i_person:
if surname in i_family:
print(i_family, i_age)
Вот отличный код! Все работает!
family_dict = {
('Сидоров', 'Никита'): 35,
('Сидорова', 'Алина'): 34,
('Сидоров', 'Павел'): 10,
('Иванов', 'Максим'): 45,
('Иванова', 'Мария'): 41
}
surname = input("Введите фамилию: ").lower()
if surname[-1] == 'а':
- surname_man = surname[:-1]
- for i_name, i_age in family_dict.items():
-- if i_name[0].lower() == surname or i_name[0].lower() == surname_man:
-- print(i_name[0], i_name[1], i_age)
else:
- surname_woman = surname + 'а'
- for i_name, i_age in family_dict.items():
-- if i_name[0].lower() == surname or i_name[0].lower() == surname_woman:
-- print(i_name[0], i_name[1], i_age)
* "-" это 1 tab
"--" это 2 tab
Здравствуйте! Вот:
all_families_dict = {
1: {
"Сидоров Никита": 35,
"Сидорова Алина": 34,
"Сидоров Павел": 10
},
2: {
"Абобов Акакий": 115,
"Абобова Зульфия": 112,
"Абобов Корнеплод": 9,
"Абобова Кочебрыжка": 10
}
}
family = input("Введите фамилию: ")
if list(family)[-1] == 'a':
family = family[::-1]
print(family)
for key in all_families_dict.keys():
for values in all_families_dict[key].keys():
if family[:-1] in values:
print(values, " ", all_families_dict[key][values])
Примитивный перебор словаря...
d={
'Сидоров Никита':35,
'Сидорова Алина':34,
'Сидоров Павел':10,
'Петров Виктор':15,
'Петрова Дарья':16
}
search=input('Кого ищем? ').lower()
result=[]
for _ in d:
~~if search in _.split()[0].lower(): result.append(_+' '+str(d[_]))
if not result: print('Поиск не дал результатов')
else:
~~for _ in result: print(_)
Но есть одна недоработочка - если введут фамилию Сидорова - то выведется только одна женская фамилия... Если нужно, чтобы выводились и подобные мужские - придется тебе самому чуток почесать репу, как это сделать...