Урок 81. Практикум 20: Данные о сотрудниках. Часть 2

📁 Блок: Базы данных ⏱️ Время изучения: ~90 мин 🎯 Сложность: Практикум
#for #in #with #as #enumerate #from #print

⚡ Задания в двух словах

  • Задание 1 — сортировка сотрудников выбранного отдела по убыванию зарплаты.
  • Задание 2 — выбор отдела по номеру из списка.
  • Задание 3 — сообщение, если в отделе нет сотрудников.
  • Задание 4 — фильтрация по зарплате с проверкой оператора.
  • Задание 5 — повторный ввод номера отдела при ошибке.

🏋️ Раздел тренировки

В этом практикуме вы последовательно дорабатываете одну программу: от простого отчёта до защищённого интерактивного запроса.

Цель тренировки: закрепить навыки работы с PyMySQL, JOIN, параметризованными запросами и валидацией пользовательского ввода.

📂 Подготовка проекта

  1. Создайте папку урока: python-fundamentals-practice/lesson-81/.
  2. Активируйте виртуальное окружение.
  3. Установите PyMySQL: pip install pymysql.
  4. Создайте файл employees_report.py.

Задание 1. Список сотрудников по убыванию зарплаты

Условие: добавьте к программе сортировку сотрудников выбранного отдела по убыванию зарплаты. Выведите имя, фамилию, должность и зарплату каждого сотрудника, начиная с самого высокооплачиваемого. Также добавьте нумерацию (не id).

Что должно получиться:

Enter department: Marketing
1. Michael Hartstein — Marketing Manager — 13000.00
2. Pat Fay — Marketing Representative — 6000.00

Подсказка: используйте ORDER BY salary DESC и enumerate(..., start=1).

Задание 2. Выбор департамента по номеру

Условие: модифицируйте программу так, чтобы пользователь выбирал отдел по номеру из списка, а не вручную вводил его название. После выбора выведите название отдела.

Что должно получиться:

Enter department number: 2
You choose: Marketing
1. Michael Hartstein — Marketing Manager — 13000.00
2. Pat Fay — Marketing Representative — 6000.00

Подсказка: не забудьте, что номер списка для пользователя начинается с 1, а индекс Python — с 0.

Задание 3. Пустой отдел

Условие: добавьте проверку: если в выбранном отделе нет сотрудников, вместо списка выведите сообщение No employees found in this department..

Что должно получиться:

Enter department number: 27
You selected: Payroll
No employees found in Payroll department.

Подсказка: после fetchall() проверьте длину результата.

Задание 4. Фильтрация сотрудников по зарплате

Условие: если в отделе есть сотрудники — дайте возможность отфильтровать их по зарплате. Спросите пользователя Would you like to filter employees by salary? (y/n). Если ответ y, попросите ввести знак сравнения и значение. Выведите только тех, кто соответствует критерию.

Что должно получиться:

Enter department number: 8
You selected: Sales
Would you like to filter employees by salary? (y/n) y
Enter condition (>, <, =, >=, <=): >
Enter salary: 13000
1. John Russell — Sales Manager — 14000.00
2. Karen Partners — Sales Manager — 13500.00

Подсказка: оператор сравнения нельзя передать как %s, поэтому проверьте его по белому списку, а значение зарплаты передайте параметром.

Задание 5. Повторный ввод при ошибке

Условие: модифицируйте программу так, чтобы при вводе некорректного номера отдела пользователю предлагалось ввести его снова. Программа не должна завершаться, пока не будет введён корректный номер.

Что должно получиться:

Enter department number: 999
Invalid department number. Please try again.
Enter department number: num1
Invalid input. Please enter a number.
Enter department number: 2
You selected: Marketing
...

Подсказка: используйте бесконечный цикл while True и выходите из него через break после успешной проверки.

Проверка понимания

Выберите один вариант ответа. После клика правильный ответ подсветится зелёным.

Вопрос 1

Что важнее всего в практическом задании?

Вопрос 2

Как безопаснее двигаться в практикуме?

Вопрос 3

Что делать, если решение не совпадает с ожидаемым результатом?

Вопрос 4

Какой стиль имён переменных обычно рекомендует PEP 8?

Вопрос 5

Зачем использовать f-strings в современном Python?

Вопрос 6

Когда полезен ранний возврат из функции?