Функция продолжает возвращать None

Я пытаюсь написать функцию для подсчета количества строк в моем входном файле, начинающихся с «AJ000012.1», но моя функция продолжает возвращать None. Я новичок и не совсем понимаю, в чем проблема и почему это происходит. Ответ должен быть 13, и когда я просто пишу код, например:

    count=0
    input=BLASTreport
    for line in input:
    if line.startswith('AJ000012.1'):
        count=count+1
    print('Number of HSPs: {}'.format(count))

Я получаю правильный ответ. Когда я пытаюсь сделать это функцией и вызвать ее, она не работает:

    def nohsps(input):
        count=0
        for line in input:
            if line.startswith('AJ000012.1'):
            count=count+1
            return

    ans1=nohsps(BLASTreport)
    print('Number of HSPs: {}'.format(ans1))

Любая помощь будет серьезно оценена, спасибо!

(HSP означает пару сегментов с высокой оценкой, если вам интересно. Входной файл представляет собой файл отчета BLAST, в котором перечислены результаты выравнивания для последовательности ДНК)


person pythonbeginner2506    schedule 29.03.2016    source источник


Ответы (1)


Когда вы просто return не указываете, что вы возвращаете, вы ничего не вернете. Будет None. Вы хотите вернуть что-то. Исходя из ваших спецификаций, вы хотите вернуть count. Кроме того, вы возвращаетесь внутрь цикла for, что означает, что вы никогда не получите ожидаемого количества. Вы хотите подсчитать все вхождения вашего совпадения, поэтому вам нужно переместить этот возврат за пределы вашего цикла:

def nohsps(input):
    count=0
    for line in input:
        if line.startswith('AJ000012.1'):
        count=count+1
    return count
person idjaw    schedule 29.03.2016
comment
Я знал, что делаю что-то простое неправильно, большое спасибо за такое ясное объяснение! - person pythonbeginner2506; 29.03.2016