J'essaye de vérifier si une liste n'a aucun membre comme opérateur booléen AND, OR, NOT.
J'utilise:
while ('AND' and 'OR' and 'NOT') not in list:
print 'No boolean operator'
Cependant, lorsque mon entrée est: a1 c2 OR c3 AND
, il affiche "Aucun opérateur booléen", ce qui signifie que cette liste n'est considérée comme aucun opérateur booléen en utilisant la phrase de boucle ci-dessus.
J'espère que quelqu'un peut aider à corriger.
Merci, Cindy
L'utilisation de sets
criera rapidement si vous avez un volume de données
Si vous êtes prêt à utiliser des ensembles, vous avez la méthode isdisjoint()
qui vérifiera si l'intersection entre votre liste d'opérateurs et votre autre liste est vide.
MyOper = set(['AND', 'OR', 'NOT'])
MyList = set(['c1', 'c2', 'NOT', 'c3'])
while not MyList.isdisjoint(MyOper):
print "No boolean Operator"
and
ing strings ne fait pas ce que vous pensez faire - utilisez any pour vérifier si l'une des chaînes se trouve dans la liste:
while not any(Word in list_of_words for Word in ['AND', 'OR', 'NOT']):
print 'No boolean'
De plus, si vous voulez une vérification simple, un if
pourrait être mieux adapté qu'un while
...
L'expression 'AND' and 'OR' and 'NOT'
vaut toujours 'NOT'
, donc vous faites effectivement
while 'NOT' not in some_list:
print 'No boolean operator'
Vous pouvez soit vérifier séparément pour chacun d'eux
while ('AND' not in some_list and
'OR' not in some_list and
'NOT' not in some_list):
# whatever
ou utilisez des ensembles
s = set(["AND", "OR", "NOT"])
while not s.intersection(some_list):
# whatever
L'expression ('AND' and 'OR' and 'NOT')
évalue à 'NOT'
, donc vous testez si la liste n'a PAS ou non.
while not any( x in ('AND','OR','NOT') for x in list)
ÉDITER:
merci pour les upvotes, mais la solution d'etarion est meilleure car elle teste si les mots AND, OR, NOT sont dans la liste, soit 3 tests.
Le mien fait autant de tests qu'il y a de mots dans la liste.
EDIT2:
Il y a aussi
while not ('AND' in list,'OR' in list,'NOT' in list)==(False,False,False)
Dans ton cas, ('AND' and 'OR' and 'NOT')
évalue à "NOT"
, qui peut ou non être dans votre liste ...
while 'AND' not in MyList and 'OR' not in MyList and 'NOT' not in MyList:
print 'No Boolean Operator'
Si je comprends bien la question, vous recherchez quelque chose comme ceci:
>>> s = "a1 c2 OR c3 AND"
>>> boolops = ["AND", "OR", "NOT"]
>>> if not any(boolop in s for boolop in boolops):
... print "no boolean operator"
...
>>> s = "test"
>>> if not any(boolop in s for boolop in boolops):
... print "no boolean operator"
...
no boolean operator
>>>
Ce n'est pas comme ça que ça marche.
Ce bit ('AND' and 'OR' and 'NOT')
sera évalué comme 'NOT'
. Donc votre code équivaut à ::
sans 'NOT' dans la liste: print 'No boolean operator'
Vous pouvez essayer ceci:
while not set ('AND' and 'OR' and 'NOT'). union (list): print 'Pas d'opérateur booléen'