gpt4 book ai didi

python - 来自 Think Python 的 has_no_e() 练习

转载 作者:太空宇宙 更新时间:2023-11-04 10:46:33 24 4
gpt4 key购买 nike

这是来自 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()

顺便说一句,我的代码是缩进的,我认为当我 ctrl + v 时它会搞砸

如果有办法缩短我的代码,请告诉我:]

最佳答案

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

一些评论:

  • 在处理文件时使用 with,虽然它是 python 中较新的构造,但它可以帮助您管理文件(即不再需要时再次关闭它)
  • word = line.strip() 使您的代码可读性不佳。使用 line = line.strip()(我假设您只会使用 lineword,不能同时使用两者)

那么为什么您的代码不起作用?

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

在这里,您将单词拆分为多个字母,然后检查字母是否等于 e。如果不是这种情况,则打印该词,否则跳至下一个字母。因此,您打印单词的次数与与“e”不同的字母的次数一样多。

解决这个问题的一种方法是定义一个 bool 值,它会告诉您单词中是否有 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

关于python - 来自 Think Python 的 has_no_e() 练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16917904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com