Глобальные и локальные переменные

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

Этот урок посвящен одной из ключевых концепций в Python — областям видимости переменных. Мы разберем разницу между глобальными (доступными во всей программе) и локальными (существующими только внутри функции) переменными.

Вы узнаете:
1. Где живут переменные, объявленные внутри и снаружи функций.
2. Что такое "затенение" (shadowing) переменных.
3. Как изменять глобальные переменные внутри функций с помощью ключевого слова global.
4. Как избежать распространенных ошибок, связанных с `UnboundLocalError`.

Задания расположены от простых к сложным: от определения типа области видимости до написания корректного кода с изменением состояний. Внимательно следите за отступами и синтаксисом!

Список тем

Глобальные или Локальные?

id: 40042_task_sort_scope_1

В приведенном коде есть переменные, объявленные в разных местах. Распределите строки кода с объявлениями переменных по соответствующим категориям: Глобальная область видимости (Global scope) или Локальная область видимости (Local scope).

Перетяните элементы в соответствующие блоки
Глобальные переменные
Локальные переменные
player_score = 0
def update_score():
    current_bonus = 50
    temp_val = 10
max_lives = 3
    total = current_bonus + 100
server_name = "EU_West"
Сообщения
Проверить
Показать подсказку

Чтение глобальной переменной

id: 40042_task_predict_read_global

Проанализируйте код. Функция `greet` обращается к переменной `user_name`. Что будет выведено в консоль при вызове этой функции?

Выберите правильный вариант ответа
user_name = "Alice"

def greet():
    print(f"Hello, {user_name}!")

greet()
Сообщения
Проверить
Показать подсказку

Эффект затенения (Shadowing)

id: 40042_task_give_res_shadowing

В этом коде есть переменная `x` снаружи и переменная `x` внутри функции. Какое число выведет последняя строка `print(x)` (которая находится вне функции)?

Что должно получиться?
x = 100

def change_value():
    x = 50  # Локальное присваивание
    print(f"Inside: {x}")

change_value()
print(x)
Сообщения
Проверить
Показать подсказку

Изменение глобальной переменной

id: 40042_task_replace_global_kw

Мы хотим, чтобы функция `increment` действительно увеличивала глобальный счетчик `count`. Вставьте необходимое ключевое слово и имя переменной, чтобы разрешить изменение.

Заполните пропуски
count = 0

def increment():
    input1S input2S  # Разрешаем доступ на запись
    count += 1

increment()
print(count)  # Должно вывести 1
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Терминология областей видимости

id: 40042_task_compare_definitions

Сопоставьте термины с их правильными определениями в контексте Python.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Переменная, объявленная внутри функции
Переменная, объявленная в основном теле программы
Ситуация, когда локальная переменная скрывает глобальную с тем же именем
Ключевое слово для изменения внешней переменной внутри функции
Глобальная переменная
Локальная переменная
global
Shadowing (Затенение)
Сообщения
Проверить
Показать подсказку

Кошелек: пополнение баланса

id: 40042_task_bank_fill_wallet

Допишите функцию `deposit`, которая принимает сумму `amount` и добавляет её к глобальной переменной `wallet`. Используйте элементы из банка.

Нужно правильно расставить в пропуски предложенные варианты
wallet = 100

def deposit(amount):
    input1S input2S
    input3S += amount

deposit(50)
print(wallet)
global
return
wallet
wallet
amount
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Ошибка в объявлении global

id: 40042_task_error_typo

Программист допустил синтаксическую ошибку при попытке объявить глобальную переменную внутри функции. Найдите строку с ошибкой и исправьте опечатку в ключевом слове.

Найдите ошибку и исправьте
settings = {"theme": "dark"}
def switch_theme():
    globl settings
    settings["theme"] = "light"
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сборка счетчика посещений

id: 40042_task_bfp_logic

Соберите работающий скрипт, который увеличивает счетчик посещений. Строки должны идти в логическом порядке: объявление переменной -> объявление функции -> вызов -> проверка результата. Обратите внимание на отступы в строках!

Перетяните в правильном порядке строки из одного блока в другой
visits = 0
def add_visit():
    global visits
    visits += 1
add_visit()
print(visits)
    visits = visits + 1
global visits = 0
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Порядок выполнения кода с глобальными переменными

id: 40042_task_seq_execution

Python выполняет код сверху вниз, но определения функций (`def`) не запускают их тело сразу. Расставьте строки в том порядке, в котором они будут фактически выполняться интерпретатором (по шагам).

Расставьте строки в правильном порядке
x = 5  (Шаг 1)
def modify(): (Шаг 2 - определение)
modify() (Шаг 3 - вызов)
    global x (Шаг 4 - внутри функции)
    x = 10 (Шаг 5 - изменение)
print(x) (Шаг 6 - вывод результата)
Сообщения
Проверить
Показать подсказку

Ловушка с присваиванием

id: 40042_task_predict_scope_error

Что произойдет при выполнении этого кода? Обратите внимание: мы пытаемся распечатать `a` до того, как присвоить ей новое значение, но всё это происходит внутри одной функции.

Выберите правильный вариант ответа
a = 10

def test():
    print(a)
    a = 20

test()
Сообщения
Проверить
Показать подсказку
НайтиКурс.Ру