https://github.com/konstantinkalinichenko/advanced_tasks
Advanced level tasks to demonstrate proficiency in Python (hh.ru)
https://github.com/konstantinkalinichenko/advanced_tasks
practice-programming python3
Last synced: over 1 year ago
JSON representation
Advanced level tasks to demonstrate proficiency in Python (hh.ru)
- Host: GitHub
- URL: https://github.com/konstantinkalinichenko/advanced_tasks
- Owner: KonstantinKalinichenko
- Created: 2024-12-07T17:18:24.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-01-07T13:07:09.000Z (over 1 year ago)
- Last Synced: 2025-02-13T00:44:35.063Z (over 1 year ago)
- Topics: practice-programming, python3
- Language: Python
- Homepage:
- Size: 18.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
1. Вы работаете над программой для проведения лотерей. Чтобы победить в лотерее, участник должен угадать загаданную последовательность цифр. Те, кто не угадал, тоже получают утешительные призы. Размер приза в баллах и рассчитывает ваша программа. При этом максимальный размер ограничен.
Программа находит сумму цифр числовой последовательности участника, и если сумма четная, удвоить ее, если нечетная — утроить. Если результат больше 100, верните «Превышено» (без кавычек).
**Формат ввода:**
Одна строка с цифрами.
**Формат вывода:**
Одна строка, в которой есть сумма цифр последовательности, удвоенная или утроенная. Если сумма превышает 100, вернется «Превышено» (без кавычек).
**Пример 1**
- Входные данные:
13133
- Выходные данные:
33
**Пример 2**
- Входные данные:
99999
- Выходные данные:
Превышено
**Пример 3**
- Входные данные:
99
- Выходные данные:
36
**Макет решения:**
```
def process_number(n):
"""Ваш код"""
input_string = input()
result = process_number(input_string)
print(result)
```
# 2. **Отчёт о продажах по дате**
Вы работаете над модулем для CRM-системы, который помогает менеджерам по продажам готовить автоматизированные отчеты. Данные о продажах поступают в формате «Дата:Продукт:Количество;Дата:Продукт:Количество;...».
Напишите программу, которая принимает информацию о продажах и возвращает отчет о продажах по дате. Если в другой записи в этот же день продали тот же товар, складывайте количество по продукту. У вас должен быть класс Item, который хранит в себе каждый предмет, его количество и дату продажи.
**Формат ввода:**
Одна строка с данными в формате «Дата:Продукт:Количество;Дата:Продукт:Количество;...». Дата в формате YYYY-MM-DD, через двоеточие указано название продукта на русском языке и через ещё одно двоеточие — целое число, указывающее на количество проданных товаров. Данные по каждому продукту разделены точкой с запятой.
**Формат вывода:**
Набор строк, в котором выводится информация о продажах товаров. Сначала даётся название товара с двоеточием, а после — перечисляются даты с количеством продаж маркированным списком с дефисом через двоеточие. Товары идут по порядку ввода, также как и даты внутри отчёта по каждому товару.
**Пример 1**
_Входные данные:_
2023-01-15:Книга:10;2023-01-20:Флешка:5;2023-02-05:Книга:8
_Выходные данные:_
Книга: - 2023-01-15: 10 - 2023-02-05: 8 Флешка: - 2023-01-20: 5
**Пример 2**
- _Входные данные:_
2023-03-10:Карандаш:7;2023-04-01:Ручка:6;2023-04-15:Тетрадь:8;2023-04-15:Тетрадь:10
- _Выходные данные:_
Карандаш: - 2023-03-10: 7 Ручка: - 2023-04-01: 6 Тетрадь: - 2023-04-15: 18
```
class Item:
def __init__(self, date, product, quantity):
self.date = date
self.product = product
self.quantity = int(quantity)
def generate_product_report(data):
"""Ваш код"""
input_data = input()
product_report_generator = generate_product_report(input_data)
for report in product_report_generator:
print(report)
```
# 3. **Предмет без отстающих**
Вы работаете над модулем «Электронная зачетка» в системе для администрирования учебного процесса регионального вуза. Каждый студент может быть записан на несколько курсов, по каждому курсу у него есть итоговый балл.
Необходимо написать программу для учебного офиса, которая будет выбирать из базы те курсы, на которых нет ни одной академической задолженности. Курс без единой академической задолженности — это такой курс, где **все** студенты (у кого этот курс указан) набрали строго выше проходного балла по этому предмету. Проходной балл определяется для каждого курса отдельно.
**Формат ввода:**
Первая строка содержит информацию о студентах, курсах и их оценках в формате: «имя_студента,курс,оценка;имя_студента,курс,оценка;...». В строке есть информация хотя бы об одном студенте. Вторая строка содержит проходные баллы по предметам в формате: «курс,проходной_балл;курс,проходной_балл;;...». Гарантируется, что на все указанные в первой строке курсы есть проходной балл.
Все баллы являются целыми положительными числами, а все имена студентов уникальны.
**Формат вывода:**
Название курсов, где нет ни одной академической задолженности, каждое название с новой строки. Если таких курсов нет, выводится слово «Пусто» (без кавычек).
**Пример 1**
- Входные данные:
Анна,Математика,85;Анна,Химия,90;Борис,Математика,75;Борис,История,80;Евгений,Математика,95;Евгений,История,85
Математика,80;Химия,60;История,80
- Выходные данные:
Химия
**Пример 2**
- Входные данные:
Анна,Психология,8;Анна,Литература,9;Борис,Обществознание,8
Психология,8;Литература,9;Обществознание,8
- Выходные данные:
Пусто
**Макет кода:**
```
class Student:
def __init__(self, name):
self.name = name
self.courses = {}
"""Ваш код"""
class CourseManager:
def __init__(self):
self.students = {}
"""Ваш код"""
students_info = input()
scores_info = input()
"""Ваш код"""
```
# 4. **Шифрование методом Цезаря**
Вы разрабатываете программу для шифрования текстовых сообщений методом Цезаря. Этот метод подразумевает сдвиг каждой буквы текста на фиксированное количество позиций в алфавите. Например, при сдвиге на 3 позиции буква А становится Г, а Я становится В.
Ваша задача — написать функцию, которая принимает на вход строку и целое число (сдвиг), и возвращает зашифрованную версию этой строки по методу Цезаря. Алфавит уже задан в прекоде.
**Формат ввода:**
Входные данные состоят из двух строк: первая строка содержит произвольный текст для шифрования (только строчные буквы русского алфавита и пробелы), вторая строка содержит целое число — величину сдвига.
**Формат вывода:**
Выходные данные должны состоять из одной строки, содержащей зашифрованный текст. Пробел кодировать не нужно.
**Пример 1**
- Входные данные:
абвгде 1
- Выходные данные:
бвгдеё
**Пример 2**
- Входные данные:
это яблоко красное 7
- Выходные данные:
дщх ёзтхсх счжшфхл
**Макет решения:**
```
def encode_string(string: str) -> str:
alphabet = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
"""Ваш код"""
input_string = input()
encoded_string = encode_string(input_string)
print(encoded_string)
```
# 5. **Система управления доступом**
Вы работаете над внутрикорпоративной системой доступа пользователей. Реализуйте класс UserManager, который будет управлять доступом пользователей к системе.
У класса должны быть методы для добавления нового пользователя, удаления пользователя, повышения и понижения уровня доступа пользователя, а также для получения списка всех пользователей. Уровни доступа пользователей — это целые числа (0 ≤ x).
Класс UserManager должен поддерживать следующие методы, которые должны быть цепочками (кроме get_users):
1) **add_user()** — добавляет нового пользователя с указанным уровнем доступа или уровнем доступа по умолчанию, равным 1;
2) **remove_user()** — удаляет пользователя;
3) **promote()** — увеличивает уровень доступа пользователя на 1;
4) **demote()** — уменьшает уровень доступа на 1, если уровень доступа больше 0. Иначе ничего не происходит.
5) **get_users()** — вернет список всех пользователей с их текущим уровнем доступа.
**Формат ввода:**
Несколько строк, состоящих из команд add_user, remove_user, promote, demote, get_users. Входные данные гарантированно завершаются командой get_users.
**Формат вывода:**
Несколько строк, в которой может быть один из вариантов:
1) Пользователи с уровнем доступа если введена команда get_users;
2) «Не найдено», если пользователей в списке не осталось.
**Пример 1**
- _Входные данные:_
```
add_user Анна 1
add_user Борис 2
promote Анна
get_users
```
- _Выходные данные:_
Анна: 2
Борис: 2
**Пример 2**
- _Входные данные:_
```
add_user Анна 3
add_user Борис 2
promote Анна
get_users
add_user Евгений 2
```
- _Выходные данные:_
Анна: 4
Борис: 2
**Пример 3**
- _Входные данные:_
```
add_user Bob 3
add_user Charlie 2
remove_user Bob
remove_user Charlie
get_users
```
- _Выходные данные:_
Не найдено
**Макет кода:**
````
class UserManager:
def __init__(self):
self.users = {}
def add_user(self, name, level):
"""Ваш код"""
def remove_user(self, name):
"""Ваш код"""
def promote(self, name):
"""Ваш код"""
def demote(self, name):
"""Ваш код"""
def get_users(self):
"""Ваш код"""
user_manager = UserManager()
input_string = []
while True:
try:
line = input()
if line == "":
break
except EOFError:
break
input_string.append(line)
for command in input_string:
"""Ваш код"""
````