我需要撰寫一個函式,它接受三道菜和一種指定的成分,如果所有菜都不含該成分,則輸出 true,如果其中任何一個都包含該成分,則輸出 false。輸入是選單,它是三個字串串列和指定的成分。我以為我做對了,直到我去測驗并失敗了。我不明白為什么?
我定義了我的功能如下 -
def free_from(test_menu:str, specified_ingredient: str):
if specified_ingredient in test_menu:
return(False)
else:
return(True)
失敗的測驗如下
test_menu = [ ['soup'],
['cheese'],
['water'] ]
expected_result = False
if free_from(test_menu, 'water') == expected_result:
#adjust the function call if necessary to match your implementation
print('Working')
else:
print('Failure')
我得到的輸出是“失敗”
uj5u.com熱心網友回復:
您的代碼中有多個錯誤:
- 回傳語法錯誤,應該是
return True - 如果任何一道菜沒有配料,它會立即回傳 False,不檢查其他菜
- 方法中的邏輯無法進行正確檢查,見下文
您正在遍歷串列串列,因此您所做的比較基本上是'water' in [['soup'], ['cheese'], ['water']],它只能回傳 false (因為water不是['water'])。所以我會按如下方式重寫你的函式:
def free_from(test_menu:str, specified_ingredient: str):
for dish in test_menu:
if specified_ingredient in test_menu:
return False
return True
編輯:此外,您的評論在您的條件之后沒有正確縮進
uj5u.com熱心網友回復:
您可以使用all,結合生成器理解:
test_menu = [['soup', 'watermelon'],
['cheese', 'tire'],
['water', 'chalk']]
def free_from(lst_menu, specified_ingredient):
return all(specified_ingredient not in menu for menu in lst_menu)
print(free_from(test_menu, 'water')) # False
print(free_from(test_menu, 'melon')) # True
print(free_from(test_menu, 'meteorite')) # True
uj5u.com熱心網友回復:
感謝您的提問。您需要在 if 中指定 not
def free_from(test_menu:str, specified_ingredient: str):
if specified_ingredient not in test_menu: ### You need to specify not
return False
else:
return True
test_menu = [ ['soup'],
['cheese'],
['water'] ]
expected_result = False
print(free_from(test_menu, 'water'))
if free_from(test_menu, 'water') == expected_result:
#adjust the function call if necessary to match your implementation
print('Working')
else:
print('Failure')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/338849.html
