diff --git a/for_challenges.py b/for_challenges.py index 997754da..c1de5179 100644 --- a/for_challenges.py +++ b/for_challenges.py @@ -2,6 +2,8 @@ # Необходимо вывести имена всех учеников из списка с новой строки names = ['Оля', 'Петя', 'Вася', 'Маша'] +for name in names: + print(name) # ??? @@ -12,6 +14,8 @@ # Петя: 4 names = ['Оля', 'Петя', 'Вася', 'Маша'] +for name in names: + print(f'{name}: {len(name)}') # ??? @@ -25,6 +29,9 @@ 'Маша': False, } names = ['Оля', 'Петя', 'Вася', 'Маша'] +for name in names: + gender = 'мужской' if is_male[name] else 'женский' + print(f'{name} {gender}') # ??? @@ -40,6 +47,10 @@ ['Вася', 'Маша', 'Саша', 'Женя'], ['Оля', 'Петя', 'Гриша'], ] +print(f'Всего {len(groups)} группы') +group_number = 1 +for group_number, group in enumerate(groups, start=1): + print(f'Группа {group_number}: {len(group)} человека.') # ??? @@ -54,4 +65,8 @@ ['Оля', 'Петя', 'Гриша'], ['Вася', 'Маша', 'Саша', 'Женя'], ] +group_number = 1 +for group in groups: + print(f'Группа {group_number}: {", ".join(group)}') + group_number += 1 # ??? \ No newline at end of file diff --git a/for_dict_challenges.py b/for_dict_challenges.py index fd86d344..549c9b53 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -12,8 +12,13 @@ {'first_name': 'Маша'}, {'first_name': 'Петя'}, ] +names = dict() +for student in students: + names[student['first_name']] = names.get(student['first_name'], 0) + 1 +for name, num in names.items(): + print(f'{name}: {num}') # ??? - + # Задание 2 # Дан список учеников, нужно вывести самое часто повторящееся имя @@ -26,6 +31,21 @@ {'first_name': 'Маша'}, {'first_name': 'Оля'}, ] +names = dict() +for student in students: + if student['first_name'] not in names: + names[student['first_name']] = 1 + else: + names[student['first_name']] += 1 + +result_name = list(names.keys())[0] +num_of_names = names.pop(result_name) + +for name, num in names.items(): + if num > num_of_names: + result_name = name + num_of_names = num +print(result_name) # ??? @@ -51,8 +71,26 @@ {'first_name': 'Саша'}, ], ] -# ??? +class_number = 1 +for group in school_students: + names = dict() + for student in group: + if student['first_name'] not in names: + names[student['first_name']] = 1 + else: + names[student['first_name']] += 1 + + result_name = list(names.keys())[0] + num_of_names = names.pop(result_name) + for name, num in names.items(): + if num > num_of_names: + result_name = name + num_of_names = num + print(f'Самое частое имя в классе {class_number}: {result_name}') + class_number += 1 +# ??? +print() # Задание 4 # Для каждого класса нужно вывести количество девочек и мальчиков в нём. diff --git a/for_dict_challenges_bonus.py b/for_dict_challenges_bonus.py index 9f35a0a0..09fdb51c 100644 --- a/for_dict_challenges_bonus.py +++ b/for_dict_challenges_bonus.py @@ -67,4 +67,110 @@ def generate_chat_history(): if __name__ == "__main__": - print(generate_chat_history()) + messages = generate_chat_history() + +# Вывести айди пользователя, который написал больше всех сообщений. + +def find_most_messages_user(messages): + users = {} + for message in messages: + if message['sent_by'] not in users: + users[message['sent_by']] = 1 + else: + users[message['sent_by']] += 1 + + most_num_of_messages = 0 + for user, number_of_messages in users.items(): + if number_of_messages > most_num_of_messages: + user_id = user + most_num_of_messages = number_of_messages + return user_id + +print(f'Больше всего сообщений написал пользователь с id: {find_most_messages_user(messages)}') + +# Вывести айди пользователя, на сообщения которого больше всего отвечали. + +def find_most_answers_user(messages): + answers = {} + for message in messages: + if message['reply_for'] == None: + continue + elif message['reply_for'] not in answers: + answers[message['reply_for']] = 1 + else: + answers[message['reply_for']] += 1 + + most_num_of_messages = 0 + for message, number_of_answers in answers.items(): + if number_of_answers > most_num_of_messages: + message_id = message + most_num_of_messages = number_of_answers + + for message in messages: + if message['id'] == message_id: + return(message['sent_by']) +print(f'Больше всего отвечали на сообщения пользователя с id: {find_most_answers_user(messages)}') + +# Вывести айди пользователей, сообщения которых видело больше всего уникальных пользователей. + +def find_most_viewed_user(messages): + users = {} + for message in messages: + if message['sent_by'] not in users: + users[message['sent_by']] = message['seen_by'] + else: + users[message['sent_by']] += message['seen_by'] + for id, messages in users.items(): + print(id, len(set(messages))) +find_most_viewed_user(messages) + +# Определить, когда в чате больше всего сообщений: утром (до 12 часов), днём (12-18 часов) или вечером (после 18 часов). + +def determine_time(messages): + sent_time = {'утром': 0, + 'днём': 0, + 'вечером': 0} + for message in messages: + if int(datetime.datetime.strftime(message['sent_at'], '%H')) < 12: + sent_time['утром'] += 1 + elif 12 <= int(datetime.datetime.strftime(message['sent_at'], '%H')) < 18: + sent_time['днём'] += 1 + else: + sent_time['вечером'] += 1 + number_of_message = 0 + for time, number in sent_time.items(): + if number > number_of_message: + day_time = time + number_of_message = number + print(f'Больше всего сообщений пишут {day_time}') + +determine_time(messages) + +# Вывести идентификаторы сообщений, который стали началом для самых длинных тредов (цепочек ответов). + +def create_message_id_dict(messages): + message_reply = {} + for message in messages: + message_reply[message['id']] = message['reply_for'] + return message_reply + +def find_message_tree(message_reply, message_id, answers): + for key, value in message_reply.items(): + if message_id == value: + answers.append(key) + find_message_tree(message_reply, key, answers) + return answers + +message_reply = create_message_id_dict(messages) + +message_tree = {} +for message_id in message_reply: + answers = [] + message_tree[message_id] = find_message_tree(message_reply, message_id, answers) + +num_of_answers = 0 +for key, value in message_tree.items(): + if len(value) > num_of_answers: + num_of_answers = len(value) + most_reply_id = key +print(most_reply_id) \ No newline at end of file diff --git a/string_challenges.py b/string_challenges.py index 856add2d..3462fa0e 100644 --- a/string_challenges.py +++ b/string_challenges.py @@ -1,28 +1,43 @@ # Вывести последнюю букву в слове word = 'Архангельск' +print(word[-1]) # ??? # Вывести количество букв "а" в слове word = 'Архангельск' +print(word.lower().count('а')) # ??? # Вывести количество гласных букв в слове word = 'Архангельск' +vowel_letters = 'аеёиоуыэюя' +vowel_letters_counter = 0 +for letter in word.lower(): + if letter in vowel_letters: + vowel_letters_counter += 1 +print(vowel_letters_counter) # ??? # Вывести количество слов в предложении sentence = 'Мы приехали в гости' +print(len(sentence.split())) # ??? # Вывести первую букву каждого слова на отдельной строке sentence = 'Мы приехали в гости' +for word in sentence.split(): + print(word[0]) # ??? # Вывести усреднённую длину слова в предложении sentence = 'Мы приехали в гости' +numbers_of_letters = 0 +for word in sentence.split(): + numbers_of_letters += len(word) +print(numbers_of_letters / len(sentence.split())) # ??? \ No newline at end of file