我正在编写一个函数,如果文件中的每一行都左对齐,则返回true,即第一个字符是空格以外的东西。这是我的代码,有人能告诉我我在哪里犯了错误,或者我应该如何做这个函数,这是我到目前为止所做的:
my_file = open("ex4.py", 'r')
def justified(my_file):
for line in my_file:
if(line[0:2] == ' '):
result = False
else:
result = True
return result
line[0:2] == ' '
检查前两个字符。根据你的描述,你想检查第一个字符,如line[0] == ' '
.
而且,找到一个后不需要再读更多。否则,您可以重写它。
def justified(my_file):
return not any(line[0] == ' ' for line in my_file)
更新:正如注释所指出的,我们可以这样写:
def justified(my_file):
return not any(line.startswith(' ') for line in my_file)
然后,它读起来和自然语言非常相似。
你应该短路你的conditional-if
;看起来,只要文件中的最后一行是正确的,结果就会被设置为True。此外,您对空格的检查并不完全有效,但您可以使用.isspace()之类的函数来检查您传递的子字符串中的空白。最后,请注意,您正在获取的子字符串实际上包含两个字符,而不是一个。
my_file = open("ex4.py", 'r')
def justified(my_file):
for line in my_file:
if line[0:1].isspace():
return False
return True
这样做的好处是,一旦我们知道它不是左对齐的,就不必解析整个文件。
或者,您可能会发现在处理文件时使用此设置很方便,因为它会为您关闭文件。
with open("ex4.py", 'r') as file:
for line in file:
if line[0:1].isspace():
return False
return True
您可能希望在检查中考虑空白字符而不仅仅是空格:
import string
whitespace = set(string.whitespace)
def justified(f):
for line in f:
if line[0] in whitespace:
return False
return True
一旦找到以空格开头的行就返回。
可以简化为以下代码:
def justified(f):
return not any(line[0] in whitespace for line in f)
这将处理空行,即以新行(n
)开头的行,回车(r
)(以及随后的rn
)为未对齐。如果想忽略空行,可以从集合中删除相关字符:
whitespace = set(string.whitespace) - {'n', 'r'}