我目前正在第二门Python课程中,在我们的综述热身中,我被一个看似简单的问题所困扰。声明方式如下:
在本练习中,您的函数将接收1个参数,即文本文件的名称。该函数将返回一个字符串,该字符串是通过将每行的第五个字符连接成一个字符串而创建的。如果该行少于5个字符,则应跳过该行。在查找第五个字符之前,应删除所有行的开头和结尾空格。
CodeGrinder然后根据随机生成的.txt文件对其进行分级。这是我当前拥有的代码:
def fifthchar(filename):
file = open(filename)
fifthstring = ''
for x in file:
x.strip('\n ')
if len(x) >= 5:
fifthstring += x[4]
else:
pass
fifthstring.strip('\n ')
return fifthstring
返回错误:
[AssertionError:False is not true:thirdchar(rprlrhya.txt)返回了mylgcwdnbi
dmou。它应该返回了mylgcwdnbidmou。检查您的逻辑,然后重试。
似乎换行符正在通过我的.strip()
潜入,但我不确定如何删除它们。我以为.strip()
会删除\n
,并且我已经尝试了从.rstrip()
到fifthstring.join(fifthstring.split())
的所有操作,并在剥离循环中的第五字符串和x时具有冗余性。这些换行符如何通过?
您的解决方案未考虑以下几点:
这是您的解决方案:
def fifthchar(filename):
file = open(filename)
fifthstring = ''
for x in file:
x = x.strip()
if len(x) >= 5:
fifthstring += x[4]
else:
pass
fifthstring.strip('\n ')
return fifthstring
这里是另一个:
def fifth(filename):
with open(filename) as f:
string = ''
for line in f.readlines():
l = line.strip()
string += l[4] if len(l) >= 5 else ''
return ''.join(string)
与使用列表理解之前相同:
def fifth(filename):
with open(filename) as f:
string = [line.strip()[4] if len(line.strip()) >= 5 else '' for line in f.readlines()]
return ''.join(string)
这应该起作用:
def fifthchar(filename):
with open(filename) as fin :
return ''.join( line.strip()[4] if len(line.strip()) > 4 else '' for line in fin.readlines() )