[英]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.