簡體   English   中英

Python:不明白區別

[英]Python: don't understand difference

對於我對 python 的理解和我的英語,我真的很抱歉。 我剛開始學習 Python 真的不明白下兩個代碼之間的區別:

def arrayCheck(nums):
    """
    find nums
    """
    for i in range(len(nums)-2):
        if nums[i]==1 and nums[i+1]==2 and nums[i+2]==3:
            return True
            return False

result = arrayCheck([1, 1, 2, 3, 1])
print(result)

運行此代碼時,結果為 True

下一個:

def arrayCheck(nums):
    """
    find nums
    """
    for i in range(len(nums)-2):
        if nums[i]==1 and nums[i+1]==2 and nums[i+2]==3:
            return True
        else:
            return False

result = arrayCheck([1, 1, 2, 3, 1])
print(result)

第二個代碼返回 False。

為什么? 提前致謝。

第一個代碼只能返回TrueNone 在 return 語句之后 function 結束,因此第一個代碼永遠不會到達return False語句。 如果前 3 個項目不是 1、2 和 3,則第二個代碼將返回False ,因為如果條件不成立,則返回False

我實際上會假設這是您感興趣的代碼 -

def arrayCheck(nums):
    """
    find nums
    """
    for i in range(len(nums)-2):
        if nums[i]==1 and nums[i+1]==2 and nums[i+2]==3:
            return True
    return False

請參閱此處的 Python 控制流程。

在 python 中,縮進很重要,返回將打破 function 所以,在第一個代碼塊中你有

if nums[i]==1 and nums[i+1]==2 and nums[i+2]==3:
   return True
   return False

兩個return處於相同的縮進級別,因此如果滿足條件,它將 go 到第一行, return True ,查看返回並突破 function 之后忽略所有內容,但在第二個代碼塊中你有

if nums[i]==1 and nums[i+1]==2 and nums[i+2]==3:
   return True
else:
   return False

因此,如果條件為真,它將返回真並突破 function 但如果條件不真,它將返回假並突破 function,因此它只執行您嘗試執行的迭代之一。

如果我理解您要正確執行的操作,這將是解決方案:

def arrayCheck(nums):
    """
    find nums
    """
    found = False
    for i in range(len(nums)-2):
        if nums[i]==1 and nums[i+1]==2 and nums[i+2]==3:
            found = True
    return found

result = arrayCheck([1, 1, 2, 3, 1])
print(result)

這是有效的,因為它允許 function 檢查 for 循環中的每次迭代,如果找到數字,它將返回 true

在第一個代碼中, if條件沒有 else 部分。 在第二個代碼中, if條件有一個 else 部分。 因此,第一個代碼中的條件為假時,它將進行第二次迭代,並且如果條件根據輸入為真,則返回真。 但是在第二個代碼中,如果條件為假,它將進入 else 部分並返回 False。

在第一個代碼中return False永遠不會執行,因為它在 if 條件內,並且在它之前另一個return語句return True 返回 function 后,執行將停止。

在第二個代碼中,如果條件第一次失敗,function 執行將停止,因為在 else 條件下return False

暫無
暫無

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

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