Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 24.07.2018, 11:54   #1
Obey177
Форумчанин
 
Регистрация: 29.08.2010
Сообщений: 158
Репутация: 4
По умолчанию Рекурсия возвращает 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, 12:03   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 24,499
Репутация: 5308
По умолчанию

Цитата:
Сообщение от 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, 12:10   #3
Obey177
Форумчанин
 
Регистрация: 29.08.2010
Сообщений: 158
Репутация: 4
По умолчанию

Разобрался сам,
Код:

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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


09:04.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru