2014-01-26 37 views
2

即時通訊讀取一個txt文件,並計算文件中特定單詞的次數。例如,我想知道「ABC」和「DEF」有多少次。我的第一個想法是:我可以使用邏輯運算符「或」與字符串組合嗎?

for line in open: 
    if "ABC" or "DEF" in line: 
     x=x+1 

結果是x = 33 ...但那是錯的。 使用:

for line in open: 
    if "ABC" in line: 
     x=x+1 
    if "DEF" in line: 
     x=x+1 

結果是8!那是正確的。

爲什麼第一個例子不起作用?

+0

ouh是的,看起來相似,爲問題提供... – Hubschr

回答

2
"ABC" or "DEF" in line 

作爲

("ABC") or ("DEF" in line) 

被評估由於"ABC"是truthy值,如果條件將得到滿足總是。你可以解決這個問題,這樣

if "ABC" in line or "DEF" in line: 

將像

("ABC" in line) or ("DEF" in line) 

所以進行評估,如果線路有兩種ABCDEF,條件將得到滿足。

如果要檢查的有效字數很大,編寫冗長的if條件會很不方便。取而代之的是,你應該寫這種條件下,與any功能,這樣

valid_words = ["ABC", "DEF"] 
... 
if any(word in line for word in valid_words): 

建議:

  1. 避免使用open作爲變量名,因爲它會影內建open功能

  2. 當你在處理文件時,確保你的文件爲close the opened files properly or prefer to use with statement

+0

或分發關係運算符。 –

+0

@ IgnacioVazquez-Abrams謝謝:)我把這個包括在答案 – thefourtheye

+0

thx很多!我沒有使用「打開」作爲我的程序中的變量名稱,我只是在這裏使用它,但thx的建議。是的,在我的程序中我也關閉了我的文件:D我將使用任何函數。非常感謝:D – Hubschr