Если оператор возвращает False в while True l oop (Python) - PullRequest
0 голосов
/ 25 апреля 2020

Я ожидал, что в этом операторе If переменная 'i' будет увеличиваться до тех пор, пока она в конечном итоге не станет равной 10, а затем 'если 10 <10' вернет False, ломая my while l oop. Но этот код печатается до 10, а затем застревает в бесконечном l oop, если я не добавлю else: break. Почему? </p>

i=0
while True:
    if i < 10:
        i = i + 1 
        print(i)

Ответы [ 5 ]

1 голос
/ 25 апреля 2020

while X повторяется, когда X равно True, поэтому в while True это всегда True. Разрывается только с оператором break. В вашем коде вы проверяете значение только внутри while l oop, если да, то не прерываете l oop и не меняете True на False в while True.

Если вы хотите использовать while:

i = 0
while i < 10:
    i += 1
    print(i)

Или

i = 0
while True:
    if i < 10:
        i += 1
        print(i)
    else:
        break

Без while:

for i in range(10):
    print(i)
1 голос
/ 25 апреля 2020

while True заставит l oop работать вечно, потому что "true" всегда оценивается как true. Вы можете выйти из l oop с перерывом.

Чтобы добиться того, что вы хотите сделать, я бы использовал

while i < 10:
    print (i)
    i++
0 голосов
/ 25 апреля 2020

Я думаю, что вам нужно понять несколько вещей здесь, поскольку вы установили while True, что означает, что оператор никогда не получит false, поэтому никогда не заканчивается while loop, даже если if condition терпит неудачу. Таким образом, while loop продолжит работать, пока вы не прерветесь.

Единственный способ, которым вы можете достичь этого без перерыва, заключается в следующем: у вас есть переменная, которая сбрасывает условие while loop на ложное, когда if loop не удается

i=0
condition = True
while condition:
    if i<10:
        i=i+1
        print(i)
    else:
        condition=False
0 голосов
/ 25 апреля 2020

Если вы хотите использовать True, тогда вы можете go для:

i=0
while True:
   i = i + 1 
   print(i)
   if i == 10:
      break
0 голосов
/ 25 апреля 2020

Это потому, что нет ничего, что говорило бы вам прекратить l oop. Так что это будет продолжаться даже после того, как заявление if не будет выполнено.

Вот почему обычно не рекомендуется использовать while True

Вы можете добиться того же с помощью for для l oop, когда условие прерывания встроено в l oop:

for i in range(0, 10):
    print(i)
...