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

names = ['Оля', 'Петя', 'Вася', 'Маша']
for name in names:
print(name)
# ???


Expand All @@ -12,6 +14,8 @@
# Петя: 4

names = ['Оля', 'Петя', 'Вася', 'Маша']
for name in names:
print(f'{name}: {len(name)}')
# ???


Expand All @@ -25,6 +29,9 @@
'Маша': False,
}
names = ['Оля', 'Петя', 'Вася', 'Маша']
for name in names:
gender = 'мужской' if is_male[name] else 'женский'
print(f'{name} {gender}')
# ???


Expand All @@ -40,6 +47,10 @@
['Вася', 'Маша', 'Саша', 'Женя'],
['Оля', 'Петя', 'Гриша'],
]
print(f'Всего {len(groups)} группы')
group_number = 1
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут вместо подсчета в переменной, лучше использовать enumerate, это более pythonic way. Плюс меньше ошибок, и другим разработчикам будет сразу понятно что мы просто последовательно все элементы нумеруем (а не что-то более хитрое)

for group_number, group in enumerate(groups, start=1):
print(f'Группа {group_number}: {len(group)} человека.')
# ???


Expand All @@ -54,4 +65,8 @@
['Оля', 'Петя', 'Гриша'],
['Вася', 'Маша', 'Саша', 'Женя'],
]
group_number = 1
for group in groups:
print(f'Группа {group_number}: {", ".join(group)}')
group_number += 1
# ???
42 changes: 40 additions & 2 deletions for_dict_challenges.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
# Дан список учеников, нужно вывести самое часто повторящееся имя
Expand All @@ -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)
# ???


Expand All @@ -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
# Для каждого класса нужно вывести количество девочек и мальчиков в нём.
Expand Down
108 changes: 107 additions & 1 deletion for_dict_challenges_bonus.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
15 changes: 15 additions & 0 deletions string_challenges.py
Original file line number Diff line number Diff line change
@@ -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()))
# ???