2015-06-22 10 views
1

這個問題可以用獨立於語言的方式提出,但是我在python環境中提出要求,因爲不同的語言會有不同的細微差別。如何製作嵌套的IF語句整理器

我認識到這與this question類似,但我認爲我不同,因爲我在詢問如何將兩個條件放在與&相同的if語句中會產生錯誤的情況。

假設我想看看abc[x]是否等於「魚」,但我們假設我不確定len(abc)是> = x。我不能只有if abc[x]=='fish',因爲它可能是索引超出範圍。因此我需要做

if len(abc)>x: 
    if abc[x]=='fish': 
     dostuff 
    else: 
     dootherstuff 
else: 
    dootherstuff 

有一個更清潔的方式來做到這一點,我沒有那麼最終會做同樣的dootherstuff 2條else語句?如果我想改變什麼dootherstuff晚於我必須在兩個地方改變它,但到那時我可能會忘記。當然,我可以嘗試對代碼發表評論,稍後再提醒自己,或者讓dootherstuff成爲功能,但這似乎仍然是第二好的。很多時候,當我這樣做時,dootherstuff只是一行代碼,所以使它成爲函數並不會感覺好多少,即使它解決了後續的更改場景。

+0

怎麼樣一試-除?一般來說,速度也會更快,如果長度在大部分時間內都處於界限內。 – Rishav

+0

['和'](https://en.wikipedia.org/wiki/Short-circuit_evaluation)是Python中的短路操作符 - 它聽起來非常適合您的目的。備用建議:嘗試「if all()」:'if all([condition1,condition2])' – paulsm4

+0

wrap-around try-except只是替換外部的if-else,而我仍然最終執行'dootherstuff'兩次。 –

回答

4

當然,在這裏它是:

if len(abc) > x and abc[x] == 'fish': 
    dostuff 
else: 
    dootherstuff 

and短路,所以abc[x] == 'fish'將僅len(abc) > xTrue評估。大多數語言都有類似的操作符(例如C中的&&)。

&是按位「和」,並且不短路,所以不要使用它。

+0

啊,打我吧:) – Cosine

+0

@ kindall,如果'x'恰好是'len(abc)',當'abc [x] =='魚時這不會導致索引超出範圍''被選中,因爲len(abc)> = x'的值爲真? – Alejandro

+0

是的,但它與原來的問題相同。 – kindall

2

您肯定可以將這兩個條件與邏輯運算符and結合起來。大多數(如果不是全部的話)現代編程語言使用short circuit evaluation,包括Python。即,一步一步地表達過程,並且不評估它們不需要的部分。在這裏,如果and表達的左側是False,整個事情會False,而且也沒有必要評價在右側,所以,這樣的事情是完全安全:

if len(abc)>=x and abc[x]=='fish': 
    dostuff 
else: 
    dootherstuff