Форум сайта python.su
0
Реализуйте программу, которая будет эмулировать работу с пространствами имен. Необходимо реализовать поддержку создания пространств имен и добавление в них переменных.
В данной задаче у каждого пространства имен есть уникальный текстовый идентификатор – его имя.
Вашей программе на вход подаются следующие запросы:
create <namespace> <parent> – создать новое пространство имен с именем <namespace> внутри пространства <parent>
add <namespace> <var> – добавить в пространство <namespace> переменную <var>
get <namespace> <var> – получить имя пространства, из которого будет взята переменная <var> при запросе из пространства <namespace>, или None, если такого пространства не существует
Рассмотрим набор запросов
add global a
create foo global
add foo b
create bar foo
add bar a
Структура пространств имен описанная данными запросами будет эквивалентна структуре пространств имен, созданной при выполнении данного кода
a = 0
def foo():
b = 1
def bar():
a = 2
a = 0
def foo():
b = 1
get(a)
get(c)
def bar():
a = 2
get(a)
get(b)
Отредактировано angree77 (Май 23, 2019 17:40:54)
Офлайн
0
Лес рук и предложений как организовать словарь 
Короче чтоб не парится не искать решил сделать так ключ по порядку ввода, значение - то что попадает из ввода:
add global a
create foo global
add foo b
get foo a
get foo c
create bar foo
add bar a
get bar a
таким образом убиваю трех зайцев одним выстрелом:
1. простота поиска команды (create, add, get)
2. простота поиска функции
3. простота поиска переменной
почему да очень просто: переменная в списке идет всегда под 2 индексом, нэймспэйс(функция) под 1 индексом, ну и комманды под 0 индексом, таким образом родился следующий кусок кода
def command(k, j=0):
return namespace[k][j]
def name(k, j=1):
return namespace[k][j]
def perem(k, j=2):
return namespace[k][j]
namespace = {}
n = int(input())
for i in range(n):
namespace[i] = input().split()
for key in range(n):
count = 0
if command(key) == 'get':
print(key, command(key), name(key), perem(key))
a = perem(key)
for ke in range(key-1, -1, -1):
if a == perem(ke) and command(ke) == 'add':
print(ke, name(ke), perem(ke))
break
if a != perem(ke): #счетчик для отсекания лишнего вывода None
count +=1
if count == key:
print('None')
Отредактировано angree77 (Май 24, 2019 21:18:27)
Офлайн
0
angree77Други помогите плз составить рекурсивную функцию для поиска из этого, поиск осуществляется по команде add совпадению name и совпадению perem(переменной)def command(k, j=0):
return namespace[k][j]
def name(k, j=1):
return namespace[k][j]
def perem(k, j=2):
return namespace[k][j]
namespace = {}
n = int(input())
for i in range(n):
namespace[i] = input().split()
for key in range(n):
count = 0
if command(key) == 'get':
print(key, command(key), name(key), perem(key))
a = perem(key)
for ke in range(key-1, -1, -1):
if a == perem(ke) and command(ke) == 'add':
print( name(ke))
break
if a != perem(ke): #счетчик для отсекания лишнего вывода None
count +=1
if count == key:
print('None')
Отредактировано angree77 (Май 25, 2019 09:39:01)
Офлайн