From a9e8691932490ac392389868e963492de0981cc4 Mon Sep 17 00:00:00 2001 From: Maksim Smirnov Date: Sat, 27 May 2023 21:27:33 +0300 Subject: [PATCH 1/8] added .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..ae412d6a --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +env/ \ No newline at end of file From ddaa3e4befa3b05f960a045093c9b3433950a103 Mon Sep 17 00:00:00 2001 From: Maksim Smirnov Date: Sat, 27 May 2023 21:28:25 +0300 Subject: [PATCH 2/8] completed for_challenges --- for_challenges.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/for_challenges.py b/for_challenges.py index 997754da..3cf8d06f 100644 --- a/for_challenges.py +++ b/for_challenges.py @@ -2,7 +2,8 @@ # Необходимо вывести имена всех учеников из списка с новой строки names = ['Оля', 'Петя', 'Вася', 'Маша'] -# ??? +print('\nЗадание 1') +[print(name) for name in names] # Задание 2 @@ -12,7 +13,8 @@ # Петя: 4 names = ['Оля', 'Петя', 'Вася', 'Маша'] -# ??? +print('\nЗадание 2') +[print(f'{name}: {len(name)}') for name in names] # Задание 3 @@ -25,7 +27,12 @@ 'Маша': False, } names = ['Оля', 'Петя', 'Вася', 'Маша'] -# ??? +print('\nЗадание 3') +for name in names: + if is_male[name]: + print(f'{name}: Мужской') + else: + print(f'{name}: Женский') # Задание 4 @@ -40,7 +47,10 @@ ['Вася', 'Маша', 'Саша', 'Женя'], ['Оля', 'Петя', 'Гриша'], ] -# ??? +print('\nЗадание 4') +print(f'Всего {len(groups)} группы') +for group in range(len(groups)): + print(f'Группа {group + 1}: {len(groups[group])} ученика') # Задание 5 @@ -54,4 +64,5 @@ ['Оля', 'Петя', 'Гриша'], ['Вася', 'Маша', 'Саша', 'Женя'], ] -# ??? \ No newline at end of file +print('\nЗадание 5') +[print(' '.join(group)) for group in groups] From a90923a22596067bf6208acd4f4cbc71b7a856c3 Mon Sep 17 00:00:00 2001 From: Maksim Smirnov Date: Mon, 29 May 2023 21:22:07 +0300 Subject: [PATCH 3/8] completed for_dict_challenges --- for_dict_challenges.py | 75 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 61 insertions(+), 14 deletions(-) diff --git a/for_dict_challenges.py b/for_dict_challenges.py index 96062ebc..0a9dccfa 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -1,3 +1,4 @@ +from collections import Counter # Задание 1 # Дан список учеников, нужно посчитать количество повторений каждого имени ученика # Пример вывода: @@ -12,7 +13,12 @@ {'first_name': 'Маша'}, {'first_name': 'Петя'}, ] -# ??? + +print('Задание 1') +qty_students = (Counter(student['first_name'] for student in students)) +for student in qty_students: + print(f'{student}: {qty_students[student]}') +print() # Задание 2 @@ -26,7 +32,12 @@ {'first_name': 'Маша'}, {'first_name': 'Оля'}, ] -# ??? + +print('Задание 2') +most_common_student = Counter(student['first_name'] + for student in students).most_common(1) +print( + f'Самое частое имя среди учеников: {most_common_student[0][0]}\n') # Задание 3 @@ -44,26 +55,35 @@ {'first_name': 'Маша'}, {'first_name': 'Маша'}, {'first_name': 'Оля'}, - ],[ # это – третий класс + ], [ # это – третий класс {'first_name': 'Женя'}, {'first_name': 'Петя'}, {'first_name': 'Женя'}, {'first_name': 'Саша'}, ], ] -# ??? +print('Задание 3') +for grade in range(len(school_students)): + max_students = Counter(student['first_name'] + for student in school_students[grade]).most_common(1) + print( + f'Самое частое имя в классе {grade + 1}: {max_students[0][0]}') +print() # Задание 4 # Для каждого класса нужно вывести количество девочек и мальчиков в нём. # Пример вывода: -# Класс 2a: девочки 2, мальчики 0 +# Класс 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': 'Маша'}]}, + {'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, @@ -72,9 +92,18 @@ 'Миша': True, 'Даша': False, } -# ??? - - +print('Задание 4') +for grade in school: + male = 0 + female = 0 + for student in grade['students']: + if is_male[student['first_name']]: + male += 1 + else: + female += 1 + print( + f"Класс {grade['class']}: девочки {female}, мальчики {male}") +print() # Задание 5 # По информации о учениках разных классов нужно найти класс, в котором больше всего девочек и больше всего мальчиков # Пример вывода: @@ -82,8 +111,10 @@ # Больше всего девочек в классе 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, @@ -91,5 +122,21 @@ 'Олег': True, 'Миша': True, } -# ??? +print('Задание 5') +male = [] +female = [] +for grade in range(len(school)): + male.append(0) + female.append(0) + for student in school[grade]['students']: + if is_male[student['first_name']]: + male[grade] += 1 + else: + female[grade] += 1 +most_male = school[male.index(max(male))]['class'] +most_female = school[female.index(max(female))]['class'] +print( + f"Больше всего мальчиков в классе {most_male}") +print( + f"Больше всего девочек в классе {most_female}") From 4f42a44c4f49d3d43d4b99bd586a4ea4ed41d64d Mon Sep 17 00:00:00 2001 From: Maksim Smirnov Date: Fri, 2 Jun 2023 20:11:17 +0300 Subject: [PATCH 4/8] some adjustments to tasks n.: 3, 4, 5 --- for_challenges.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/for_challenges.py b/for_challenges.py index 3cf8d06f..f391e707 100644 --- a/for_challenges.py +++ b/for_challenges.py @@ -26,13 +26,16 @@ 'Вася': True, 'Маша': False, } -names = ['Оля', 'Петя', 'Вася', 'Маша'] +names = ['Оля', 'Петя', 'Вася', 'Маша', 'Максим'] print('\nЗадание 3') for name in names: - if is_male[name]: - print(f'{name}: Мужской') - else: - print(f'{name}: Женский') + try: + if is_male[name]: + print(f'{name}: Мужской') + else: + print(f'{name}: Женский') + except KeyError: + print(f'Не знаю такого имени: {name}') # Задание 4 @@ -49,8 +52,8 @@ ] print('\nЗадание 4') print(f'Всего {len(groups)} группы') -for group in range(len(groups)): - print(f'Группа {group + 1}: {len(groups[group])} ученика') +for index, group in enumerate(groups, start=1): + print(f"Группа {index}: {len(group)} ученика") # Задание 5 @@ -65,4 +68,5 @@ ['Вася', 'Маша', 'Саша', 'Женя'], ] print('\nЗадание 5') -[print(' '.join(group)) for group in groups] +[print(f"Группа {index}: {', '.join(group)}") + for index, group in enumerate(groups, start=1)] From 1fc6c286b7053ab67b9f0c2d24f8d79aa2e9351d Mon Sep 17 00:00:00 2001 From: Maksim Smirnov Date: Fri, 2 Jun 2023 20:12:24 +0300 Subject: [PATCH 5/8] completed string_challenges --- string_challenges.py | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/string_challenges.py b/string_challenges.py index 856add2d..53719984 100644 --- a/string_challenges.py +++ b/string_challenges.py @@ -1,28 +1,45 @@ # Вывести последнюю букву в слове word = 'Архангельск' -# ??? +print(f"В слове {word} последняя буква: {word[-1:]}\n") # Вывести количество букв "а" в слове word = 'Архангельск' -# ??? +cymbol_to_count = 'а' +cymbols_in_word = word.lower().count(cymbol_to_count) +print( + f'Количество букв "{cymbol_to_count}" в слове {word}: {cymbols_in_word}\n') # Вывести количество гласных букв в слове word = 'Архангельск' -# ??? +vowels = 'аеёиоуыэюя' +vowels_sum = 0 +for symbol in word: + if symbol.lower() in vowels: + vowels_sum += 1 +print( + f'Количество гласных букв в слове {word}: {vowels_sum}\n') # Вывести количество слов в предложении sentence = 'Мы приехали в гости' -# ??? +words_quantity = sentence.count(' ') + 1 +print( + f"Количество слов в тексте: '{sentence}' - {words_quantity}\n") # Вывести первую букву каждого слова на отдельной строке sentence = 'Мы приехали в гости' -# ??? +print(f"Первые буквы в словах из: '{sentence}'") +[print(word[0]) for word in sentence.split()] +print() # Вывести усреднённую длину слова в предложении sentence = 'Мы приехали в гости' -# ??? \ No newline at end of file +words_num = len(sentence.split()) +symbols_sum = sum([len(word) for word in sentence.split()]) +avg_cymbols_in_sentence = symbols_sum // words_num +print( + f"Средняя длина слова в предложении: '{sentence}' - {avg_cymbols_in_sentence}") From bda67dd140a78ef7877d4f5998386404d18b3a02 Mon Sep 17 00:00:00 2001 From: Maksim Smirnov Date: Fri, 2 Jun 2023 23:55:28 +0300 Subject: [PATCH 6/8] some adjustments to tasks n.: 1, 5 --- for_dict_challenges.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/for_dict_challenges.py b/for_dict_challenges.py index 0a9dccfa..e9ffe450 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -15,9 +15,16 @@ ] print('Задание 1') -qty_students = (Counter(student['first_name'] for student in students)) -for student in qty_students: - print(f'{student}: {qty_students[student]}') +# qty_students = (Counter(student['first_name'] for student in students)) +# for student in qty_students: +# print(f'{student}: {qty_students[student]}') +# print() +unique_students = [] +for student in students: + if student['first_name'] not in unique_students: + unique_students.append(student['first_name']) +for student in unique_students: + print(f"{student}: {students.count({'first_name': student})}") print() @@ -134,9 +141,11 @@ else: female[grade] += 1 -most_male = school[male.index(max(male))]['class'] -most_female = school[female.index(max(female))]['class'] +most_male_index = male.index(max(male)) +most_male_class = school[most_male_index]['class'] +most_female_index = female.index(max(female)) +most_female_class = school[most_female_index]['class'] print( - f"Больше всего мальчиков в классе {most_male}") + f"Больше всего мальчиков в классе {most_male_class}") print( - f"Больше всего девочек в классе {most_female}") + f"Больше всего девочек в классе {most_female_class}") From c4f390710070b4de6d36ba5163aa72fce954dda5 Mon Sep 17 00:00:00 2001 From: Maksim Smirnov Date: Sun, 4 Jun 2023 01:55:36 +0300 Subject: [PATCH 7/8] adjusted task n. 1 --- for_dict_challenges.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/for_dict_challenges.py b/for_dict_challenges.py index e9ffe450..598b10d9 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -15,16 +15,16 @@ ] print('Задание 1') -# qty_students = (Counter(student['first_name'] for student in students)) -# for student in qty_students: -# print(f'{student}: {qty_students[student]}') -# print() -unique_students = [] +unique_students = {} for student in students: - if student['first_name'] not in unique_students: - unique_students.append(student['first_name']) -for student in unique_students: - print(f"{student}: {students.count({'first_name': student})}") + student = student['first_name'] + if unique_students.get(student): + unique_students[student] += 1 + else: + unique_students[student] = 1 + +for name, qty in unique_students.items(): + print(f"{name}: {qty}") print() From 8ca0a4aa4a15e6503b5696df514fb4e6065ee915 Mon Sep 17 00:00:00 2001 From: Maksim Smirnov Date: Thu, 8 Jun 2023 21:48:21 +0300 Subject: [PATCH 8/8] completed bonus dict challenge --- for_dict_challenges_bonus.py | 112 ++++++++++++++++++++++++++++++++++- 1 file changed, 111 insertions(+), 1 deletion(-) diff --git a/for_dict_challenges_bonus.py b/for_dict_challenges_bonus.py index 9f35a0a0..55a1182a 100644 --- a/for_dict_challenges_bonus.py +++ b/for_dict_challenges_bonus.py @@ -35,6 +35,7 @@ import datetime import lorem +from pprint import pprint def generate_chat_history(): @@ -66,5 +67,114 @@ def generate_chat_history(): return messages +# Задание 1 +users_messages_counter = {} + + +def count_user_messages(message): + if users_messages_counter.get(message['sent_by']): + users_messages_counter[message['sent_by']] += 1 + else: + users_messages_counter[message['sent_by']] = 1 + + +def get_max_posts_id(messages_dict): + max_messages_user_index = max( + messages_dict, key=users_messages_counter.get) + return max_messages_user_index + + +# Задание 2 +user_by_message = {} # для 2 задания +user_replied_amount = {} # для 2 задания + + +def count_replies(message): + user_by_message[message['id']] = message['sent_by'] + if message.get('reply_for'): + quoted_user_id = user_by_message[message['reply_for']] + user_replied_amount[quoted_user_id] = user_replied_amount.get( + quoted_user_id, 0) + 1 + return user_replied_amount + + +def get_most_replied_user(replied_users_dict): + return max(replied_users_dict, key=replied_users_dict.get) + + +# Задание 3 +users_seen_by = {} # для 3 задания + + +def count_message_views(message): + users_seen_by.setdefault(message['sent_by'], 0) + users_seen_by[message['sent_by']] += len(message.get('seen_by')) + return users_seen_by + + +def count_max_views(seen_by_dict): + return max(seen_by_dict, key=seen_by_dict.get) + + +# Задание 4 +messages_by_time = { + 'morning': 0, + 'afternoon': 0, + 'evening': 0 +} + + +def count_messages_by_time_periods(message): + if message['sent_at'].hour < 12: + messages_by_time['morning'] += 1 + elif message['sent_at'].hour < 18: + messages_by_time['afternoon'] += 1 + else: + messages_by_time['evening'] += 1 + + +def get_most_messaged_time_period(time_periods_counter): + return max(messages_by_time, key=messages_by_time.get) + + +# Задание 5 +most_replied_messages = {} + + +def count_replied_messages(message): + most_replied_messages[message['id']] = [] + if message.get('reply_for'): + most_replied_messages[message['reply_for']].append( + message['id']) + for answers in most_replied_messages.values(): + if message.get('reply_for') in answers: + answers.append(message['id']) + return most_replied_messages + + +def get_max_replied_messages(replied_messages, amount=5): + sorted_messages = sorted( + replied_messages.items(), key=lambda item: len(item[1]), reverse=True) + sorted_messages = sorted_messages[:(amount)] + sorted_messages = [message[0] for message in sorted_messages] + return [f'Number {index} by replied messages: {message}' for index, message in enumerate(sorted_messages, start=1)] + + if __name__ == "__main__": - print(generate_chat_history()) + for index, message in enumerate(generate_chat_history()): + count_user_messages(message) # Задание 1 + count_replies(message) # Задание 2 + count_message_views(message) # Задание 3 + count_messages_by_time_periods(message) # Задание 4 + count_replied_messages(message) # Задание 5 + + print('Max posts id: ', get_max_posts_id( + users_messages_counter)) # Задание 1 + print('Most replied id: ', get_most_replied_user( + user_replied_amount)) # Задание 2 + print('Most viewed user: ', count_max_views( + users_seen_by)) # Задание 3 + print('Most messages are in the: ', get_most_messaged_time_period( + messages_by_time)) # Задание 4 + pprint(get_max_replied_messages( + most_replied_messages, 3)) # Задание 5