Python

Помогите: Задача на Рекурсия

Пользователь вводит искомый ключ. Если он хочет, то может ввести максимальную глубину — уровень, до которого будет просматриваться структура.


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


site = {

'html': {

'head': {

'title': 'Мой сайт'

},

'body': {

'h2': 'Здесь будет мой заголовок',

'div': 'Тут, наверное, какой-то блок',

'p': 'А вот здесь новый абзац'

}

}

}




Пример 1:


Введите искомый ключ: head


Хотите ввести максимальную глубину? Y/N: n


Значение ключа: {'title': 'Мой сайт'}





Пример 2:


Введите искомый ключ: head


Хотите ввести максимальную глубину? Y/N: y


Введите максимальную глубину: 1


Значение ключа: None
Юрий
Юрий
104
 def find_key(structure, my_key, depth=None):
if depth is None or depth >= 1:
if my_key in structure:
return structure[my_key]
else:
return None
for element in structure.values():
if isinstance(element, dict):
result = find_key(element, my_key, depth - 1)
if result:
break
else:
result = None
return result


key = input('Введите искомый ключ: ')
maximum_depth = int(input('Введите максимальную глубину: '))
value_key = find_key(site, key, maximum_depth)
print(f'Значение ключа: {value_key}')
Юрец Ligenda Белорус Bs.s.
Юрец Ligenda Белорус Bs.s.
748
Лучший ответ
Юрий но там выбор ответа:
- будем вводить глубину
- или нет

вот в этом запара(
Юрий а так спасибо!)
import random

site = {
"html": {
"head": {
"title": "Мой сайт"},
"body": {
"h2": "Здесь будет мой заголовок",
"div": "Тут, наверное, какой-то блок",
"p": "А вот здесь новый абзац"}
}
}


def find_key(struct, key, depth, depth_2):
if key in struct:
return struct[key]
if depth > 1:
for sub_struct in struct.values():
if isinstance(sub_struct, dict):
result = find_key(sub_struct, key, depth - 1, depth_2)
if result:
break
else:
result = None
return result


user_key = input("Какой ключ ищем? ")
max_depth = input("Хотите ввести максимальную глубину? Y/N:").lower()

if max_depth == "y":
search_depth = int(input("Введите максимальную глубину: "))
value = find_key(site, user_key, search_depth, max_depth)
print("Значение ключа: ", value)
elif max_depth == "n":
search_depth = random.randint(2, 10)
value = find_key(site, user_key, search_depth, max_depth)
print("Значение ключа: ", value)
Vitali Rimmer Спасибо!!!
Дополню на всякий "глубокий" случай
***** *****
***** *****
232
***** ***** тут получше видно
site = {
'html': {
'head': {
'title': 'Мой сайт'
},
'body': {
'h2': 'Здесь будет мой заголовок',
'div': 'Тут, наверное, какой-то блок',
'p': 'А вот здесь новый абзац'
}
}
}
def find_key(struct, key, depth):
if key in struct and (depth is None or depth >= 1):
return struct[key]
if depth is not None and depth > 1:
for sub_struct in struct.values():
if isinstance(sub_struct, dict):
result = find_key(sub_struct, key, depth - 1)
if result:
break
else:
result = None
elif depth is None:
for sub_struct in struct.values():
if isinstance(sub_struct, dict):
result = find_key(sub_struct, key, depth)
if result:
break
else:
result = None
else:
result = None
return result


user_key = input('Какой ищем ключ? ')
req = input('Хотите ввести максимальную глубину? Y/N: ').lower()
if req == 'y':
req_depth = int(input('Введите максимальную глубину: '))

else:
req_depth = None
value = find_key(site, user_key, req_depth)
print('Значение ключа: ', value)
Алексей Романов Не прописано условие выхода когда счетчик доходит до нуля и находит ответа
site = {
'html': {
'head': {
'title': 'Мой сайт'
},
'body': {
'h2': 'Здесь будет мой заголовок',
'div': 'Тут, наверное, какой-то блок',
'p': 'А вот здесь новый абзац'
}
}
}


def find_key(struct, key, depth):
result = None
if key in struct and (depth is None or depth >= 1):
return struct[key]
if depth is not None and depth >= 1:
for sub_struct in struct.values():
if isinstance(sub_struct, dict):
result = find_key(sub_struct, key, depth - 1)
if result:
break

elif depth is None:
for sub_struct in struct.values():
if isinstance(sub_struct, dict):
result = find_key(sub_struct, key, depth)
if result:
break

return result


user_key = input('Какой ищем ключ? ')

req = input('Хотите ввести максимальную глубину? Y/N: ').lower()
if req == 'y':
req_depth = int(input('Введите максимальную глубину: '))
else:
req_depth = None

value = find_key(site, user_key, req_depth)
print('Значение ключа: ', value)
Gnusny Gnusny нифига не понял, поясни)))
ну вот чем он лучший ответ, если даже с условием не схоже)
***** ***** и мальца воды налито