Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.idea/
29 changes: 19 additions & 10 deletions for_challenges.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,36 @@
# Задание 1
# Необходимо вывести имена всех учеников из списка с новой строки

print('Задание 1')
names = ['Оля', 'Петя', 'Вася', 'Маша']
# ???

for name in names:
print(name)

# Задание 2
# Необходимо вывести имена всех учеников из списка, рядом с именем показать количество букв в нём
# Пример вывода:
# Оля: 3
# Петя: 4

print('\nЗадание 2')
names = ['Оля', 'Петя', 'Вася', 'Маша']
# ???

for name in names:
print(f'{name}: {len(name)}')

# Задание 3
# Необходимо вывести имена всех учеников из списка, рядом с именем вывести пол ученика

print('\nЗадание 3')
is_male = {
'Оля': False, # если False, то пол женский
'Петя': True, # если True, то пол мужской
'Вася': True,
'Маша': False,
}
names = ['Оля', 'Петя', 'Вася', 'Маша']
# ???

for name in names:
gender = ("woman", "man")[is_male[name]]
print(f'{name}: {gender}')

# Задание 4
# Даны группу учеников. Нужно вывести количество групп и для каждой группы – количество учеников в ней
Expand All @@ -35,23 +39,28 @@
# Группа 1: 2 ученика.
# Группа 2: 4 ученика.

print('\nЗадание 4')
groups = [
['Вася', 'Маша'],
['Вася', 'Маша', 'Саша', 'Женя'],
['Оля', 'Петя', 'Гриша'],
]
# ???

print(f'Всего {len(groups)} группы.')
for n, group in enumerate(groups, start=1):
print(f'Группа {n}: {len(group)} ученика.')

# Задание 5
# Для каждой пары учеников нужно с новой строки перечислить учеников, которые в неё входят
# Пример вывода:
# Группа 1: Вася, Маша
# Группа 2: Оля, Петя, Гриша
# Группа 2: Оля, Петя, Гри

print('\nЗадание 5')
groups = [
['Вася', 'Маша'],
['Оля', 'Петя', 'Гриша'],
['Вася', 'Маша', 'Саша', 'Женя'],
]
# ???
for n, group in enumerate(groups, start=1):
print(f'Группа {n}:', end=' ')
print(*group, sep=", ")
76 changes: 70 additions & 6 deletions for_dict_challenges.py
Original file line number Diff line number Diff line change
@@ -1,40 +1,64 @@
def make_freq_dict(students_list):
names_list = list([x['first_name'] for x in students_list])
freq_dict = {name: names_list.count(name) for name in set(names_list)}
return freq_dict


def find_items_with_max_values(freq_dict):
max_freq = max(freq_dict.values())
max_freq_names = [name for name, freq in freq_dict.items() if freq == max_freq]
return ', '.join(max_freq_names), max_freq


# Задание 1
# Дан список учеников, нужно посчитать количество повторений каждого имени ученика
# Пример вывода:
# Вася: 1
# Маша: 2
# Петя: 2

print('Задание 1')

students = [
{'first_name': 'Вася'},
{'first_name': 'Петя'},
{'first_name': 'Маша'},
{'first_name': 'Маша'},
{'first_name': 'Петя'},
]
# ???

name_freq_dict = make_freq_dict(students)
for name, freq in name_freq_dict.items():
print(f'{name}: {freq}')

# Задание 2
# Дан список учеников, нужно вывести самое часто повторящееся имя
# Пример вывода:
# Самое частое имя среди учеников: Маша

print('\nЗадание 2')

students = [
{'first_name': 'Вася'},
{'first_name': 'Петя'},
{'first_name': 'Маша'},
{'first_name': 'Маша'},
{'first_name': 'Оля'},
{'first_name': 'Оля'}
]
# ???

names_freq_dict = make_freq_dict(students)
result = find_items_with_max_values(names_freq_dict)
print(f'Чаще всего встречаются имена: {result[0]} ({result[1]} раз(a))')

# Задание 3
# Есть список учеников в нескольких классах, нужно вывести самое частое имя в каждом классе.
# Пример вывода:
# Самое частое имя в классе 1: Вася
# Самое частое имя в классе 2: Маша

print('\nЗадание 3')

school_students = [
[ # это – первый класс
{'first_name': 'Вася'},
Expand All @@ -44,22 +68,28 @@
{'first_name': 'Маша'},
{'first_name': 'Маша'},
{'first_name': 'Оля'},
],[ # это – третий класс
], [ # это – третий класс
{'first_name': 'Женя'},
{'first_name': 'Петя'},
{'first_name': 'Женя'},
{'first_name': 'Саша'},
],
]
# ???

print('Самые частые имена по классам / число повторений:')
for num, group in enumerate(school_students, start=1):
group_names_freq_dict = make_freq_dict(group)
result = find_items_with_max_values(group_names_freq_dict)
print(f'\t№{num}: {result[0]} / {result[1]}')

# Задание 4
# Для каждого класса нужно вывести количество девочек и мальчиков в нём.
# Пример вывода:
# Класс 2a: девочки 2, мальчики 0
# Класс 2б: девочки 0, мальчики 2

print('\nЗадание 4')

school = [
{'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]},
{'class': '2б', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]},
Expand All @@ -72,15 +102,27 @@
'Миша': True,
'Даша': False,
}
# ???

for group in school:
group_name = group['class']
gender_composition = {
'f': 0,
'm': 0
}

for student in group['students']:
key = ('f', 'm')[is_male[student['first_name']]]
gender_composition[key] += 1

print(f'Класс {group_name}: девочки {gender_composition["f"]}, мальчики {gender_composition["m"]}')

# Задание 5
# По информации о учениках разных классов нужно найти класс, в котором больше всего девочек и больше всего мальчиков
# Пример вывода:
# Больше всего мальчиков в классе 3c
# Больше всего девочек в классе 2a

print('\nЗадание 5')
school = [
{'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]},
{'class': '3c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]},
Expand All @@ -91,5 +133,27 @@
'Олег': True,
'Миша': True,
}
# ???


def count_group_gender_composition(group, gender_name_dict):
gender_composition = [0, 0]
for student in group['students']:
gender_composition[gender_name_dict[student['first_name']]] += 1
return gender_composition


school_gender_by_class = dict()
girls_by_class = dict()
boys_by_class = dict()

for group in school:
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Разбить на отдельные функции, переиспользовать код по возможности.

Copy link
Author

@AlexandraPoturaeva AlexandraPoturaeva May 23, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Смогла добавить только одну функцию, а вторую взяла из предыдущих упражнений по именам (find_items_with_max_values). Норм?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Отлично!

class_name = group['class']
girls_by_class[class_name], boys_by_class[class_name] = count_group_gender_composition(group, is_male)

school_gender_by_class['девочек'] = girls_by_class
school_gender_by_class['мальчиков'] = boys_by_class


for gender, breakdown in school_gender_by_class.items():
result = find_items_with_max_values(breakdown)
print(f'Больше всего {gender} в классах: {result[0]}')
Loading