🐍 Python: Практические задания

Глава 3.1: Функции

📊 Прогресс:

0/0

🟢 Уровень 1: Создание и вызов простейших функций

Задача 1.1: Первая функция
Создайте функцию hello_world(), которая выводит текст "Hello, Python!" и вызовите её один раз
💡 Подсказка:
Используйте def для определения и () для вызова
✅ Решение:
def hello_world():
    print("Hello, Python!")

hello_world()
Задача 1.2: Функция-приветствие
Создайте функцию greet_qa(), которая выводит "Добро пожаловать в мир тестирования!" и вызовите её два раза подряд
💡 Подсказка:
Функцию можно вызывать сколько угодно раз
✅ Решение:
def greet_qa():
    print("Добро пожаловать в мир тестирования!")

greet_qa()
greet_qa()
Задача 1.3: Функция с несколькими командами
Создайте функцию test_info(), которая выводит три строки: "Тест начат", "Тест выполняется", "Тест завершен". Вызовите функцию
💡 Подсказка:
В теле функции может быть несколько строк кода
✅ Решение:
def test_info():
    print("Тест начат")
    print("Тест выполняется")
    print("Тест завершен")

test_info()

🟡 Уровень 2: Функции с return

Задача 2.1: Первый return
Создайте функцию get_version(), которая возвращает строку "v1.0.0". Вызовите функцию и выведите результат
💡 Подсказка:
Используйте return вместо print внутри функции
✅ Решение:
def get_version():
    return "v1.0.0"

version = get_version()
print(version)
Задача 2.2: Вычисление в функции
Создайте функцию calculate_tests(), которая внутри себя вычисляет 5 * 3 и возвращает результат. Сохраните результат в переменную и выведите
💡 Подсказка:
return может возвращать результат выражения
✅ Решение:
def calculate_tests():
    return 5 * 3

total_tests = calculate_tests()
print(total_tests)
Задача 2.3: Функция-константа
Создайте функцию get_timeout(), которая возвращает число 30 (таймаут в секундах). Используйте результат в выражении: умножьте его на 2 и выведите
💡 Подсказка:
Результат функции можно использовать в вычислениях
✅ Решение:
def get_timeout():
    return 30

double_timeout = get_timeout() * 2
print(double_timeout)

🟠 Уровень 3: Разница между print и return

Задача 3.1: print vs return - эксперимент
Создайте две функции: show_status() с print("OK") и get_status() с return "OK". Вызовите обе и попробуйте сохранить их результаты в переменные result1 и result2. Выведите обе переменные
💡 Подсказка:
Одна из переменных будет None
✅ Решение:
def show_status():
    print("OK")

def get_status():
    return "OK"

result1 = show_status()  # Выведет OK, но вернет None
result2 = get_status()   # Ничего не выведет, но вернет "OK"

print(result1)  # None
print(result2)  # OK
Задача 3.2: Цепочка вычислений
Создайте функцию get_base_price(), которая возвращает 100. Создайте функцию calculate_tax(), которая возвращает результат get_base_price() * 0.2. Выведите результат calculate_tax()
💡 Подсказка:
Функция может вызывать другую функцию
✅ Решение:
def get_base_price():
    return 100

def calculate_tax():
    return get_base_price() * 0.2

tax = calculate_tax()
print(tax)  # 20.0
Задача 3.3: Множественный return
Создайте функцию get_test_data(), которая возвращает три значения: "admin", "pass123", True. Получите все три значения в отдельные переменные и выведите их
💡 Подсказка:
return может возвращать несколько значений через запятую
✅ Решение:
def get_test_data():
    return "admin", "pass123", True

username, password, is_active = get_test_data()
print(username)   # admin
print(password)   # pass123
print(is_active)  # True

🔴 Уровень 4: Работа с областями видимости

Задача 4.1: Локальная переменная
Создайте глобальную переменную test_count = 0. Создайте функцию run_test(), которая создает локальную переменную test_count = 5 и выводит её. Вызовите функцию и после вызова выведите глобальную test_count
💡 Подсказка:
Локальная переменная "затеняет" глобальную
✅ Решение:
test_count = 0

def run_test():
    test_count = 5  # Локальная переменная
    print(f"Внутри функции: {test_count}")

run_test()
print(f"Вне функции: {test_count}")
Задача 4.2: Чтение глобальной переменной
Создайте глобальную переменную app_name = "TestApp". Создайте функцию show_info(), которая выводит "Приложение: " + app_name. Вызовите функцию
💡 Подсказка:
Функция может читать глобальные переменные
✅ Решение:
app_name = "TestApp"

def show_info():
    print("Приложение: " + app_name)

show_info()
Задача 4.3: Ранний выход
Создайте функцию check_password(), которая получает пароль через input(). Если пароль пустой (""), верните "Ошибка: пароль не может быть пустым". Если пароль равен "secret123", верните "Доступ разрешен". Иначе верните "Доступ запрещен". Протестируйте функцию три раза с разными вводами
💡 Подсказка:
Используйте ранний return для пустого пароля
✅ Решение:
def check_password():
    password = input("Введите пароль: ")
    
    if password == "":
        return "Ошибка: пароль не может быть пустым"
    
    if password == "secret123":
        return "Доступ разрешен"
    
    return "Доступ запрещен"

