2012-03-13 3 views
1

Другой вопрос.Подсчет строк и их нумерация

Эта программа подсчитывает и номера каждой строки кода, если у нее нет хэш-тега, или если строка пуста. Я получил его, чтобы указать каждую строку, кроме хэш-тегов. Как я могу остановить его от подсчета пустых строк?

def main(): 

    file_Name = input('Enter file you would like to open: ') 

    infile = open(file_Name, 'r') 

    contents = infile.readlines() 
    line_Number = 0 
    for line in contents: 
     if '#' in line: 
      print(line) 
      if line == '' or line == '\n': 
       print(line) 
     else: 
      line_Number += 1 
      print(line_Number, line) 

    infile.close() 

main() 

ответ

3

Вы проверяете, если line == '' or line == '\n' внутри пункта if для '#' in line, где он не имеет никаких шансов быть True. В принципе, вам нужен if line == '' or line == '\n': линия сместилась влево :)

Кроме того, вы можете объединить эти два случая, так как вы выполняете одни и те же действия:

if '#' in line or not line or line == '\n': 
    print line 

Но на самом деле, почему бы вам нужно печатать пустые укусов или '\n'?

Редактировать: Если другие случаи, такие как line == '\t', следует обращаться одинаково, лучше всего использовать рекомендации Тима и сделать: if '#' in line or not line.strip().

+2

'not line' не будет' True', если 'line == '\ n''. Вероятно, лучше использовать 'if '#' в строке или нет line.strip()', который также будет считать строки с пробелами пустыми. –

+0

Спасибо @TimPietzcker. Это также будет охватывать '' \ t'' и, возможно, пару символов больше. Скорее всего, это будет желаемое поведение; В конце я добавил примечание. –

0

Вы можете пропустить пустые строки, добавив следующую строку в начале вашего цикла для:

if not line: 
    continue 

В Python, пустая строка вычисляется в логическое значение True. В случае, это означает, что пустые строки пропускаются, потому что этот оператор if равен True, когда строка пуста.

Утверждение continue означает, что код будет продолжен при следующем проходе через цикл. Он не будет выполнять код после этого оператора, и это означает, что ваш код, который подсчитывает строки, пропускается.

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