2012-06-28 199 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"