Top.Mail.Ru
Ответы

Помогите, пожалуйста, с питоном. Последнее задание...

Задача 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(_)

Но есть одна недоработочка - если введут фамилию Сидорова - то выведется только одна женская фамилия... Если нужно, чтобы выводились и подобные мужские - придется тебе самому чуток почесать репу, как это сделать...