2012-03-13 67 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

如果'line =='\ n'','not line'不會成爲'True'。可能更好地使用'if'#行或不行line.strip()'這也將計算只有空白的行作爲空。 – 2012-03-13 20:45:42

+0

謝謝@TimPietzcker。這也會覆蓋''\ t'',也許還會包含幾個符號。最有可能的,這將是理想的行爲;最後我添加了一個註釋。 – 2012-03-13 20:52:05

0

您可以通過添加跳空線以下到您的開始for循環:

if not line: 
    continue 

在Python中,空字符串計算爲True布爾值。在這種情況下,這意味着空行會被跳過,因爲這個if語句只有在字符串爲空時才爲真。

該語句繼續意味着代碼將在循環的下一個循環中繼續。它不會在該語句之後執行代碼,這意味着您的代碼正在計數行被跳過。