Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 810

Рекурсивная функция, которая определяет на каком уровне вложенности располагается элемент

07.02.2025, 17:06. Показов 1989. Ответов 13

Студворк — интернет-сервис помощи студентам
Поиск уровня
Создайте рекурсивную функцию find_level_element, которая определяет на каком уровне вложенности располагается интересующий нас элемент. Нумерация уровней вложенности начинается с единицы.

Функция find_level_element принимает некое значение value и список значений lst.

Функция find_level_element должна вернуть номер уровня, где встречается первое найденное значение value в списке lst на любом уровне. Если же в lst отсутствует значение value, функция find_level_element должна вернуть -1.

Sample Input 1:
print(find_level_element(5, [1, 2, 3, 4, 5, [5]]))
Sample Output 1:
1

Sample Input 2:
print(find_level_element(5, [1, 2, 3, 4, [[5]], [5]]))
Sample Output 2:
3

Sample Input 3:
print(find_level_element(9, [1, 2, 3, 4, [[5]], [5]]))
Sample Output 3:
-1

Sample Input 4:
print(find_level_element(9, [1, 2, 3, 4, 5,
[6, 7, 8,
[[[9]], 1, [2, [3], 4], 5, 6]]]))
Sample Output 4:
5

мой код , чего-то не хватает
Python
1
2
3
4
5
6
7
def find_level_element(val, lst, level=1):
    for i in lst:
        if isinstance(i, list):
            res = find_level_element(val, i, level+1)
        if val == i:
            return level
    return res if res!=-1 else -1
получаю ошибку в тесте
Failed test #2 of 7. Wrong answer
This is a sample test from the problem statement!
Test input:
print(find_level_element(5, [1, 2, 3, 4, [[5]], [5]]))
Correct output:
3
Your code output:
2
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.02.2025, 17:06
Ответы с готовыми решениями:

Рекурсивная функция, которая определяет является ли число произведением двух различных простых чисел
Помогите пожалуйста! Рекурсивная функция, которая определяет является ли число произведением двух различных простых чисел.

Определить, в какой строке и каком столбце располагается максимальный элемент массива
Помогите пожалуйста решить. Массив, состоящий из 5 строк и 5 столбцов, заполнить случайными числами от 0 до 100. Определить, в...

Определить, в какой строке и каком столбце располагается максимальный элемент массива
Массив, состоящий из 4 строк и 5 столбцов, заполнить случайными числами от 0 до 100. Определить, в какой строке и каком столбце...

13
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
07.02.2025, 18:15
Python
1
2
3
       if isinstance(i, list):
            level += 1
            res = find_level_element(val, i, level)
1
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 810
07.02.2025, 20:44  [ТС]
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
res = find_level_element(val, i, level)
если как вы подсказали , опять ошибка

Python
1
2
3
4
5
6
7
8
def find_level_element(val, lst, level=1):
    for i in lst:
        if isinstance(i, list):
            level += 1
            res = find_level_element(val, i, level)
        if val == i:
            return level
    return res if res!=-1 else -1
This is a sample test from the problem statement!

Test input:
Python
1
print(find_level_element(9, [1, 2, 3, 4, [[5]], [5]]))
Correct output:
-1

Your code output:


Code
1
2
3
4
5
6
7
8
9
10
11
12
Error:
Traceback (most recent call last):
  File "/sandbox/main.py", line 41, in <module>
    exec('\n'.join(lines))
  File "<string>", line 1, in <module>
  File "/sandbox/main.py", line 15, in find_level_element
    res = find_level_element(val, i, level)
  File "/sandbox/main.py", line 15, in find_level_element
    res = find_level_element(val, i, level)
  File "/sandbox/main.py", line 18, in find_level_element
    return res if res!=-1 else -1
UnboundLocalError: local variable 'res' referenced before assignment
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
08.02.2025, 11:41
Python
1
2
3
4
5
        if isinstance(i, list):
            res = find_level_element(val, i, level+1)
        if val == i:
            return level
    return res if res!=-1 else -1
если первое условие не выполняется то переменная res не объявляется а ты пытаешься её вернуть о чем и говорит ошибка. нужно продумывать логику
1
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 810
08.02.2025, 15:35  [ТС]
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
нужно продумывать логику
так она и не должна объявляться , если очередной элемент не является списком
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,214
08.02.2025, 16:14
Цитата Сообщение от ujif Посмотреть сообщение
так она и не должна объявляться
попробуйте сравнить необъявленную переменную... любую. Например:
Python
1
a != 1
что произойдет?
1
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 810
08.02.2025, 17:35  [ТС]
Цитата Сообщение от ujif Посмотреть сообщение
получаю ошибку в тесте
получилось решить

Python
1
2
3
4
5
6
7
8
def find_level_element(val, lst, level=1):
    for it in lst:
        if val in lst:
            return level
        elif isinstance(it,list):
            return find_level_element(val,it,level+1)
         
    return -1
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,692
Записей в блоге: 14
08.02.2025, 19:57
Лучший ответ Сообщение было отмечено ujif как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def foo(lst,v,lv=1):
    t1,t2=None,None
    for a in lst:
        if type(a) is list:
            t1=foo(a,v,lv+1)
        else:
            if a==v:
                t2=lv
                break
    if t1 is None and t2 is None:
        return -1
    elif t1 is None:
        return t2
    elif t2 is None:
        return t1
    else:
        return min(t1,t2)
                
