Я не понимаю циклы с / диапазонов ..

... в свете ответа на проблему 1 проблема 2 сбивает с толку ...

Проблема 1: Каково значение j в конце следующего сегмента кода?

j = 0
for i in range(0, 4):
   j = j + i

Проблема 2:

j = 0
for i in range(1, 10):
   if j < 10 :
      j = j + i

Задача 1:
Ответ: 6
j = (j + 1) + (j + 2) + (j + 3)

Проблема 2:
Ответ: 10
Мой ответ: ???
Почему не j = (j + 1) + (j + 2) ... (j + 9)?
(Я не понимаю, что здесь означает выражение "if j <10" ..)

1
Jaimen Perez 25 Июл 2019 в 20:24

4 ответа

Лучший ответ
j = 0
for i in range(1, 10):
   if j < 10 :
      j = j + i

Внешний цикл for выполняется до тех пор, пока не исчерпает диапазон для i. В каждом внешнем цикле j оценивается, чтобы определить, меньше ли оно 10. Если это так, j увеличивается на величину i в этом цикле. В 4-м цикле j становится 10 и остается этим значением до конца выполнения.

loop        j    i   j(end)
1           0    1   1
2           1    2   3
3           3    3   6
4           6    4   10
5           10   5   10
6           10   6   10
7           10   7   10
8           10   8   10
9           10   9   10
<end>
2
mauve 25 Июл 2019 в 17:38

if j < 10 проверяет значение j каждого цикла и запускает следующую строку, только если значение j меньше 10. Если значение j равно или больше 10, j = j + i не запускается, а значение j не увеличивается.

1
RSchneyer 25 Июл 2019 в 17:33

Это простой логический вопрос. В задаче 2 j =j + i выполняется только если j < 10:


После первого запуска j = (j + 1) = 1 (поскольку j изначально равно 0)
После второго запуска имеем j = (j + 1) + (j + 2) = 3
После четвертого прогона имеем j = (j + 1) + (j + 2) + (j + 3) + (j + 4) = 10


Поскольку j больше не меньше 10, условие if означает, что в этот момент к j больше не добавляется i.

1
AAA 25 Июл 2019 в 17:32

Я думаю, у вас есть неправильное представление о порядке исполнения. Каждую итерацию цикла оператор if j < 10 : оценивает. Таким образом, после 4-й итерации j не увеличивается из-за ложного выражения if.

2
griffin_cosgrove 25 Июл 2019 в 17:32