2012-06-28 212 views
2

我試圖把多個條件,我在Python的if語句象下面這樣:if語句嵌套多個條件

if (h9 == h1 or h9 == h2 or h9 == h3 or h9 == h4 or h9 == h5 or h9 == h6 or h9 == h7 or h9 == h8) and (h10 == h1 or h10 == h2 or h10 == h3 or h10 == h4 or h10 == h5 or h10 == h6 or h10 == h7 or h10 == h8) : 
    do sth. 

基本上它是一個或兩者兼有h9h10在同一時間條件。
然而,這並不工作,並給出了這樣的錯誤:

IndentationError: unindent does not match any outer indentation level

什麼問題?

+0

爲什麼不使用列表? – Ryan

+0

如果是縮進,我們將需要更多的上下文... –

+0

縮進和空白區[對Python如何解釋腳本很重要](https://en.wikipedia.org/wiki/Python_(programming_language)#Indentation)。你需要確保你在正確的空間中有標籤,一個編輯器爲你提供幫助是非常有幫助的。 –

回答

8

不知道約沒有更多的情況下縮進錯誤,但這裏的東西可以做,以使if條件更短:

lst = [h1, h2, h3, h4, h5, h6, h7, h8] 
if h9 in lst and h10 in lst: 
    pass 

此外,你應該使用更具描述性的變量名。


哦,如果你有很多的元素,並計劃做了很多的搜索,你可能有利於集:

s = set([h1, h2, h3, h4, h5, h6, h7, h8]) # {h1, h2, h3, ...} in Python 3.x 
if h9 in s and h10 in s: 
    pass 
+0

稍微快一點就會'lst = set([h1,h2,h3,h4,h5,h6,h7,h8])' –

+1

@PhilCooper有點慢,我的朋友:-) –

+0

:-)你好 –

0

這裏沒有壓痕問題。 我想在do sth.裏面有一個縮進問題。

0

另一種選擇是:

if any(h in {h1,h2,...} for h in (h9, h10)): 
+0

@PlatinumAzure我正在使用集合:O(1)搜索 – JBernardo

+0

@PlatinumAzure:不,它會在更新的Python版本中創建一個集合。 – Ryan

+0

該死的。我仍然在使用2.6,對不起。 –

4

如果必須使用長條件語句,你可以附上你的整個如果在括號中的條件,你可以把它放在多行不縮進錯誤。

a = 2 
b = 2 
if ((a == 1 or a == 2) and 
     (b == 1 or b == 2)): 
    print "hello"