我试图从一个文件" input.txt'中读取,一次一行,为每行编号。然后,我需要检查每一行,看看该行中的字母是否可用于制作“aardvark”字样。也可以使用大写字母,并且字母可以在整个行中传播。文本文件的内容是:
No aardv*rks here!
Only armadillos and anteaters.
Animals are run down: very awful road kill.
I prefer a quick guacamole made from avocados.
因此,第3行和第4行只应返回正数,例如第3行和第34行的" Aardvark。
我已经走到了这一步 - 而且我被卡住了!
file = open('input.txt').read().lower()
listed = file.split('\n')
for sentence in listed:
a = sentence.count('a')
r = sentence.count('r')
d = sentence.count('d')
v = sentence.count('v')
k = sentence.count('k')
if a==3 and r==2 and d==1 and v==1 and k==1:
print('Aardvark on line '+listed[sentence])
请理解我正在通过初学者教程进行工作,所以没有任何狂野和花哨的功能会让我的小脑袋变得脆弱!
非常感谢您的期待。
修改
这是最终有效的解决方案。非常感谢你的贡献!
file = open('input.txt').read().lower()
listed = file.split('\n')
for index, sentence in enumerate(listed):
a = sentence.count('a')
r = sentence.count('r')
d = sentence.count('d')
v = sentence.count('v')
k = sentence.count('k')
if a>=3 and r>=2 and d>=1 and v>=1 and k>=1:
print('Aardvark on line '+str(index+1))
答案 0 :(得分:0)
open('input.txt').read()
将文件的全部内容读入内存。因此,如果input.txt
是一个足够长的文件,计算机将耗尽其可用内存。相反,尝试使用文件迭代器一次读取一行,例如
for i,listed in enumerate(open('input.txt')):
sentence = listed.lower()
a = sentence.count('a')
# ... etc.
另见In Python, why do we need readlines() when we can iterate over the file handle itself?。
答案 1 :(得分:0)
for n, line in enumerate(open('input.txt')):
letters = list('aardvark')
for c in line.lower():
if c in letters:
letters.remove(c)
if not letters:
print('Aardvark on line', n + 1)
答案 2 :(得分:0)
我知道这是一个旧线程,但是对于那些通过Grok进行此任务的人,以下代码仅使用本课程到目前为止所学的内容。希望您觉得有用!
count = 0
with open('input.txt') as f:
for line in f:
count += 1
l = line.lower()
a = l.count('a')
d = l.count('d')
k = l.count('k')
r = l.count('r')
v = l.count('v')
if a >= 3 and d >= 1 and k >= 1 and r >=2 and v >=1:
print('Aardvark on line', count)