2012-06-28 4 views
2

Je suis en train de mettre plusieurs conditions dans mon instruction if en Python comme ci-dessous:instruction if avec plusieurs conditions imbriquées

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. 

Fondamentalement, il est ou condition pour les deux h9 et h10 en même temps.
Cependant, cela ne fonctionne pas, et donne des erreurs comme:

IndentationError: unindent does not match any outer indentation level

Quel est le problème?

+0

Pourquoi n'utilisez-vous pas les listes? – Ryan

+0

Si c'est l'indentation, nous aurons besoin de plus de contexte ... –

+0

L'indentation et l'espace blanc sont [importants dans la façon dont Python interprète un script] (https://en.wikipedia.org/wiki/Python_ (programming_language) #Indentation). Vous devez vous assurer que vous avez des onglets dans les espaces appropriés, un éditeur qui le fait pour vous est vraiment utile. –

Répondre

8

Aucune idée de l'erreur d'indentation sans plus de contexte, mais voici quelque chose que vous pouvez faire pour l'if état plus court:

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

En outre, vous devriez vraiment utiliser des noms de variables plus descriptives.


Oh, et si vous avez beaucoup d'éléments et l'intention de faire beaucoup de recherche, vous pouvez favoriser des jeux:

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

un peu plus rapide serait 'lst = set ([h1, h2, h3, h4, h5, h6, h7, h8])' –

+1

@PhilCooper Un peu lent, mon ami :-) –

+0

:-) vous êtes bon –

0

Il n'y a pas de problème d'indentation ici. Je suppose qu'il y a un problème d'indentation à l'intérieur do sth..

0

Une autre option est:

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

@PlatinumAzure J'utilise des ensembles: O (1) recherche – JBernardo

+0

@PlatinumAzure: Non, il crée un ensemble dans les versions les plus récentes de Python. – Ryan

+0

Merde. J'utilise toujours 2.6, désolé. –

4

Si vous devez utiliser de longues conditionals, vous pouvez joindre votre entière si la condition entre parenthèses, vous pouvez le mettre sur plusieurs lignes sans erreurs d'indentation.

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