2013-05-30 3 views
0

Я пытаюсь написать программу, которая имеет функцию, которая находит и печатает автора файла, ища строку Author в docstring. Мне удалось получить код ниже, чтобы напечатать автора файла с строкой автора, за которым следует имя автора, а также строка автора, за которой не следует имя. У меня возникают проблемы с попыткой напечатать Unknown, когда строка автора вообще не существует, т. Е. Никакая часть docstring не содержит Author.Найти автора файла python из docstring

N.B. lines - это просто список, построенный с использованием readlines() по файлу.

def author_name(lines): 
    '''Finds the authors name within the docstring''' 
    for line in lines: 
     if line.startswith("Author"): 
      line = line.strip('\n') 
      line = line.strip('\'') 
      author_line = line.split(': ') 
      if len(author_line[1]) >=4: 
       print("{0:21}{1}".format("Author", author_line[1])) 
      else: 
       print("{0:21}{1}".format("Author", "Unknown")) 

ответ

0

Если вы пишете функцию, верните значение. Не используйте печать (только для отладки). После того, как вы используете return, вы можете вернуться рано, если вы найти автора:

def author_name(lines): 
    '''Finds the authors name within the docstring''' 
    for line in lines: 
     name = 'Unknown' 
     if line.startswith("Author"): 
      line = line.strip('\n') 
      line = line.strip('\'') 
      author_line = line.split(': ') 
      if len(author_line[1]) >=4: 
       name = author_line[1] 
      return "{0:21}{1}".format("Author", name) # ends the function, we found an author 

    return "{0:21}{1}".format("Author", name) 

print(author_name(some_docstring.splitlines())) 

Последнее return утверждение выполняется только если не было никаких линий, начиная с Author, потому что если есть, то функция вернулась бы рано.

В качестве альтернативы, потому что мы по умолчанию name к Unknown, вы можете использовать break, а также для завершения цикла рано и оставить возвращаясь к этой последней строке:

def author_name(lines): 
    '''Finds the authors name within the docstring''' 
    for line in lines: 
     name = 'Unknown' 
     if line.startswith("Author"): 
      line = line.strip('\n') 
      line = line.strip('\'') 
      author_line = line.split(': ') 
      if len(author_line[1]) >=4: 
       name = author_line[1] 
      break # ends the `for` loop, we found an author. 

    return "{0:21}{1}".format("Author", name) 
+0

Спасибо, что именно помощь мне нужна – jevans

Смежные вопросы