如何解决在 Python 中调用函数时的 if-else 问题?


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那样的子字符串匹配。

我不确定哪种修复程序最适合第二个问题。这取决于程序的逻辑和文件的内容。如果要测试IJ是否显示为文件中的单个行(每个行单独显示,在一行上没有其他字符),则可能需要使用现在使用的相同content来测试'In' in content and 'Jn' in content。另一方面,如果要检查大写I并在文件文本中的任何位置J字符,而不考虑行,则可能需要更改content而不是更改匹配逻辑。使用content = file.read()将整个文件读入单个字符串,而不是字符串列表。然后'I' in content将执行子字符串搜索。

最新更新