簡體   English   中英

Python-永遠不會觸發else語句

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

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