0
votes

Vérifier si une condition est respectée instantanément

J'ai un projet complexe et je vais essayer de simplifier l'un des principaux problèmes du projet. Il y a donc la simplification: Nous pouvons imaginer une boucle while comme celle-ci:

while(condition):
     statement1
     statement2
     statement3
     ...
     statementn

Dans cette boucle, il y a n instructions, et chaque instruction peut être n'importe quoi (fonction, boucle, instruction if, ...) et il y a une condition dans la boucle, cette condition je veux la vérifier AVANT que la boucle while le fasse. Car si la condition est respectée depuis la première instruction je dois attendre la fin du while pour vérifier si la condition est respectée ... Donc il y a ma question est possible de vérifier la condition AVANT la boucle sans avoir une fonction de contrôle entre CHAQUE instructions du whileloop?

Parce qu'en fait, ça marche ... MAIS le code n'est pas clair, je pense vraiment que de cette façon on pollue mon code et je veux travailler plus efficacement et avec un beau code, alors comment puis-je résoudre mon problème sans cette contrainte?

PS: je pense à un écouteur d'événement comme javascript mais j'ai trouvé de mauvaises informations à leur sujet sur python, mais s'il y a un outil qui agit comme un événement auditeur, ce serait génial!


0 commentaires

3 Réponses :


0
votes

Je ne sais pas si je vous comprends bien, mais voici ce que je ferais:

flag = False
while not flag:
    for i in range(4):
        a = random.randint(1, 5)
        if a == 4:
            flag = True
            break


1 commentaires

Votre code est probablement bon et fonctionne dans ce cas, mais je pense que je vais apporter plus de précision dans mon sujet



0
votes

Je ne sais pas exactement ce qu'il se passe avec "a" mais si si vous pouvez enchaîner les conditions et s'arrêtera lorsque la première échoue

while(a!=5):
  for item in range(1, 5):
    a=random.randint(1,5)
    if a==5:
       break

Si vous pouvez boucler la génération de valeurs aléatoires que vous pouvez utiliser

while(checkRandom()):
   ...
def checkRandom(a):
   return random.randint(1,5) == 5 and random.randint(1,5)....


2 commentaires

Votre code est probablement bon et fonctionne dans ce cas, mais je pense que je vais apporter plus de précision dans mon sujet


Essayez peut-être d'être plus descriptif avec le code afin que nous puissions mieux comprendre.



1
votes

Il semble que vous vouliez nettoyer toutes vos instructions if-then-break en une seule fonction qui gère la "vérification" de la valeur de a . Pour cela, vous pouvez utiliser des exceptions:

import random

class ItIsFiveException(Exception): pass

def check(a):
  if a == 5:
    raise ItIsFiveException

try:
  a = 0
  while(a != 5):
    a = random.randint(1,5); check(a)
    a = random.randint(1,5); check(a)
    a = random.randint(1,5); check(a)
    a = random.randint(1,5); check(a)
except ItIsFiveException:
  print("I saw a five!")

Il vous suffit de définir votre propre exception python en tant que classe, et de l'augmenter dans votre check (a) code> fonction. Ensuite, vous pouvez envelopper l'intégralité de votre boucle while dans un bloc try-except et intercepter votre exception.


2 commentaires

Je pense que vous répondez à mon sujet, mais je ne suis pas sûr de faire des tests avec mon cas complexe en projet, mais c'est une très bonne piste!


C'est une manière vraiment étrange parce que je ne m'attendrais jamais à ce que cette exception m'aide dans ce cas, mais merci, cela fonctionne parfaitement comme je le voulais!