这是来自Think Python的。我试着检查文件的每一行(每行一个单词),只打印出不包含字母e的每个单词。我花了大约4个小时通过我的函数尝试不同的方法来过滤文件,但我放弃了。它似乎只过滤掉它在一个单词中找到的第一个e:如果一个单词有两个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()
我的代码是缩进的btw,我想当我按ctrl +v的时候会搞砸。
如果有什么方法可以缩短我的代码,请让我知道:]
发布于 2013-06-04 12:36:11
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
发布于 2014-08-24 19:35:45
看起来pfnuesel在写下代码的时候,仔细检查了代码不能工作的主要原因:
“在这里,您将单词拆分成字母,然后检查字母是否等于e。如果不是这样,则打印单词,否则跳到下一个字母。因此,您打印单词的次数与字母‘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
https://stackoverflow.com/questions/16917904
复制相似问题