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
29 changes: 19 additions & 10 deletions for_challenges.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
# Необходимо вывести имена всех учеников из списка с новой строки

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

for name in names:
print(name)

# Задание 2
# Необходимо вывести имена всех учеников из списка, рядом с именем показать количество букв в нём
Expand All @@ -12,8 +12,8 @@
# Петя: 4

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

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

# Задание 3
# Необходимо вывести имена всех учеников из списка, рядом с именем вывести пол ученика
Expand All @@ -25,11 +25,17 @@
'Маша': False,
}
names = ['Оля', 'Петя', 'Вася', 'Маша']
# ???

for name in names:
if name in is_male:
if is_male.get(name):
print(f'{name}: мужской')
else:
print(f'{name}: женский')
else:
print(f'Имени {name} нет в словаре')

# Задание 4
# Даны группу учеников. Нужно вывести количество групп и для каждой группы – количество учеников в ней
# Даны группы учеников. Нужно вывести количество групп и для каждой группы – количество учеников в ней
# Пример вывода:
# Всего 2 группы.
# Группа 1: 2 ученика.
Expand All @@ -40,11 +46,13 @@
['Вася', 'Маша', 'Саша', 'Женя'],
['Оля', 'Петя', 'Гриша'],
]
# ???

print(f'Всего {len(groups)} групп(ы).')
for i in range(len(groups)):
print(f'Группа {i + 1}: {len(groups[i])} ученика(ов)')

# Задание 5
# Для каждой пары учеников нужно с новой строки перечислить учеников, которые в неё входят
# Для каждой пары групп и учеников нужно с новой строки перечислить учеников, которые в неё входят
# Пример вывода:
# Группа 1: Вася, Маша
# Группа 2: Оля, Петя, Гриша
Expand All @@ -54,4 +62,5 @@
['Оля', 'Петя', 'Гриша'],
['Вася', 'Маша', 'Саша', 'Женя'],
]
# ???
for i in range(len(groups)):
print(f'Группа {i + 1}: {", ".join(groups[i])}')
85 changes: 74 additions & 11 deletions for_dict_challenges.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,23 @@
{'first_name': 'Маша'},
{'first_name': 'Петя'},
]
# ???


def count_names(students: list) -> dict:
count_names = {}
for student in students:
if student['first_name'] not in count_names:
count_names[student['first_name']] = 1
else:
count_names[student['first_name']] += 1
return count_names


count_names_dict = count_names(students)

for key, value in count_names_dict.items():
print(f"{key}: {value}")

# Задание 2
# Дан список учеников, нужно вывести самое часто повторящееся имя
# Пример вывода:
Expand All @@ -26,9 +40,22 @@
{'first_name': 'Маша'},
{'first_name': 'Оля'},
]
# ???


def key_for_max_value(target_dict):
target_key = ''
max_value = 0
for key, value in target_dict.items():
if target_dict[key] > max_value:
target_key = key
max_value = target_dict[key]
return target_key


count_names_dict = count_names(students)
frequent_name = key_for_max_value(count_names_dict)
print(f'Самое частое имя среди учеников: {frequent_name}')

# Задание 3
# Есть список учеников в нескольких классах, нужно вывести самое частое имя в каждом классе.
# Пример вывода:
Expand All @@ -44,15 +71,18 @@
{'first_name': 'Маша'},
{'first_name': 'Маша'},
{'first_name': 'Оля'},
],[ # это – третий класс
], [ # это – третий класс
{'first_name': 'Женя'},
{'first_name': 'Петя'},
{'first_name': 'Женя'},
{'first_name': 'Саша'},
],
]
# ???

for i in range(len(school_students)):
count_names_dict = count_names(school_students[i])
frequent_name = key_for_max_value(count_names_dict)
print(f'Самое частое имя в классе {i + 1}: {frequent_name}')

# Задание 4
# Для каждого класса нужно вывести количество девочек и мальчиков в нём.
Expand All @@ -61,35 +91,68 @@
# Класс 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': 'Маша'}]},
{'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,
}
# ???


def count_gender(students: list, is_male: dict) -> dict:
count_genders = {
'девочки': 0,
'мальчики': 0,
}
for name in students:
if name['first_name'] in is_male:
if is_male.get(name['first_name']):
count_genders['мальчики'] += 1
else:
count_genders['девочки'] += 1
else:
print(f"Имя {name['first_name']} не найдено в словаре")
return count_genders


for class_name in school:
count_genders = count_gender(class_name['students'], is_male)
print(
f"Класс {class_name['class']}: девочки {count_genders['девочки']}, мальчики {count_genders['мальчики']}")

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

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

girls = {}
boys = {}
for class_name in school:
count_genders = count_gender(class_name['students'], is_male)
girls[class_name['class']] = count_genders['девочки']
boys[class_name['class']] = count_genders['мальчики']
print(f'Больше всего девочек в классе {key_for_max_value(girls)}')
print(f'Больше всего мальчиков в классе {key_for_max_value(boys)}')
72 changes: 69 additions & 3 deletions for_dict_challenges_bonus.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,14 @@

Весь код стоит разбить на логические части с помощью функций.
"""
import datetime
import random
import uuid
import datetime

import lorem


def generate_chat_history():
def generate_chat_history() -> list:
messages_amount = random.randint(200, 1000)
users_ids = list(
{random.randint(1, 10000) for _ in range(random.randint(5, 20))}
Expand Down Expand Up @@ -66,5 +66,71 @@ def generate_chat_history():
return messages


def count_values(messages: list, target_field: str) -> dict:
count_values = {}
for message in messages:
if message[target_field] not in count_values:
count_values[message[target_field]] = 1
else:
count_values[message[target_field]] += 1
return count_values


def keys_for_max_values(target_dict: dict) -> list:
max_value = max(target_dict.values())
return [str(key) for key in target_dict if target_dict[key] == max_value]


def count_replies(messages: list) -> dict:
replies = set()
user_message_replies = {}

for message in messages:
user_message_replies[message['sent_by']] = 0
if message['reply_for']:
replies.add(message['reply_for'])

for message in messages:
if message['id'] in replies:
user_message_replies[message['sent_by']] += 1

return user_message_replies


print()

messages = generate_chat_history()


def count_unique_users_seen(messages: list) -> dict:
users_seen_messages = {}
for message in messages:
if message['sent_by'] not in users_seen_messages:
users_seen_messages[message['sent_by']] = []

for message in messages:
users_seen_messages[message['sent_by']] += message['seen_by']

count_users_seen_messages = {}
for k, v in users_seen_messages.items():
count_users_seen_messages[k] = len(set(v))

return count_users_seen_messages


if __name__ == "__main__":
print(generate_chat_history())
chat_history = generate_chat_history()
# print(generate_chat_history())
if len(chat_history) > 0:
user_count_messages = count_values(chat_history, 'sent_by')
print(
f'Наибольшее число сообщений у: '
f'{", ".join(keys_for_max_values(user_count_messages))}')
print(
f'Пользователи, на сообщения которых больше всего отвечали: '
f'{", ".join(keys_for_max_values(count_replies(chat_history)))}')
print(
f'Пользователи сообщения которых видело больше всего уникальных пользователей: '
f'{", ".join(keys_for_max_values(count_unique_users_seen(chat_history)))}')
else:
print('В списке нет сообщений.')