if file is not None:
content = file.readlines()
if 'I' and 'J' in content:
display_oval()
else:
display_polygon()
在这种情况下,假设我打开了一个包含I&J的文件,我希望调用display_oval()
但它调用display_polygon()
,当我打开不包含I&J的文件时,display_polygon()
按预期调用。 当我用'I' or 'J'
替换'I' and 'J'
时,当我打开一个包含I&J的文件时,display_oval()
工作正常。但是当我打开不包含I&J的文件时,没有任何效果。 如果文件包含I&J,我想调用display_oval()
,否则display_polygon()
。怎么做?
你的代码有几个交叉的问题。
第一个问题是'I' and 'J' in content
被分组为('I') and ('J' in content)
,这肯定不是你想要的。一个字符串,如内容中的'I' is always truthy, so testing in that way is not useful. You probably mean
"I"和内容中的"J"。
但这还不足以修复您的代码(它使更少的输入匹配,而不是更多)。该条件仍然无法正常工作,因为您的content
是字符串列表,除最后一个字符串外,所有字符串都将换行符终止。在列表上完成时,in
运算符需要完全匹配,而不是像两个参数都是字符串时in
那样的子字符串匹配。
我不确定哪种修复程序最适合第二个问题。这取决于程序的逻辑和文件的内容。如果要测试I
和J
是否显示为文件中的单个行(每个行单独显示,在一行上没有其他字符),则可能需要使用现在使用的相同content
来测试'In' in content and 'Jn' in content
。另一方面,如果要检查大写I
并在文件文本中的任何位置J
字符,而不考虑行,则可能需要更改content
而不是更改匹配逻辑。使用content = file.read()
将整个文件读入单个字符串,而不是字符串列表。然后'I' in content
将执行子字符串搜索。