Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/156: Рейтинг темы: голосов - 156, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 09.03.2021
Сообщений: 27

Задача "поиск элемента"

31.03.2021, 18:31. Показов 29618. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Прошу подсказать с решением задачи. Условие: Пользователь вводит искомый ключ. Также, если он хочет, то может ввести максимальную глубину, -это уровень, до которого будет просматриваться структура. Напишите функцию, которая находит заданный пользователем ключ в словаре и выдаёт значение этого ключа на экран. По умолчанию уровень не задан. Вот мой код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
site = {
    'html': {
        'head': {
            'title': 'Мой сайт'
        },
        'body': {
            'h2': 'Здесь будет мой заголовок',
            'div': 'Тут, наверное, какой-то блок',
            'p': 'А вот здесь новый абзац'
        }
    }
}
 
 
def find_key(struct, key, depth):
    if depth == 1:
        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)
                if result:
                    break
        else:
            result = None
        return result
 
 
user_key = input('Какой ключ ищем? ')
search_depth = int(input('Введите глубину поиска: '))
value = find_key(site, user_key, search_depth)
if value:
    print(value)
else:
    print('Такого ключа в структуре сайта нет.')
Проблема в том, что если мы задаем максимальную глубину поиска например 3, а ключ находится на 2-м уровне, то он не находится. Помогите пожалуйста разобраться
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.03.2021, 18:31
Ответы с готовыми решениями:

Задача 4. Поиск элемента 2
Задача 4. Поиск элемента 2 Что нужно сделать Пользователь вводит искомый ключ. Если он хочет, то может ввести максимальную глубину —...

Задача на поиск максимального элемента в массиве, начинающегося с любой цифры
В массиве целого типа найти максимальный элемент из элементов, начинающихся с K-той цифры Помогите советом пожалуйста.

Вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск заданного элемента
Добавить в класс "Односвязный список" следующие функции: вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск...

8
 Аватар для Matrix3007
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844
31.03.2021, 18:42
Цитата Сообщение от Zaouza Посмотреть сообщение
Проблема в том, что если мы задаем максимальную глубину поиска например 3, а ключ находится на 2-м уровне, то он не находится. Помогите пожалуйста разобраться
Попробуй через рекурсию искать
1
0 / 0 / 0
Регистрация: 09.03.2021
Сообщений: 27
31.03.2021, 18:56  [ТС]
Так я как понимаю итак через рекурсию ищу или нет?
Python
1
result = find_key(sub_struct, key, depth - 1)
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
31.03.2021, 19:00
Лучший ответ Сообщение было отмечено Zaouza как решение

Решение

Zaouza, отладчик чего говорит?

не вижу у тебя проверки что ключ УЖЕ на этом уровне, вернее она есть но только с условием глубина ==1. А ведь по идее ключ может быть на самом верхнем уровне, даже если ищем до 100 вложенности. Не так?

Добавлено через 44 секунды
потому у тебя и проскакивает 2 уровень - когда в рекурсии твой код входит в функцию то глубина 2, и на текущем уровне не проверяет наличие ключа.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38181 / 21116 / 4307
Регистрация: 12.02.2012
Сообщений: 34,725
Записей в блоге: 14
31.03.2021, 19:08
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
site = {
    'html': {
        'head': {
            'title': 'Мой сайт'
        },
        'body': {
            'h2': 'Здесь будет мой заголовок',
            'div': 'Тут, наверное, какой-то блок',
            'p': 'А вот здесь новый абзац'
        }
    }
}
 
# Рекурсивный поиск во вложенных словарях. 
# lv=-1  - поиск на всех уровнях;
# lv>0   - поиск до уровня lv.
 
def search(d,kk,lv=-1):
    if (lv==-1):
        res=[]
        for k in d.keys():
            if k==kk:
               res=res+[d[k]]
            if type(d[k]) is dict:
                res=res+search(d[k],kk,lv=-1)
        return res
    else:
        if (lv==0):
            return []
        else:
            res=[]
            for k in d.keys():
                if k==kk:
                    res=res+[d[k]]
                if type(d[k]) is dict:
                    res=res+search(d[k],kk,lv-1)
            return res
            
print(search(site,'p'))      
print(search(site,'p',lv=3))
1
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
31.03.2021, 19:11
Zaouza, вроде без первого условия работает
Python
1
2
3
4
5
6
7
8
9
10
11
12
def find_key(struct, key, depth):
    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)
                if result:
                    break
        else:
            result = None
        return result
1
0 / 0 / 0
Регистрация: 09.03.2021
Сообщений: 27
31.03.2021, 19:13  [ТС]
Разобрался, спасибо.
0
-1 / 3 / 0
Регистрация: 09.10.2022
Сообщений: 21
16.01.2023, 21:51
в итоге какой код получился то?
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
03.07.2023, 22:59
Ну, так можно:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
site = \
{
    'html': {
                'head': {
                            'title': 'Мой сайт'
                        },
                'body': {
                            'h2': 'Здесь будет мой заголовок',
                            'div': 'Тут, наверное, какой-то блок',
                            'p': 'А вот здесь новый абзац'
                        }
            }
}
 
def get_val_of_key(dic, key, depth = 0):
    if key in dic:
        return dic[key]
    if depth - 1:
        for v in dic.values():
            if isinstance(v, dict) and (res := get_val_of_key(v, key, depth-1)):
                return res
 
key = input('key = ')
d = input('введите уровень (или просто нажмите Enter): ')
if d:
    print(get_val_of_key(site, key, int(d)))
else:
    print(get_val_of_key(site, key))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.07.2023, 22:59
Помогаю со студенческими работами здесь

Выполнить поиск, указанного пользователем элемента, двумя методами: применив последовательный поиск и бинарный поиск
написать программу в паскале 4) Любым способом задать отсортированный массив. Выполнить поиск, указанного пользователем элемента,...

Поиск минимального значения элемента и определение порядкового номера наименьшего элемента
Дана непустая последовательность различных натуральных чисел. Определить порядковый номер наименьшего из них. помогите! очень нужен код...

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

Поиск минимального элемента, расположенного под главной диагональю, и максимального элемента
Составьте программу поиска минимального элемента, расположенного под главной диагональю, и максимального элемента, расположенного над...

Слоёный список. Обновление элемента списка, поиск вхождения элемента
словие задачи: Информационно-поисковая система аптеки. Базовая структура данных  Слоёный список Функции  создание списка,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru