2013-06-04 55 views
1

這是Think Python提供的。嘗試遍歷文件的每一行(每行一個單詞),並只打印出不包含字母e的每個單詞。 我花了4個小時嘗試不同的方式來通過我的函數過濾文件,但我放棄了。它似乎只是過濾出它在單詞中找到的第一個e:如果一個單詞有兩個e,反正它出來了。has_no_e()練習來自Think Python

def has_no_e(): 
    file_name = raw_input('Enter the full path and file name: ') 
    fin = open(file_name) 
    line = fin.readline() 

    for line in fin: 
     word = line.strip() 
     print word 
     for letter in word: 
      if letter == 'e': 
       continue 
      print word 




    has_no_e() 

我的代碼順便說一句縮進,我覺得它攪亂了,當我CTRL + V

如果有一種方法可以讓我的代碼更短,請讓我知道:]

回答

4
with open(filename) as f: 
    for line in f: 
     if not 'e' in line: print line.strip() 

一些評論:

  • 使用與處理文件時,雖然它是一個新的python結構,它可以幫助你管理你的文件(即關閉它當不再需要時獲得)
  • word = line.strip()使您的代碼不太可讀。使用line = line.strip()(你將只使用兩種lineword,而不是兩個,我假設)

那麼,爲什麼你的代碼不能正常工作?

for letter in word: 
    if letter == 'e': 
     continue 
    print word 

在這裏,您將拆分成詞的字母,那麼你檢查信件等於e。如果不是這樣,你打印這個單詞,否則你跳到下一個字母。所以你打印這個單詞的次數是不同於'e'的。

來解決,這將是定義一個布爾值,它會告訴你,如果有在單詞一封道:

hasE = False 
for letter in word: 
    if letter == 'e': 
     hasE = True 
     break 
if not hasE: print word 

注意,Python的也有解決這樣的問題,一個奇特的方式:

for letter in word: 
    if letter == 'e': break 
else: 
    print word 
+1

甜感謝心靈解釋爲什麼我的代碼不工作,但? – KOME

+0

謝謝你。布爾例子幫了很多。 – KOME

0

看起來pfnuesel走過去的主要原因時,他寫的代碼是不工作:

「在這裏你分割在W或者寫入它的字母,然後檢查 字母是否等於e。如果不是這種情況,則打印單詞 ,否則您跳到下一封信。所以你打印字多達 倍有字母從「E」不同「

這裏是我認爲Python解決運動9.2的方式:!

def has_no_e(word): 
    return "e" not in word 

fin = open('words.txt') 

for line in fin: 
    word = line.strip() 
    if has_no_e(word): 
     print word