Решение модуля 1.4 Python: основы и применение

Модуль 1.4 Пространства имён и области видимости

В какой момент создается локальное пространство имен для функции?

В момент вызова функции

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

x, y = 1, 2

def foo():
    global y
    if y == 2:
        x = 2
        y = 1

foo()
print(x)
if y == 1:
    x = 3
print(x)
Описание решения:
Давайте разберем шаги выполнения программы:
x, y = 1, 2: Создаются две переменные x и y и присваиваются значения 1 и 2 соответственно.
def foo():: Определение функции foo.
global y: Внутри функции foo объявляется, что будет использоваться глобальная переменная y, а не создаваться новая локальная переменная y внутри функции.
if y == 2:: Проверка условия. Если значение глобальной переменной y равно 2, выполняется блок кода внутри условия.
x = 2: Создается новая локальная переменная x и ей присваивается значение 2 (не глобальная переменная x, так как она не объявлена как глобальная).
y = 1: Глобальной переменной y присваивается новое значение 1.
foo(): Вызывается функция foo, которая изменяет значения переменных x и y внутри себя.
print(x): Выводится значение переменной x после выполнения функции foo. Здесь используется глобальная переменная x, и ее значение не изменилось внутри функции foo. Поэтому будет выведено значение глобальной переменной x, равное 1.
if y == 1:: Проверка условия. Если глобальная переменная y равна 1, выполняется блок кода внутри условия.
x = 3: Глобальной переменной x присваивается новое значение 3.
print(x): Выводится значение переменной x после выполнения второго блока кода. Здесь используется глобальная переменная x, и ее значение изменилось в блоке кода после выполнения функции foo. Поэтому будет выведено значение глобальной переменной x, равное 3.
1, 3

Реализуйте программу, которая будет эмулировать работу с пространствами имен. Необходимо реализовать поддержку создания пространств имен и добавление в них переменных.

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

Вашей программе на вход подаются следующие запросы:

  • create <namespace> <parent> –  создать новое пространство имен с именем <namespace> внутри пространства <parent>
  • add <namespace> <var> – добавить в пространство <namespace> переменную <var>
  • get <namespace> <var> – получить имя пространства, из которого будет взята переменная <var> при запросе из пространства <namespace>, или None, если такого пространства не существует
Описание:
Код осуществляет эмуляцию работы с пространствами имен. Программа обрабатывает запросы, которые могут быть созданием пространства имен (create), добавлением переменной в пространство имен (add), и получением имени пространства, из которого будет взята переменная (get). Родительские пространства имен и их переменные хранятся в словарях parent и vs соответственно. При запросе get, программа проверяет, содержится ли переменная в текущем пространстве имен или его родителях, и выводит имя пространства, из которого будет взята переменная.
# Ввод числа запросов
n = int(input())

# Словарь для хранения родительских пространств имен
parent = {"global": None}

# Словарь для хранения переменных в каждом пространстве имен
vs = {"global": set()}

# Обработка каждого запроса
for _ in range(n):
    t, fst, snd = input().split()
    
    # Создание нового пространства имен
    if t == "create":
        parent[fst] = snd
        vs[fst] = set()
    
    # Добавление переменной в пространство имен
    elif t == "add":
        vs[fst].add(snd)
    
    # Получение имени пространства, из которого будет взята переменная
    elif t == "get":
        while fst is not None:
            # Проверка, содержится ли переменная в текущем пространстве
            if snd in vs[fst]:
                break
            # Переход к родительскому пространству
            fst = parent[fst]
        
        # Вывод результата
        print(fst)

Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы

Понравилась статья? Поделиться с друзьями:
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x