Потому что нумерация начинается с нуля и range не учитывает верхнюю границу диапазона. Есть определенные причины почему сделали именно так, это долго объяснять. Если нужно верхнюю границу всё же учесть - тогда и добавляют единицу n = [1,2,3,4,5,6,7]
num = len//2
for i in range(num):
print(n)
print('---')
for i in range(num,len):
print(n) 1
2
3
---
4
5
6
7
Если бы верхняя граница учитывалась, получалось бы совсем другое
1
2
3
4
---
4
5
6
7
В Python для увеличения значения переменной на единицу используется оператор +=. Он является комбинированным оператором присваивания и сложения. Он увеличивает значение переменной на указанное число (в данном случае на 1) и присваивает полученное значение обратно переменной.
Основной способ увеличения значения переменной на единицу в Python — запись:
number = number + 1
Если попытаться использовать оператор ++ в Python, код будет воспринят иначе.<SPAN#1> В других языках программирования для увеличения значения переменной на единицу используется специальный оператор ++. Например, в C++, Java или JavaScript код number++ увеличивает значение переменной number на единицу.
В Python такой оператор отсутствует. Если попытаться использовать ++ в Python, код будет воспринят иначе.
Таким образом, в Python для инкрементации используется либо полная запись с использованием оператора присваивания и сложения, либо более краткая запись с использованием комбинированного оператора +=. Оба этих варианта являются абсолютно корректными и широко используются в Python.
Потому, что в Python диапазон в range и срезах включает начальную границу и исключает конечную. Это во многих случаях упрощает код. Но если требуется включить конечную границу в диапазон, приходится приписывать + 1 (если диапазон от меньшего к большему) или - 1 (если от большего к меньшему).