Подтвердить что ты не робот

Как делать, когда петли с несколькими условиями

У меня есть цикл while в python

condition1=False
condition1=False
val = -1

while condition1==False and condition2==False and val==-1:
    val,something1,something2 = getstuff()

    if something1==10:
        condition1 = True

    if something2==20:
        condition2 = True

'
'

Я хочу выйти из цикла, когда все эти условия верны, код выше не работает

Я изначально имел

while True:
      if condition1==True and condition2==True and val!=-1:
         break

который работает нормально, это лучший способ сделать это?

Спасибо

4b9b3361

Ответ 1

Измените and на or s.

Ответ 2

while not condition1 or not condition2 or val == -1:

Но с вашим оригиналом не было ничего плохого в использовании, если в течение некоторого времени True.

Ответ 3

Вы заметили, что в опубликованном вами коде condition2 никогда не установлен в False? Таким образом, тело цикла никогда не выполняется.

Также обратите внимание, что в Python not condition предпочтительнее condition == False; аналогично, condition предпочтительнее condition == True.

Ответ 4

condition1 = False
condition2 = False
val = -1
#here is the function getstuff is not defined, i hope you define it before
#calling it into while loop code

while condition1 and condition2 is False and val == -1:
#as you can see above , we can write that in a simplified syntax.
    val,something1,something2 = getstuff()

    if something1 == 10:
        condition1 = True

    elif something2 == 20:
# here you don't have to use "if" over and over, if have to then write "elif" instead    
    condition2 = True
# ihope it can be helpfull

Ответ 5

В PYTHON я сталкиваюсь с проблемой использования циклов while с двумя условиями, соединенными символом 'или', как показано на рисунке.

while lst != [] or check_sum != 0:
    if x in lst:
        lst.remove(x)
    check_sum = 0

В этом примере, если я дам ему lst = [1, 3] и check_sum = 4, я хочу, чтобы он остановил выполнение кода, если x = 4 или пока x = 1 и x = 3.

Ответ 6

Я не уверен, что он будет читать лучше, но вы можете сделать следующее:

while any((not condition1, not condition2, val == -1)):
    val,something1,something2 = getstuff()

    if something1==10:
        condition1 = True

    if something2==20:
        condition2 = True

Ответ 7

используйте цикл бесконечности, как то, что вы изначально сделали. Он самый чистый, и вы можете включить множество условий, как вы пожелаете.

while 1:
  if condition1 and condition2:
      break
  ...
  ...
  if condition3: break
  ...
  ...