print(foo([1, 2, 3, 4, [[5]], [5]],5))
2
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 810
09.02.2025, 15:10  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
[5]],5))
спасибо за решение, могли бы посоветовать литературу
по рекурсии, чтобы и примеры и разбор, от чайника до вполне соображающего
что там происходит. Самые простые примеры, по выводу чисел, понятно,
кладется в стек потом достается, но некоторые задачи, где рекурсивный вызов
не одной функции, там вообще нонстоп, даже простой , для некоторых код
Python
1
2
3
4
5
6
def f(n):
    print(n)
    if n>0:
        f(n-1)
        print(n)
        f(n-1)
ни понять ни даже расписать не могу,
Еще непостижимая тайна, почему в некоторых случаях
рекурсивный вызов приходится на return а в других
сохраняется в переменную, т.е. темнота полная
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
09.02.2025, 16:01
ujif, давай начнем с простого примера
Python
1
2
3
4
def f(n):
    print(n)
    if n>0:
        f(n-1)
при вызове функции печатается значение n и если оно больше 0 то снова вызывается функция где n уже на 1 меньше и так до тех пор пока n больше 0. теперь другой пример
Python
1
2
3
4
def f(n):
    if n>0:
        f(n-1)
    print(n)
вроде все то же но принт стоит после вызова функции. теперь при вызове функции проверяется условие и если n больше 0 то снова идет вызов функции где n уменьшен на 1 при этом до строки принт не доходим так как работает следующий вызов. но теперь главное понять что каждая функция хранит свое значение n переданное ей при вызове. наконец когда n меньше 0 и условие не срабатывает вызов закончен то последняя вызванная функция печатает то значение которое ей было передано и заканчивает работу. теперь продолжает работать функция из которой вызывали эту и печатает значение n и так в верх до самой первой функции.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,692
Записей в блоге: 14
09.02.2025, 17:12
ujif, вот вырезка из моего курса по Питону. Может, чем и поможет. Полный курс в youtube/rutube. Слайды с анимацией, поэтому лучше смотреть их на полном экране.
Вложения
Тип файла: zip Рекурсия_в_Питоне.zip (66.8 Кб, 18 просмотров)
3
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 810
09.02.2025, 20:36  [ТС]
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
верх до самой первой функции
эти примеры я понимаю , но в следующее никак не могу въехать
Python
1
2
3
4
5
 print(n)
    if n>0:
        f(n-1)
        print(n)
        f(n-1)
тут скачки происходят, первая f(n-1) вызвала все что можно
а потом прыжки между принтами и f(n-1)
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,214
09.02.2025, 21:50
Цитата Сообщение от ujif Посмотреть сообщение
тут скачки происходят, первая f(n-1) вызвала все что можно
а потом прыжки между принтами и f(n-1)
Здесь вообще не функция, но не суть, сам принцип:
Нет никаких прыжков... есть последовательные вызовы функции в теле самой функции и выполняя последовательно эти шаги, функция исправно вызывает сама себя, с помещением этих вызовов в стек. Затем, после выполнения конечного условия с получением значения (при этом новый самовызов уже не должен выполняться), по принципу: первый пришел - последний ушел, начинают осуществляться возвраты вычисленных значений из стека. В каждом вызове, все условия строго выполняются и с получением значений при возврате, осуществляются все вычисления (пошагово, в обратном порядке)...
0
37 / 31 / 13
Регистрация: 08.12.2012
Сообщений: 810
09.02.2025, 22:57  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
все условия строго выполняются
согласен, пишете прямо как по правильному учебнику, только для меня
это пока, страшная тайна, я даже с бумажкой не знаю с чего начать, вернее , начать с чего , знаю
с верхней f(n-1) она постоянно вызывается и значения кладутся в стек, пока n > 0
а дальше начинается свистопляска, то выход из стека , то нижняя f(n-1) подключается
а потом опять верхняя, какого они вообще там перекличку делают , если верхняя f(n-1)
уже отработала, вот это непонятно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2025, 22:57
Помогаю со студенческими работами здесь

Функция, которая определяет уровень, на котором находится элемент Е в дереве T
Функция, которая определяет уровень, на котором находится элемент Е в дереве Т. Таблица-расписание: № поезда | Станция ...

Узнать на каком уровне находится элемент в коллекция высот
Доброго времени суток! Есть коллекция высот уровней ObservableCollection&lt;int&gt; levelsHeight = new...

Определить на каком уровне в дереве находится его максимальный элемент
Ребята, помогите, пожалуйста с программой.. я с прологом в &quot;плохих отношениях&quot;.... очень нужна ваша помощь.... Нужно определить на каком...

Функция, которая: определяет количество слов в строке; определяет длину самого длинного слова строки
Строка содержит слова, отделенные друг от друга промежутками (в любом количестве). Написать функцию, которая: а) определяет количество...

Составьте программу, которая определяет в каком массиве количество отрицательных элементов больше
Составьте программу, которая определяет в каком массиве (2 массива размерностью 10 элементов заполняется случайным образом положительными и...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru