gpt4 book ai didi

python - 在循环中循环而不是通过读取文件 Python3 重新循环

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

尝试编写一段代码来查找文本文件中所有特定类型的字符对于元音,它会找到 a 的所有数量,但不会通过文本重新循环以读取 e。帮助?

def finder_character(file_name,character):

in_file = open(file_name, "r")

if character=='vowel':
brain_rat='aeiou'
elif character=='consonant':
brain_rat='bcdfghjklmnpqrstvwxyz'
elif character=='space':
brain_rat=''
else:
brain_rat='!@#$%^&*()_+=-123456789{}|":?><,./;[]\''

found=0
for line in in_file:
for i in range (len(brain_rat)):
found += finder(file_name,brain_rat[i+1,i+2])


in_file.close()
return found

def finder(file_name,character):
in_file = open(file_name, "r")
line_number = 1
found=0
for line in in_file:
line=line.lower()
found +=line.count(character)
return found

最佳答案

如果您想使用您的原始代码,您必须将文件名传递给 finder() 函数,并在那里为您正在测试的每个字符打开文件。

原因是文件对象 (in_file) 是一个生成器,而不是一个列表。生成器的工作方式是,它会在您每次调用它们的 next() 方法时返回下一个项目。当你说

for line in in_file:

只要 next() 方法“返回”(它实际上使用关键字 yield,但暂时不要考虑)一个值。当生成器不再返回任何值时,我们说生成器已耗尽。您不能重复使用耗尽的发电机。如果你想重新开始,你必须制作一个新的发电机。

我允许自己重写您的代码。这应该会给你想要的结果。有什么不明白的请追问!

def finder_character(file_name,character):

with open(file_name, "r") as ifile:
if character=='vowel':
brain_rat='aeiou'
elif character=='consonant':
brain_rat='bcdfghjklmnpqrstvwxyz'
elif character=='space':
brain_rat=' '
else:
brain_rat='!@#$%^&*()_+=-123456789{}|":?><,./;[]\''

return sum(1 if c.lower() in brain_rat else 0 for c in ifile.read())

测试.txt:

eeehhh
iii!#
kk ="k
oo o

输出:

>>>print(finder_character('test.txt', 'vowel'))
9
>>>print(finder_character('test.txt', 'consonant'))
6
>>>print(finder_character('test.txt', 'space'))
2
>>>print(finder_character('test.txt', ''))
4

如果您在理解 return 行时遇到问题,应该倒着读,像这样:

Sum this generator:
Make a generator with values as v in:
for row in ifile.read():
if c.lower() in brain_rat:
v = 1
else:
v = 0

如果你想了解更多关于生成器的知识,我推荐Python Wiki page

关于python - 在循环中循环而不是通过读取文件 Python3 重新循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19670787/

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