# Вызовите функцию 3 раза и вводите: "", "secret123", "wrong"
print(check_password())
print(check_password())
print(check_password())
Задача 4.4: Функция-валидатор
Создайте функцию validate_age(), которая запрашивает возраст через input(). Если возраст меньше 0, верните "Некорректный возраст". Если от 0 до 17, верните "Несовершеннолетний". Если 18 и больше, верните "Совершеннолетний"
💡 Подсказка:
Преобразуйте input() в int() и используйте несколько условий
✅ Решение:
def validate_age():
    age = int(input("Введите возраст: "))
    
    if age < 0:
        return "Некорректный возраст"
    if age < 18:
        return "Несовершеннолетний"
    return "Совершеннолетний"

status = validate_age()
print(status)

🟣 Уровень 5: Комплексные задачи

Задача 5.1: Система проверок
Создайте три функции: is_valid_login() возвращает True если логин "admin", is_valid_password() возвращает True если пароль "12345", check_access() возвращает "Доступ разрешен" если обе проверки True, иначе "Доступ запрещен". Проверьте систему
💡 Подсказка:
Функция может вызывать другие функции и проверять их результаты
✅ Решение:
def is_valid_login():
    login = input("Логин: ")
    return login == "admin"

def is_valid_password():
    password = input("Пароль: ")
    return password == "12345"

def check_access():
    if is_valid_login() and is_valid_password():
        return "Доступ разрешен"
    return "Доступ запрещен"

result = check_access()
print(result)
Задача 5.2: Калькулятор тестов
Создайте функцию get_test_stats(), которая возвращает кортеж (10, 2, 1) - passed, failed, skipped. Создайте функцию calculate_total(), которая вызывает get_test_stats() и возвращает общее количество тестов. Создайте функцию show_report(), которая выводит "Всего тестов: X" используя calculate_total()
💡 Подсказка:
Распакуйте кортеж и сложите значения
✅ Решение:
def get_test_stats():
    return 10, 2, 1  # passed, failed, skipped

def calculate_total():
    passed, failed, skipped = get_test_stats()
    return passed + failed + skipped

def show_report():
    total = calculate_total()
    print(f"Всего тестов: {total}")

show_report()
Задача 5.3: Менеджер состояний
Создайте глобальную переменную current_state = "idle". Создайте функции: start_test() выводит "Тест запущен" и возвращает "running", finish_test() выводит "Тест завершен" и возвращает "completed", get_state() возвращает текущее значение current_state. Вызовите start_test(), сохраните результат, выведите его
💡 Подсказка:
Функции могут возвращать новое состояние без изменения глобальной переменной
✅ Решение:
current_state = "idle"

def start_test():
    print("Тест запущен")
    return "running"

def finish_test():
    print("Тест завершен")
    return "completed"

def get_state():
    return current_state

new_state = start_test()
print(f"Новое состояние: {new_state}")
print(f"Глобальное состояние: {get_state()}")

Уровень 6: Тонкости и особые случаи

Задача 6.1: None по умолчанию
Создайте функцию maybe_return(), которая выводит "Функция работает" но не имеет return. Сохраните результат в переменную и проверьте, равен ли он None
💡 Подсказка:
Функция без return возвращает None
✅ Решение:
def maybe_return():
    print("Функция работает")
    # Нет return

result = maybe_return()
print(result)  # None
print(result is None)  # True
Задача 6.2: Код после return
Создайте функцию test_return() с кодом: print("До return"), return "Результат", print("После return"). Вызовите функцию и объясните, почему второй print не выполнился
💡 Подсказка:
return немедленно завершает функцию
✅ Решение:
def test_return():
    print("До return")
    return "Результат"
    print("После return")  # Этот код никогда не выполнится

result = test_return()
print(f"Функция вернула: {result}")
# Второй print не выполнился, потому что return завершает функцию
Задача 6.3: Чистая функция
Создайте "чистую" функцию calculate_discount(), которая всегда возвращает 15 (процент скидки). Создайте "нечистую" функцию get_random_discount(), которая запрашивает скидку через input() и возвращает её. Вызовите обе функции дважды и сравните поведение
💡 Подсказка:
Чистая функция всегда возвращает одинаковый результат
✅ Решение:
def calculate_discount():
    return 15  # Всегда одинаковый результат

def get_random_discount():
    discount = int(input("Введите скидку: "))
    return discount  # Зависит от ввода

# Чистая функция
print(calculate_discount())  # Всегда 15
print(calculate_discount())  # Всегда 15

# Нечистая функция
print(get_random_discount())  # Зависит от ввода
print(get_random_discount())  # Может быть другой

💡 Полезные советы

Ключевые концепции этой главы:
  1. Определение функции: def имя_функции():
  2. Вызов функции: имя_функции()
  3. return vs print:
    • print() - только показывает на экран
    • return - возвращает значение для использования
  4. Области видимости:
    • Локальные переменные живут только в функции
    • Глобальные переменные доступны везде
  5. Множественный return: return a, b, c
  6. Ранний выход: return сразу завершает функцию
Частые ошибки:
Помните: