Проверьте, соблюдает ли условие моментально

У меня сложный проект, и я постараюсь упростить одну из основных проблем проекта. Итак, есть упрощение: мы можем представить себе цикл while, подобный этому:

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

В этом цикле есть n операторов, и каждый оператор может быть любым (функция, цикл, оператор if, ...), и в цикле есть условие, это условие, которое я хочу проверить, ДО того, как цикл while сделает это. Потому что, если условие является уважением с момента первого утверждения, я должен ждать до конца времени, чтобы проверить, является ли условие соблюдением ... Так что мой вопрос можно проверить условие ДО цикла, не имея проверки функции между КАЖДЫМИ высказываниями whileloop?

Потому что на самом деле это работает ... НО код не ясен, я действительно думаю, что таким образом мы загрязняем мой код, и я хочу работать более эффективно и с красивым кодом, так как я могу решить свою проблему без этого ограничения?

PS: я думаю о слушателе событий, как javascript, но я нашел плохую информацию о них на python, но если есть инструмент, который действует как слушатель событий, было бы здорово!

Всего 3 ответа


Похоже, вы хотите очистить все ваши операторы if-then-break в одну функцию, которая обрабатывает «проверку» значения a . Для этого вы можете использовать исключения:

 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!") 

Вам просто нужно определить свое собственное исключение Python как класс и вызвать его в своей определенной вручную функции check(a) . Затем вы можете заключить весь цикл while в блок try-Кроме и поймать ваше исключение.


Я не уверен, правильно ли я вас понял, но вот что я сделаю:

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

Я не знаю точно, что это происходит с «а», но если, если вы можете связать условия и остановится, когда первый отказывает

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

Если вы можете зациклить генерацию случайных значений, вы можете использовать

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

Есть идеи?

10000