Проверьте, соблюдает ли условие моментально - PullRequest
0 голосов
/ 17 мая 2019

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 18 мая 2019

Звучит так, как будто вы хотите очистить все ваши операторы 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-exc и перехватить ваше исключение.

0 голосов
/ 18 мая 2019

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

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
0 голосов
/ 17 мая 2019

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

flag = False
while not flag:
    for i in range(4):
        a = random.randint(1, 5)
        if a == 4:
            flag = True
            break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...