我正在编写一个函数,如果文件中的每一行左对齐,则返回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
答案 0 :(得分:3)
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)
然后,它读起来与自然语言非常相似。
答案 1 :(得分:1)
你应该使你的conditional-if
短路;看来只要文件中的最后一行合理,结果就会设置为True。另外,检查空格并不完全有效,但是你可以使用像.isspace()这样的函数来检查你传递的子字符串中的空格。最后,请注意您获得的子字符串实际上包含2个字符,而不是一个字符。
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
答案 2 :(得分:0)
您可能希望在支票中考虑除空格之外的空白字符:
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
)(因此两个\r\n
)都不合理。如果您想忽略空行,可以从集合中删除相关字符:
whitespace = set(string.whitespace) - {'\n', '\r'}