这是来自Think Python。试图浏览文件的每一行(每行一个单词),只打印出不包含字母e的每个单词。 我花了4个小时尝试不同的方式通过我的函数过滤文件,但我放弃了。似乎它只过滤掉它在一个单词中找到的第一个:如果一个单词有两个e而不是它打印它无论如何。
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
时它会变得混乱如果有办法让我的代码更短,请告诉我:]
答案 0 :(得分:4)
with open(filename) as f:
for line in f:
if not 'e' in line: print line.strip()
一些意见:
word = line.strip()
使您的代码无法读取。使用line = line.strip()
(您只会使用line
或word
,而不是两者,我认为那么为什么你的代码不起作用?
for letter in word:
if letter == 'e':
continue
print word
在这里,您将单词分成字母,然后检查字母是否等于e
。如果不是这种情况,则打印该单词,否则跳转到下一个字母。因此,您可以多次打印该字,因为字母与“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 :(得分:0)
看起来pfnuesel认为代码在他写道时没有工作的主要原因是:
"在这里你将单词分成字母,然后你检查是否 字母等于e。如果情况并非如此,则打印单词, 否则你跳到下一个字母。所以你打印这个词就多了 因为有些字母不同于'。"
这就是我在Think 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