В полной форме:
if [условие - логическое выражение, True или False]:
[блок кода с отступом 4]
elif [условие]:
# иначе, если. Условие проверяется, если не выполнено предыдущее
[блок кода с отступом 4]
elif [условие]:
# еще условие, проверяется, если оба предыдущих не выполнились
[блок кода с отступом 4]
else:
# блок выполняется, если все предыдущие условия не выполнены (False)
[блок кода с отступом 4]
Обязательно иметь только блок c if
, блоков elif
может быть сколько угодно или вообще не быть, блок else
либо один, либо его нет.
блоки if могут быть вложены, т.е. во внутренних блоках кода тоже можно проверять условия:
if x > 0:
if y > 0:
print("здесь x и y положительны")
else:
print("здесь только x положительный")
Второй else
относится к if y > 0
. Это понятно из форматирования, потому что он поставлен с отступом от if x > 0
.
Одна форма:
for [переменная] in [какое-то перечисление]:
[блок кода с отступом 4, можно использовать "переменную"]
переменной последовательно присваиваются значения из перечисления. Например, так:
for i in range(10):
print(i)
0 1 2 3 4 5 6 7 8 9
Переменной i
последовательно присваиваются значения от 0 до 9, подробней про range
будет дальше.
Получается, что в python нет привычных циклов из Pascal или C, когда можно сказать, что переменная сначала равна 1, а потом постепенно увеличиваеся до 10:
for i := 1 to 10 do
В C и Pascal последовательное изменение значения числовой перменной встроено в язык.
while [условие]:
[блок кода с отступом 4]
В цикле проверяется условие. Если оно верно, выполняется блок кода, иначе цикл заканчивается. После выполнения блока кода снова проверяется условие, если оно верно, выполняется блок кода, иначе цикл заканчивается. И так далее.
Другими словами, пока условие верно, блок кода выполняется. Как только оно стало неверным, цикл завершается.
В Python нет цикла do while, в котором условие проверяется в конце.
x = 1
while x < 100:
print(x)
x = x * 2
1 2 4 8 16 32 64
x = 1
while x < 100:
x = x * 2
print(x)
2 4 8 16 32 64 128
Например, давайте пользователь будет вводить числа до тех пор пока не введет слово stop
. Дальше программа должна распечатать сумму введенных чисел. Ввод данных - это функция input.
Цикл for
не подходит, потому что он делает действия для фиксированного набора элементов из перечисления. Пользуемся while
:|
sum = 0 # сначала сумма равна 0, потом будем изменяться
text = input("введите число или слово stop") # возвращает строку, введенную пользователем
while text != 'stop':
sum = sum + int(text) # int это и имя типа, и функция превращаения в int, т.е. целое
text = input("введите число или слово stop")
print(f"сумма введенных чисел равна {sum}")
сумма введенных чисел равна 60
Как сделать лучше? Часто условие нужно проверять не в начале цикла, а в середине. В данном случае в цикле надо сначла спросить пользователя число, проверить не слово ли это stop и потом уже добавить число в сумму:
sum = 0 # сначала сумма равна 0, потом будем изменяться
while True: # условие, которое всегда верно. 2 == 2 эквивалентно True
text = input("введите число или слово stop")
if text == 'stop': # проверка условия на выход в середине цикла
break # break завершает цикл
sum = sum + int(text) # int это и имя типа, и функция превращаения в int, т.е. целое
print(f"сумма введенных чисел равна {sum}")
сумма введенных чисел равна 60
Хранят последовательность значений, эти значения можно перечислять в цикле for
. Таких типов очень много, можно создавать свои. Встроенные:
for c in "hello":
print(c)
h e l l o
c
последовательно присваиваются символы слова "hello".
range
. Варианты использования:range(10) # от 0 до 9, указанное значение не включается. Не до 10, а до 9
range(2, 10) # от 2 до 9, правое значение опять не включается
range(0, 100, 10) # от 0 до 100 (не включительно) с шагом 10
# Пока что мы можем использовать это только в циклах
for x in range(0, 100, 10):
print(x)
print("---")
for x in range(10, 0, -1): # конечное значение 0 не включается
print(x)
0 10 20 30 40 50 60 70 80 90 --- 10 9 8 7 6 5 4 3 2 1
Списки (list) и кортежи (tuple, тьюплы). Это упорядоченные последовательности произвольных элементов. Например, список [10, 20, 30]
хранит три числа 10, 20 и 30.
Кортежи аналогично, только можно без скобок:
10, 20, 30
, это тоже три числа 10, 20, 30.
Различие кортежей и списков в том, что списки можно изменять, например, добавлять в них новые элементы. Про изменяемые и неизменяемые типы будем говорить отдельно в следующий раз.
a = [10, 20, 30] # список
b = 10, 20, 30 # кортеж
print(a)
print(b) # кортеж печатается с круглыми скобочками
a = [] # пустой список
b = () # пустой кортеж (обычно в нем нет смысла)
a = [10] # список из одного элемента
b = (10,) # кортеж из одного элемента. Здесь хитрый синтаксис - скобки и запятая
# потому что 10 или (10) это просто число 10, а не кортеж.
[10, 20, 30] (10, 20, 30)
Списки, кортежи можно перечислять:
for x in [10, 20, 30]:
print(x)
10 20 30
Очень часто можно увидеть код, в котором перечисляются элементы списка по индексу, это просто калька с Pascal или С, которая не имеет смысла:
a = [10, 20, 30]
for i in range(3): # i от 0 до 2
print(a[i]) # тоже см. дальше, это получение элемента по его номеру.
10 20 30
Лучше писать предыдущим способом без индекса.
for x in 10, 20, 30: # перечисляем кортеж
print(x)
10 20 30
При создании кортежа довольно часто ставят вокруг круглые скобки, потому что иначе Python не поймет, что имелось в виду. Примеры будут появляться дальше сами собой.
print(10 in [10, 20, 30])
print(10 in (10, 20, 30)) # нужны скобки для кортежа, иначе другой смысл
print('a' in 'qwr;oiasdsdg')
print('as' in 'qwr;oiasdsdg') # можно проверять подстроки
print([20, 30, 40] + [40, 50, 60])
print((20, 30, 40) + (40, 50, 60))
print(len([10, 20, 30])) # длина 3
True True True True [20, 30, 40, 40, 50, 60] (20, 30, 40, 40, 50, 60) 3
Слайсы Очень мощная возможность python
a = [10, 20, 30, 40, 50, 60]
print(a[3]) # элемент с индексом 3, начиная с 0
print(a[2:4]) # от 2 до 4 индекса, не включая последний
print(a[2:]) # от 2 до конца
print(a[:4]) # с начала до 4-го не включительно
print(a[0:6:2]) # шаг 2
print(a[::2]) # от начала до конца с шагом 2
40 [30, 40] [30, 40, 50, 60] [10, 20, 30, 40] [10, 30, 50]
И еще много других комбинаций с указанием или без указания начала или конца. Можно использовать отрицательный шаг, чтобы перечислять справа налево. И можно использовать отрицательные индексы. Отрицательный индекс означает подсчет с конца, например, -1 означает последний элемент.
Слайсы работают со всеми типами последовательностями, со строками тоже. У нас будут задачи про строки и слайсы. Поэтому экспериментируйте.