Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2018, 10:54   #1
Obey177
Форумчанин
 
Регистрация: 29.08.2010
Сообщений: 159
По умолчанию Рекурсия возвращает None

Код:
def search_startend(lines,start,end,count=0,is_start=True):
    search=""
    if (count == len(lines)-1):
        return True
    if is_start==True:
        search=start
    else:
        search=end
    if re.search(search, lines[count]):
        is_start = not is_start
        count += 1
        print(count)
        search_startend(lines,start,end,count=count,is_start=is_start)
    else:
        count += 1
        search_startend(lines,start,end,count=count,is_start=is_start)



startFirst=r"[|]----------------[-|]----------------[|]----------------[|]----------------[|]"
endFirst="---------------------------------------------------------------------"
count = 0
f=open(r"table.txt","rb")
lines=[]
for line in f:
    lines.append(line.decode("utf-8"))
print(search_startend(lines,startFirst,endFirst))
Функция ищет начальные и конечные элементы, и вконце прохода всего массива просто должна вернуть True, но почему то приходит None

Код:
C:\Users\wordl\AppData\Local\Programs\Python\Python37\python.exe C:/Users/wordl/PycharmProjects/untitled/check-tags.py -v
12
49
70
109
130
169
190
229
250
288
309
348
369
408
429
468
489
528
549
588
609
648
669
708
None

Process finished with exit code 0
Obey177 вне форума Ответить с цитированием
Старый 24.07.2018, 11:03   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Obey177 Посмотреть сообщение
Код:
def search_startend(lines,start,end,count=0,is_start=True):
    search=""
    if (count == len(lines)-1):
        return True
    if is_start==True:
        search=start
    else:
        search=end
    if re.search(search, lines[count]):
        is_start = not is_start
        count += 1
        print(count)
        search_startend(lines,start,end,count=count,is_start=is_start)
    else:
        count += 1
        search_startend(lines,start,end,count=count,is_start=is_start)
может надо вернуть значение, которе функция search_startend возвращает?!

Код:
def search_startend(lines,start,end,count=0,is_start=True):
    search=""
    if (count == len(lines)-1):
        return True
    if is_start==True:
        search=start
    else:
        search=end
    if re.search(search, lines[count]):
        is_start = not is_start
        count += 1
        print(count)
        return search_startend(lines,start,end,count=count,is_start=is_start)
    else:
        count += 1
        return search_startend(lines,start,end,count=count,is_start=is_start)
p.s. Это просто исходя из синтаксиса. Логику функции я не разбирал, возможно, что и там есть проблемы.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.07.2018, 11:10   #3
Obey177
Форумчанин
 
Регистрация: 29.08.2010
Сообщений: 159
По умолчанию

Разобрался сам,
Код:
def search_startend(lines,start,end,count=0,is_start=True,result=[]):
    search=""
    if (count == len(lines)-1):
        return result
    if is_start==True:
        search=start
    else:
        search=end
    if re.search(search, lines[count]):
        is_start = not is_start
        count += 1
        result.append(count)
        return search_startend(lines,start,end,count=count,is_start=is_start,result=result)
    else:
        count += 1
        return search_startend(lines,start,end,count=count,is_start=is_start,result=result)
Просто нужно было указать return перед каждым внутренним вызовом функции что бы result вернулся в самый первый родительский вызов
Obey177 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Напишите функцию calculateArea. -Если функция принимает одно число "a" - она возвращает площадь квадрата (a*a). -Если функция принимает два числа "a, b" - она возвращает площадь пр Skeydzh Фриланс 4 04.07.2017 22:42
Pos возвращает 0 danil123 Общие вопросы Delphi 4 13.07.2012 16:06
не возвращает массив... mrgrudge PHP 1 01.11.2010 11:58
не возвращает массив... mrgrudge PHP 2 26.10.2010 09:37
Запрос возвращает пустую таблицу, если один из подзаросов возвращает пустую таблицу ArtInt SQL, базы данных 9 12.05.2010 15:40