簡體   English   中英

如何解決在 python 中調用函數的 if-else 問題?

[英]how to fix if-else problem in calling functions in python?

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 'I' or 'J'替換'I' and 'J' ' 時,當我打開一個包含 I&J 的文件時, display_oval()工作正常。 但是當我打開不包含 I&J 的文件時,沒有任何效果。 如果文件包含 I&J,我想調用display_oval() display_polygon()否則調用 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' is always truthy, so testing in that way is not useful. You probably mean內容中的“I”和內容中的“J”。

但這還不足以修復您的代碼(它使更少的輸入匹配,而不是更多)。 該條件仍然無法正常工作,因為您的content是一個字符串列表,除了最后一個字符串之外,所有字符串都將被換行符終止。 當在列表上完成時, in運算符期望完全匹配,而不是 substring 匹配,就像 arguments 都是字符串in那樣。

我不確定哪種修復最適合第二個問題。 這取決於程序的邏輯和文件的內容。 如果您想測試IJ是否在文件中顯示為單獨的行(每行單獨顯示,在沒有其他字符的行上),您可能需要測試'I\n' in content and 'J\n' in content使用您現在使用的相同content 另一方面,如果您想檢查文件文本中任何地方的大寫IJ字符,而不考慮行,那么您可能需要更改content而不是更改匹配邏輯。 使用content = file.read()將整個文件讀入單個字符串,而不是字符串列表。 然后'I' in content將執行 substring 搜索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM