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!
3 Réponses :
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
Votre code est probablement bon et fonctionne dans ce cas, mais je pense que je vais apporter plus de précision dans mon sujet
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)....
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.
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.
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!