Skip to content
Closed
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
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
settings.py
*.log
.vscode/
.idea/
env/
.DS_Store
__pycache__/
14 changes: 0 additions & 14 deletions README.md

This file was deleted.

139 changes: 82 additions & 57 deletions for_challenges.py
Original file line number Diff line number Diff line change
@@ -1,57 +1,82 @@
# Задание 1
# Необходимо вывести имена всех учеников из списка с новой строки

names = ['Оля', 'Петя', 'Вася', 'Маша']
# ???


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

names = ['Оля', 'Петя', 'Вася', 'Маша']
# ???


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

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


# Задание 4
# Даны группу учеников. Нужно вывести количество групп и для каждой группы – количество учеников в ней
# Пример вывода:
# Всего 2 группы.
# Группа 1: 2 ученика.
# Группа 2: 4 ученика.

groups = [
['Вася', 'Маша'],
['Вася', 'Маша', 'Саша', 'Женя'],
['Оля', 'Петя', 'Гриша'],
]
# ???


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

groups = [
['Вася', 'Маша'],
['Оля', 'Петя', 'Гриша'],
['Вася', 'Маша', 'Саша', 'Женя'],
]
# ???
def inflect(quantity, if_one, if_two_to_four, if_others):
if 11 <= quantity <= 14:
return if_others
elif quantity % 10 == 1:
return if_one
elif 2 <= quantity % 10 <= 4:
return if_two_to_four
else:
return if_others


# Задание 1. Необходимо вывести имена всех учеников из списка с новой строки
def names_new_line(names_array):
for name in names_array:
print(name)


# Задание 2. Необходимо вывести имена всех учеников из списка, рядом с именем показать количество букв в нём
def names_with_len(names_array):
for name in names_array:
inflection = inflect(len(name), 'а', 'ы', '')
print(f'{name}: {len(name)} букв{inflection}')


# Задание 3. Необходимо вывести имена всех учеников из списка, рядом с именем вывести пол ученика
def male_or_female(names_array, male_or_not_dict):
for student in names_array:
if student in male_or_not_dict and male_or_not_dict[student]:
student_gender = 'Мужской'
elif student in male_or_not_dict and not male_or_not_dict[student]:
student_gender = 'Женский'
else:
student_gender = 'Нет информации'
print(f'Имя: {student}. Пол: {student_gender}')


# Задание 4. Даны группы учеников. Нужно вывести количество групп и для каждой группы – количество учеников в ней
def groups_count(groups_array):
inflection = inflect(len(groups_array), 'а', 'ы', '')
print(f'Всего {len(groups_array)} групп{inflection}:')
for group_number, group_members in enumerate(groups_array, start=1):
inflection = inflect(len(group_members), '', 'а', 'ов')
print(f'Группа {group_number}: {len(group_members)} ученик{inflection}')


# Задание 5. Для каждой группы учеников нужно с новой строки перечислить учеников, которые в неё входят
def groups_members(groups_array):
for group_number, group_members in enumerate(groups_array, start=1):
print(f"Группа {group_number}: {', '.join(group_members)}")


def main():
names = ['Оля', 'Петя', 'Вася', 'Маша', 'Женя']
is_male = {
'Оля': False,
'Петя': True,
'Вася': True,
'Маша': False,
}
groups1 = [
['Вася', 'Маша'],
['Вася', 'Маша', 'Саша', 'Женя'],
['Оля', 'Петя', 'Гриша'],
]
groups2 = [
['Вася', 'Маша'],
['Оля', 'Петя', 'Гриша'],
['Вася', 'Маша', 'Саша', 'Женя'],
]
names_new_line(names)
print()
names_with_len(names)
print()
male_or_female(names, is_male)
print()
groups_count(groups1)
print()
groups_members(groups2)


if __name__ == '__main__':
main()
189 changes: 107 additions & 82 deletions for_dict_challenges.py
Original file line number Diff line number Diff line change
@@ -1,95 +1,120 @@
# Задание 1
# Дан список учеников, нужно посчитать количество повторений каждого имени ученика
# Пример вывода:
# Вася: 1
# Маша: 2
# Петя: 2
# Задание 1. Дан список учеников, нужно посчитать количество повторений каждого имени ученика
def names_count(names_dict_array):
names = [name_dict['first_name'] for name_dict in names_dict_array]
used_names = []
for name in names:
if name not in used_names:
used_names.append(name)
print(f'{name}: {names.count(name)}')

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

# Задание 2. Дан список учеников, нужно вывести самое часто повторящееся имя
def find_most_recurrent(names_dict_array):
used_names = []
max_recurring = None
names = [name_dict['first_name'] for name_dict in names_dict_array]
for name in names:
if name not in used_names:
used_names.append(name)
recurring = names.count(name)
if max_recurring is None or recurring > max_recurring[1]:
max_recurring = (name, recurring)
return max_recurring[0]

