Почему это вывод для следующего кода?

#python

#python

Вопрос:

У меня возникли проблемы с пониманием, почему вывод для этого кода равен 16. Прошу прощения, если я что-то неправильно форматирую, я новичок в кодировании.

Я написал код пару раз, чтобы убедиться, что я правильно его форматировал

 x = 1
while x < 10:
    x  = x
print(x)
  

Вывод, который выводится для меня, равен 16.

Комментарии:

1. Какой вывод вы ожидали?

2. x = x по сути, то же самое, что x *= 2 . Вы удваиваете x , пока значение не станет больше 10. Начиная с 1, первое, x которого нет x<10 , равно … 16.

3. Я рекомендую сделать отступ print , чтобы он находился внутри цикла while. Затем вы можете видеть x на каждой итерации цикла. Это должно прояснить ситуацию.

Ответ №1:

Для меня это имеет смысл. Оператор x = x эквивалентен x *= 2 удвоению x .

Чтобы помочь вам понять, попробуйте печатать x после каждой итерации:

 x = 1
while x < 10:
    x  = x
    print(x)
  

Вывод:

 2
4
8
16
  

На каждом шаге:

 2    # greater than 10? no
4    # greater than 10? no
8    # greater than 10? no
16   # greater than 10? yes, stop loop
  

Комментарии:

1. и для случая, когда это непонятно (потому что, как он / она сказал, он / она новичок в кодировании): x = x равно x = x x

Ответ №2:

Возможно, изменение местоположения print(x) могло бы помочь вам:

 x = 1
print(1)
while x < 10:
    x  = x
    print(x)
  

Вывод:

 1
2
4
8
16
  

Как вы можете видеть, есть общий покровитель. Каждая итерация while дублирует предыдущее значение x (это связано с x = x , что может быть интерпретировано как удвоение x).

Тогда условие while x < 10 довольно простое.

 1     # Less than 10. Keep looping.
2     # Less than 10. Keep looping.
4     # Less than 10. Keep looping.
8     # Less than 10. Keep looping.
16    # Greater than 10. STOP!