diff --git a/for_challenges.py b/for_challenges.py index 997754da..7ec5c370 100644 --- a/for_challenges.py +++ b/for_challenges.py @@ -2,7 +2,10 @@ # Необходимо вывести имена всех учеников из списка с новой строки names = ['Оля', 'Петя', 'Вася', 'Маша'] -# ??? + + +for user in names: + print(user) # Задание 2 @@ -12,7 +15,10 @@ # Петя: 4 names = ['Оля', 'Петя', 'Вася', 'Маша'] -# ??? + + +for user in names: + print(f'{user}: {len(user)}') # Задание 3 @@ -25,7 +31,13 @@ 'Маша': False, } names = ['Оля', 'Петя', 'Вася', 'Маша'] -# ??? + + +for user in names: + if is_male.get(user): + print(f'{user} - пол мужской') + else: + print(f'{user} - пол женский') # Задание 4 @@ -40,7 +52,13 @@ ['Вася', 'Маша', 'Саша', 'Женя'], ['Оля', 'Петя', 'Гриша'], ] -# ??? + + +print(f'Всего {len(groups)} группы') + + +for group_num, group in enumerate(groups, start =1): + print(f'Группа {group_num}: {len(group)} ученика') # Задание 5 @@ -54,4 +72,7 @@ ['Оля', 'Петя', 'Гриша'], ['Вася', 'Маша', 'Саша', 'Женя'], ] -# ??? \ No newline at end of file + +for group_num, entrance_group in enumerate(groups, start =1): + conclusion = ', '.join(entrance_group) + print(f'Группа {group_num}: {conclusion}') \ No newline at end of file diff --git a/for_dict_challenges.py b/for_dict_challenges.py index 96062ebc..54172fb9 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -5,6 +5,10 @@ # Маша: 2 # Петя: 2 + +print('Ответ на задание 1:') + + students = [ {'first_name': 'Вася'}, {'first_name': 'Петя'}, @@ -12,21 +16,57 @@ {'first_name': 'Маша'}, {'first_name': 'Петя'}, ] -# ??? + + +repeat_students = {} + + +for inform_student in students: + student_name = inform_student['first_name'] + if student_name in repeat_students: + repeat_students[student_name] = repeat_students.get(student_name) + 1 + else: + repeat_students[student_name] = 1 + + +for name, count_name in repeat_students.items(): + print(name, count_name) # Задание 2 # Дан список учеников, нужно вывести самое часто повторящееся имя # Пример вывода: # Самое частое имя среди учеников: Маша + + +print('Ответ на задание 2:') + + students = [ {'first_name': 'Вася'}, {'first_name': 'Петя'}, {'first_name': 'Маша'}, {'first_name': 'Маша'}, {'first_name': 'Оля'}, + {'first_name': 'Вася'}, + {'first_name': 'Петя'}, + {'first_name': 'Петя'}, ] -# ??? + + +number_repetitions_names = {} + + +for inf_student in students: + student_name = inf_student['first_name'] + if student_name in number_repetitions_names: + number_repetitions_names[student_name] += 1 + else: + number_repetitions_names[student_name] = 1 + + +max_key = max(number_repetitions_names, key=number_repetitions_names.get) +print(f'Самое частое имя среди учеников: {max_key}') # Задание 3 @@ -35,23 +75,38 @@ # Самое частое имя в классе 1: Вася # Самое частое имя в классе 2: Маша + +print('Ответ на задание 3:') + + school_students = [ [ # это – первый класс {'first_name': 'Вася'}, - {'first_name': 'Вася'}, - ], - [ # это – второй класс + {'first_name': 'Вася'} + ],[ # это – второй класс {'first_name': 'Маша'}, {'first_name': 'Маша'}, - {'first_name': 'Оля'}, + {'first_name': 'Оля'} ],[ # это – третий класс {'first_name': 'Женя'}, {'first_name': 'Петя'}, {'first_name': 'Женя'}, - {'first_name': 'Саша'}, + {'first_name': 'Саша'} ], ] -# ??? + + +for class_num, every_class in enumerate(school_students, start=1): + class_students = {} + for every_schoolkid in every_class: + if every_schoolkid['first_name'] in class_students: + + class_students[every_schoolkid['first_name']] += 1 + else: + class_students[every_schoolkid['first_name']] = 1 + + max_repeat = max(class_students, key=class_students.get) + print(f'Самое частое имя в классе {class_num}: {max_repeat}') # Задание 4 @@ -60,11 +115,17 @@ # Класс 2a: девочки 2, мальчики 0 # Класс 2б: девочки 0, мальчики 2 + +print('Ответ на задание 4:') + + 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, @@ -72,7 +133,29 @@ 'Миша': True, 'Даша': False, } -# ??? + + +for inform_class in school: + class_num = inform_class['class'] + if inform_class.get('students'): + students = inform_class['students'] + count_man = 0 + count_women = 0 + + for name_stud in students: + name_gender = name_stud['first_name'] + if name_gender in is_male: + gender = is_male[name_gender] + if gender: + count_man += 1 + else: + count_women += 1 + else: + print(f'У {name_gender} не обозначен пол') + count_women = "Ошибка" + count_man = "Ошибка" + break + print(f'Класс {class_num}: девочки {count_women}, мальчики {count_man}') # Задание 5 @@ -81,6 +164,10 @@ # Больше всего мальчиков в классе 3c # Больше всего девочек в классе 2a + +print('Ответ на задание 5:') + + school = [ {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, {'class': '3c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, @@ -91,5 +178,50 @@ 'Олег': True, 'Миша': True, } -# ??? + +sum_gender_in_scool =[] + + +for inform_class in school: + num_gender_in_class = {} + class_num = inform_class['class'] + num_gender_in_class['class'] = class_num + if inform_class.get('students'): + students = inform_class['students'] + count_women = 0 + count_man = 0 + + for name_students in students: + name_gender = name_students['first_name'] + if name_gender in is_male: + gender = is_male[name_gender] + gender_list = {} + if gender: + count_man += 1 + else: + count_women += 1 + else: + print(f'У {name_gender} не обозначен пол') + count_women = "Ошибка" + count_man = "Ошибка" + break + gender_list['девочки'] = count_women + gender_list['мальчики'] = count_man + num_gender_in_class['gender'] = gender_list + sum_gender_in_scool.append(num_gender_in_class) + + + + +for inform_every_class in sum_gender_in_scool: + num_class = inform_every_class.get('class') + + if inform_every_class.get('gender'): + gender_lists = inform_every_class['gender'] + max_gender = max(gender_lists, key=gender_lists.get) + + if max_gender == 'девочки': + print(f'Больше всего девочек в классе {num_class}') + elif max_gender == 'мальчики': + print(f'Больше всего мальчиков в классе {num_class}') diff --git a/for_dict_challenges_bonus.py b/for_dict_challenges_bonus.py index 9f35a0a0..05167810 100644 --- a/for_dict_challenges_bonus.py +++ b/for_dict_challenges_bonus.py @@ -32,10 +32,11 @@ """ import random import uuid -import datetime +import datetime import lorem +from collections import Counter def generate_chat_history(): messages_amount = random.randint(200, 1000) @@ -66,5 +67,131 @@ def generate_chat_history(): return messages +# Решение задания №1 + + +def user_max_message(messages): + id_user_message = [] + for one_message in messages: + id_user = one_message['sent_by'] + id_user_message.append(id_user) + + numb_user_message = Counter(id_user_message) + id_user_max_message = max(numb_user_message, key=numb_user_message.get) + return id_user_max_message + + +# Решение задания №2 + + +def message_with_max_answer(messages): + list_with_id_message = [] + for one_message in messages: + id_message = one_message['reply_for'] + if id_message is not None: + list_with_id_message.append(id_message) + + numb_id_message = Counter(list_with_id_message) + id_message_max = max(numb_id_message, key=numb_id_message.get) + + for one_message in messages: + if id_message_max == one_message['id']: + return one_message['sent_by'] + + +# Решение задания № 3 + + +def get_id_with_max_unique_users(messages): + id_users_with_unique_users = create_users_with_unique_users(messages) + id_with_max_nubm_unique_users = max(id_users_with_unique_users, key=id_users_with_unique_users.get) + max_nubm_unique_users = len(id_users_with_unique_users[id_with_max_nubm_unique_users]) + + return [user for user in id_users_with_unique_users + if len(id_users_with_unique_users[user]) == max_nubm_unique_users] + + +def create_users_with_unique_users(messages): + users_with_unique_users = {} + for one_message in messages: + id_user = one_message['sent_by'] + id_seen_by = one_message['seen_by'] + if id_user in users_with_unique_users: + users_with_unique_users[id_user].update(id_seen_by) + else: + users_with_unique_users[id_user] = set(id_seen_by) + + return users_with_unique_users + + +# Решение задания №4 + + +def what_time_with_max_message(messages): + time_create_message = [] + for one_message in messages: + hour_create_message = one_message['sent_at'].hour + if hour_create_message < 12: + time_create_message.append('утром') + elif 12 <= hour_create_message >= 18: + time_create_message.append('днём') + else: + time_create_message.append('вечером') + + numb_message_in_period_of_time = Counter(time_create_message) + max_numb_message_in_period_of_time = max(numb_message_in_period_of_time, key=numb_message_in_period_of_time.get) + return max_numb_message_in_period_of_time + + +# Решение задания №5 + + +def create_id_with_reply_for(messages): + id_with_reply_for = {} + for one_message in messages: + id_with_reply_for[one_message['id']] = one_message['reply_for'] + + return id_with_reply_for + +def get_id_last_messages_in_thread(id_with_reply_for): + id_message_for_reply = [ + one_id for one_id in id_with_reply_for + if one_id in id_with_reply_for] + + while True: + temp_list_id_message_for_reply = [ + one_id for one_id in id_with_reply_for + if id_with_reply_for.get(one_id) in id_message_for_reply] + + if len(temp_list_id_message_for_reply) == 0: + break + + id_message_for_reply = temp_list_id_message_for_reply[:] + + return id_message_for_reply + +def id_messages_with_most_long_replies(messages): + id_with_reply_for = create_id_with_reply_for(messages) + id_message_with_last_reply = get_id_last_messages_in_thread(id_with_reply_for) + + id_message_before_last_reply = [id_with_reply_for[id] for id in id_message_with_last_reply] + finish_id_messages = [] + for id in id_message_before_last_reply: + while True: + if id_with_reply_for[id] is not None: + id = id_with_reply_for[id] + else: + finish_id_messages.append(id) + break + + return finish_id_messages + + if __name__ == "__main__": - print(generate_chat_history()) + messages = generate_chat_history() + + print(f'Больше всех сообщений написал пользователь с ID: {user_max_message(messages)}') + print(f'Сообщение, на которое больше всего отвечали, принадлежит пользователю: {message_with_max_answer(messages)}') + print(f'ID пользователей, сообщения, которых видело больше всего уникальных пользователей: {get_id_with_max_unique_users(messages)}') + print(f'Больше всего сообщений в чате: {what_time_with_max_message(messages)}') + print(f'Идентификаторы сообщений, который стали началом для самых длинных тредов (цепочек ответов) {id_messages_with_most_long_replies(messages)}') \ No newline at end of file diff --git a/string_challenges.py b/string_challenges.py index 856add2d..40f0e8c7 100644 --- a/string_challenges.py +++ b/string_challenges.py @@ -1,28 +1,43 @@ # Вывести последнюю букву в слове word = 'Архангельск' -# ??? +print(word[-1]) # Вывести количество букв "а" в слове word = 'Архангельск' -# ??? +print(word.lower().count('а')) # Вывести количество гласных букв в слове word = 'Архангельск' -# ??? +vowels = ['у', 'е', 'ы', 'а', 'о', 'э', 'я', 'и', 'ю', 'ё'] +quantity_vowels = 0 +for letter in word.lower(): + if letter in vowels: + quantity_vowels += 1 +print(quantity_vowels) # Вывести количество слов в предложении sentence = 'Мы приехали в гости' -# ??? +print(len(sentence.split(" "))) # Вывести первую букву каждого слова на отдельной строке sentence = 'Мы приехали в гости' -# ??? +sentence_word = sentence.split(" ") +for word in sentence_word: + print(word[0]) # Вывести усреднённую длину слова в предложении sentence = 'Мы приехали в гости' -# ??? \ No newline at end of file +sentence_word = sentence.split(" ") +general_length = 0 +for element in sentence_word: + length = len(element) + general_length += length + +avg_length= general_length / len(sentence_word) +print(avg_length) +