# Задание 2
# Дан список учеников, нужно вывести самое часто повторящееся имя
# Пример вывода:
# Самое частое имя среди учеников: Маша
students = [
{'first_name': 'Вася'},
{'first_name': 'Петя'},
{'first_name': 'Маша'},
{'first_name': 'Маша'},
{'first_name': 'Оля'},
]
# ???

# Задание 3. Есть список учеников в нескольких классах, нужно вывести самое частое имя в каждом классе.
def find_most_recurrent_in_groups(school_array):
for group in enumerate(school_array, start=1):
max_recurring = find_most_recurrent(group[1])
print(f'Самое частое имя в классе {group[0]}: {max_recurring}')

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

school_students = [
[ # это – первый класс
{'first_name': 'Вася'},
{'first_name': 'Вася'},
],
[ # это – второй класс
{'first_name': 'Маша'},
{'first_name': 'Маша'},
{'first_name': 'Оля'},
],[ # это – третий класс
{'first_name': 'Женя'},
{'first_name': 'Петя'},
{'first_name': 'Женя'},
{'first_name': 'Саша'},
],
]
# ???
# Задание 4. Для каждого класса нужно вывести количество девочек и мальчиков в нём.
def boys_and_girls_count(school_group, male_or_not_dict):
males_in_group = 0
females_in_group = 0
for student in school_group['students']:
if male_or_not_dict.get(student['first_name']):
males_in_group += 1
elif not male_or_not_dict.get(student['first_name']):
females_in_group += 1
return school_group['class'], males_in_group, females_in_group


def boys_and_girls_count_in_groups(school_array, male_or_not_dict):
for group in school_array:
group_stat = boys_and_girls_count(group, male_or_not_dict)
print(f'Класс {group_stat[0]}: мальчики {group_stat[1]}, девочки {group_stat[2]}')

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

school = [
{'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]},
{'class': '2б', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]},
{'class': '2б', 'students': [{'first_name': 'Даша'}, {'first_name': 'Олег'}, {'first_name': 'Маша'}]},
]
is_male = {
'Олег': True,
'Маша': False,
'Оля': False,
'Миша': True,
'Даша': False,
}
# ???
# Задание 5. По информации об учениках разных классов нужно найти класс, в котором больше всего девочек и больше всего мальчиков
def gender_max(school_array, male_or_not_dict, gender):
groups = [boys_and_girls_count(group, male_or_not_dict) for group in school_array]
max_boys_group = max(groups, key = lambda group : group[1])
max_girls_group = max(groups, key = lambda group : group[2])
if gender.lower() == 'boys':
return max_boys_group[0], max_boys_group[1]
elif gender.lower() == 'girls':
return max_girls_group[0], max_girls_group[2]


# Задание 5
# По информации о учениках разных классов нужно найти класс, в котором больше всего девочек и больше всего мальчиков
# Пример вывода:
# Больше всего мальчиков в классе 3c
# Больше всего девочек в классе 2a
def main():
students1 = [
{'first_name': 'Вася'},
{'first_name': 'Петя'},
{'first_name': 'Маша'},
{'first_name': 'Маша'},
{'first_name': 'Петя'},
]
students2 = [
{'first_name': 'Вася'},
{'first_name': 'Петя'},
{'first_name': 'Маша'},
{'first_name': 'Маша'},
{'first_name': 'Оля'},
]
school_students = [
[
{'first_name': 'Вася'},
{'first_name': 'Вася'},
],
[
{'first_name': 'Маша'},
{'first_name': 'Маша'},
{'first_name': 'Оля'},
],
[
{'first_name': 'Женя'},
{'first_name': 'Петя'},
{'first_name': 'Женя'},
{'first_name': 'Саша'},
],
]
school = [
{'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]},
{'class': '2б', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]},
{'class': '2в', 'students': [{'first_name': 'Даша'}, {'first_name': 'Олег'}, {'first_name': 'Маша'}]},
]
is_male = {
'Олег': True,
'Маша': False,
'Оля': False,
'Миша': True,
'Даша': False,
}
max_boys = gender_max(school, is_male, 'boys')
max_girls = gender_max(school, is_male, 'girls')
names_count(students1)
print()
print('Самое частое имя среди учеников:', find_most_recurrent(students2))
print()
find_most_recurrent_in_groups(school_students)
print()
boys_and_girls_count_in_groups(school, is_male)
print()
print(f'Больше всего мальчиков в классе {max_boys[0]} ({max_boys[1]})')
print(f'Больше всего девочек в классе {max_girls[0]} ({max_girls[1]})')

school = [
{'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]},
{'class': '3c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]},
]
is_male = {
'Маша': False,
'Оля': False,
'Олег': True,
'Миша': True,
}
# ???

if __name__ == '__main__':
main()
Loading