Пользователь вводит искомый ключ. Если он хочет, то может ввести максимальную глубину — уровень, до которого будет просматриваться структура.
Напишите функцию, которая находит заданный пользователем ключ в словаре и выдаёт значение этого ключа на экран. По умолчанию уровень не задан. В качестве примера можно использовать такой словарь:
site = {
'html': {
'head': {
'title': 'Мой сайт'
},
'body': {
'h2': 'Здесь будет мой заголовок',
'div': 'Тут, наверное, какой-то блок',
'p': 'А вот здесь новый абзац'
}
}
}
Пример 1:
Введите искомый ключ: head
Хотите ввести максимальную глубину? Y/N: n
Значение ключа: {'title': 'Мой сайт'}
Пример 2:
Введите искомый ключ: head
Хотите ввести максимальную глубину? Y/N: y
Введите максимальную глубину: 1
Значение ключа: None
Python
Помогите: Задача на Рекурсия
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}')
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)
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
Спасибо!!!
Дополню на всякий "глубокий" случай

***** *****
тут получше видно

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)
'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)
'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
нифига не понял, поясни)))
ну вот чем он лучший ответ, если даже с условием не схоже)
***** *****
и мальца воды налито
Похожие вопросы
- Срочно помогите задача по Python!!!
- Помогите задачу в python решить а то я чайник не понимаю, желательно с прояснением
- Рекурсия, Последний шаг, Разрыв цепочки рекурсии
- Помогите, пожалуйста, решить задачу Python
- Решить две задачи на питоне. Помогите пожалуйста
- Помогите пожалуйста с задачей на Python.
- Помогите с 3 задачами на питон 3!!! пожалуйста!!
- Помогите пожалуйста с задачей по python!
- Задача по программированию. Помогите пожалуйста)) Скидывайте, пожалуйста, на любых языках, я все пойму!
- Помогите, пожалуйста, с задачей на питоне!
- будем вводить глубину
- или нет
вот в этом запара(