[英]Python - else statement is never triggered
我希望這是一個重復的問題,但我找不到答案。 對不起。
我編寫了一個簡單的函數,該函數應該返回一個空字符串或一個字符的字符串。 但是,有時它返回None。 即使它應與操作數之一匹配,並且如果不匹配,仍將輸出字符串。
baseconvert = digits+ascii_lowercase+"0"
def checker(operand, factorlist): # hardcoded interpreter of the calculus converted in base 10. i is equal to the base.
if (operand == '+'):
if (factorlist[0] + factorlist[1] == factorlist[2]):
return baseconvert[i]
elif (operand == '-'):
if (factorlist[0] - factorlist[1] == factorlist[2]):
return baseconvert[i]
elif (operand == '*'):
if (factorlist[0] * factorlist[1] == factorlist[2]):
return baseconvert[i]
elif (operand == '/'):
if (factorlist[0] / factorlist[1] == factorlist[2]):
return baseconvert[i]
else:
return ""
因此,在鍵入此帖子時,我發現可以刪除else語句:
# else: is not necessary
return ""
工作正常。 但是,我仍然想知道為什么從來沒有觸發過else語句。
PS:是否有更簡單的方法來解釋字符串,例如“ 10-7 = 3 ”以獲得布爾結果? 我是python的新手,什么也沒想。
以下代碼(帶參數不包含上下文)顯示無:
from string import digits, ascii_lowercase
baseconvert = digits+ascii_lowercase+"0"
def checker(operand, factorlist): # hardcoded interpreter of the calculus converted in base 10. i is equal to the base.
if (operand == '+'):
if (factorlist[0] + factorlist[1] == factorlist[2]):
return baseconvert[i]
elif (operand == '-'):
if (factorlist[0] - factorlist[1] == factorlist[2]):
return baseconvert[i]
elif (operand == '*'):
if (factorlist[0] * factorlist[1] == factorlist[2]):
return baseconvert[i]
elif (operand == '/'):
if (factorlist[0] / factorlist[1] == factorlist[2]):
return baseconvert[i]
else:
return ""
i=17
print(checker('+', [1987,222,2227]))
預期結果:
if (operand == "+")
為True。 if (factorlist[0] + factorlist[1] == factorlist[2])
為False。 else:
在第15行被調用。 我仍然想知道為什么沒有顯示我期望的這種行為,但是沒關系。 只使用一個return語句,而不使用else:
return語句else:
好的解決方案。
我還發現了以下作品,這些作品與我想要完成的工作最接近:
def checker(operand, factorlist): # hardcoded interpreter of the calculus converted in base 10. i is equal to the base.
if ((operand == '+') & (factorlist[0] + factorlist[1] == factorlist[2])):
return baseconvert[i]
elif ((operand == '-') & (factorlist[0] - factorlist[1] == factorlist[2])):
return baseconvert[i]
elif ((operand == '*') & (factorlist[0] * factorlist[1] == factorlist[2])):
return baseconvert[i]
elif ((operand == '/') & (factorlist[0] / factorlist[1] == factorlist[2])):
return baseconvert[i]
else:
return ""
我對所有解決方案都進行了多次計時,最終的解決方案似乎比使用if語句拆分和使用帶有一個返回值的變量要快15%。
您有if
子句嵌套在您的父if...elif
,當控件沒有從子句中流出時,它不會返回到else
(即,如果函數未通過任何嵌套的if退出,則執行在以下位置完成)函數的結尾)。 您應該在函數的末尾添加return以正確處理此問題,並避免返回默認的None
:
def checker(operand, factorlist):
if operand == '+':
if (factorlist[0] + factorlist[1] == factorlist[2]):
...
elif operand == '-':
if (factorlist[0] - factorlist[1] == factorlist[2]):
...
elif operand == '*':
if (factorlist[0] * factorlist[1] == factorlist[2]):
...
elif operand == '/':
if (factorlist[0] / factorlist[1] == factorlist[2]):
...
return ""
您也可以安全地刪除final else
因為final返回將充當函數中的全局返回默認值。
它是主觀的,但是許多人會說函數中只有一個return
值。 在這種情況下可以提供幫助。 問題是,如果另一個條件為True,則僅從每個elif
返回。 可以通過如下方式進行重構:
baseconvert = digits+ascii_lowercase+"0"
def checker(operand, factorlist):
# hardcoded interpreter of the calculus converted in base 10. i is equal to the base.
final_value = ""
if operand == '+':
if factorlist[0] + factorlist[1] == factorlist[2]:
final_value = baseconvert[i]
elif operand == '-':
if factorlist[0] - factorlist[1] == factorlist[2]:
final_value = baseconvert[i]
elif operand == '*':
if factorlist[0] * factorlist[1] == factorlist[2]:
final_value = baseconvert[i]
elif operand == '/':
if factorlist[0] / factorlist[1] == factorlist[2]:
final_value = baseconvert[i]
return final_value
請注意,在大多數情況下,您只需要在python中的條件前后加上括號即可,大多數情況下並不需要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.