簡體   English   中英

程序忽略if​​語句,並在False時打印True

[英]program ignoring if statement, and printing True when False

我正在編寫一個用於解決家庭作業問題的簡單程序,它似乎正在跳過我的if語句。 我看了提出的其他問題,那里的問題似乎不是我的問題,因此希望您能提供幫助。

def isWordGuessed(secretWord, lettersGuessed):
if lettersGuessed == []:
    return False
else:
    for i in lettersGuessed:
        if i in secretWord == False:
            return False

        else:
            if i == lettersGuessed[-1]:
                return True

當我放置一些打印功能以查看其功能時,它會完全跳過

if i in secretWord == False:

我已經放在這條線的正上方

print i in secretWord

並且它將打印出正確的布爾值,但是即使它輸出False,它仍然會跳過if語句。 我覺得我必須忽略一些非常基本的內容,但是我似乎無法弄清楚它的含義,因此,我們將不勝感激。 謝謝

編輯:

這是一個使用輸入調用此函數的示例

isWordGuessed('apple',['a','e','i','k','p','r','s'])
        if i in secretWord == False:

這並沒有按照您的想法做。 如果要在i不在secretWord時采用此路徑,則需要

        if i not in secretWord:

您所擁有的進行鏈式比較 首先,它檢查

i in secretWord

如果是這樣,那么它將檢查

secretWord == False

如果這是真的(不是),則采用if路徑。

if i in secretWord == False:if i not in secretWord替換為if i in secretWord == False: if i not in secretWord替換為

這樣做是否會一樣:

``

def isWordGuessed(secretWord, lettersGuessed):

if not lettersGuessed:
    return False
for i in lettersGuessed:
    if i not in secretWord:
        return False
return True

您所做的稱為鏈式比較。

編輯:我不好,為時已晚

丹尼爾(BR Daniel)

其他答案很好地解釋了代碼中的錯誤,但是您可以像下面這樣簡化代碼:

def isWordGuessed(secretWord, lettersGuessed):
    for i in lettersGuessed or ['_']: # uses ['_'] when lettersGuessed = []
        if not i in secretWord:
            return False
    return True

您也可以使用生成器表達式和all()執行此操作:

def isWordGuessed(secretWord, lettersGuessed):
    return all([i in secretWord for i in lettersGuessed] or [False])

暫無
暫無

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

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