Язык программирования Python¶
(версия 3)
(в данном пособие сразу после кода на языке программирования python приведен результат его выполнения)
Лирическое отступление - вкратце о ЯП, о интерпретируемости python, о существовании python2 и python3. Данное руководство будет доступно позднее в почти не изменнунном виде. Python чуствителен к регистру. Основная команда, которая понадобится новичку в любом языке программирования - вывод информации на экран. В Python3 это можно сделать следующим образом:
print('Hello world')
Разберем приведенную программу:
- Строки заключаются в кавычки, либо "", либо ''. Многострочные строки: """"""
- Встроенная функция print выводит на экран строку, указанную в кавычках
- Обратите внимание на круглые скобки - в них пишется аргумент
Переменные:
Познакомимся с базовыми типами в языке python. Поскольку python обладает динамической типизацией, работать с разными типами легко (нет). Основные типы:
int
- числовой тип. Его размер неограниченstr
- (string) - строковый тип.bool
- boolean - логический тип (True or False)list
- неизменяемые списки (массивы)tuple
- неизменяемые списки (массивы)- и многие другие
В python не нужно указывать типы переменных, он подберет их сам. Чтобы узнать тип переменной, можно использовать функцию type()
#С помощью решетки можно оставлять комментарии
print(type(123)) # число
print(type("Hello world")) # строка
print(type("123")) # А это?
print(type(Hello)) # А это?
Научимся работать с числами. В python доступны большинство арифметических операций:
+ - * //
a = 10
b = 20
c = a + b # c = 30
d = c * 2 # d = 60
e = d - b # e = 40
f = d // a # f = 6
Обратите внимание, что деление записывается двумя слешами. Бонус: в pythont есть встроенная операция возведения в степень, записывается
print(2 ** 5)
В python есть операция взятия остатка от деления. Будьте осторожны, она работает по математическому определению.
print(12418924791824 % 100)
Теперь научимся работать со строками. Python позволяет сливать их рядом (конкатенация):
a = 'hello'
b = 'world'
c = a + ' ' + b
print(c)
Оператор in позволяет проверять наличие вхождение одной строки в другую:
print('-' in 'into')
Логический тип - является результатом логических выражений.
a = True # False
b = not a # and - И; or - ИЛИ
print(b)
Логические выражения. Можно использовать следующие операторы:
- <
- >
- <= - важно, что равно стоит на втором месте
- >=
- == - важно, что два символа равно (один символ - присваивание)
- != - проверка н
- in
- not
- not in (так называемый синтаксический сахар)
А теперь научимся вводить. Для этого используем функцию input() следующим образом
a = input()
print(a)
type(a) # как думаете, а какой тип здесь, если ввести 10?
Чтобы преобразовать строку "10" к числу 10, воспользуемся функцией int()
a = '10'
print(type(a))
b = int(a)
print(type(b))
print(a, b)
Таким образом, самый удобный способ считать число с клавиатуры:
a = int(input())
Продолжим разговор про числа. Как вы могли заметить, они не всегда являются целыми. Для представления нецелых чисел существует специальный тип, называемый "float". Чтобы обозначить питону, что число следует считать не целым, следует поставить точку в его записи:
a = 10 # целое
b = 10.0 # вещественное
print(type(a))
print(type(b))
print(a == b)
Несколько тонкостей преобразования из целых чисел в вещественные и наоборот
a = 10 # a - int
b = 1.0 * a # результат операции вещественный, если хотя бы один из элементов вещвественной
d = float(a) # Практически аналогична команде выше
print(a, b, d)
a = 12.2
b = 12.7
print(int(a))
print(int(b))
Округление:
print(round(12.2))
print(round(12.7))
print(round(12.5))
В остальном, все операции для вещественных чисел аналогичны операциям с целыми числами. Обратите внимание:
a = 10
b = 5
#a и b - целые числа
c = a / b
print(c)
print(type(c))
#c - вещественное число!!!
Условный оператор¶
Часто возникает необходимость в зависимости от какого-то условия выполнять различные действия. В python это позволяет делать оператор if.
Шаблон оператора if (то, что писать не обязательно указано в квадратных скобках):
if <условие>:
<код 1 (с одинаковым отступом)>
[elif <условие 1>:
<код 2 (с одинаковым отступом)>]
[elif <условие 1>:
<код 3(с одинаковым отступом)>]
...
[else:
<код 4(с одинаковым отступом)>]
Несколько важных моментов:
- все команды
elif
иelse
пишутся на таком же уровне, что иif
- Правило выполнения команд:
- Сначала проверяется условие 1
- Если оно верно, то выполняется код 1
- Если оно неверно, то управление будет переходить по очереди к блокам
elif
- Если очередное условие в
elif
оказалось верным, то выполняется соответствующий код - Если ни одно условие (как в
if
, так и вelif
) не выполняется, что запускается код 4
- В любом случае выполнится не более одного кода. Если есть ветка
else
, то обязательно выполнится ровно один код - Ветка после
if
должна быть обязательно - Количество веток
elif
внутри одногоif
не ограниченно - Ветка
else
может либо быть ровно одна, либо вовсе отсутствовать
Несколько примеров использования if
:
a = int(input())
if a % 2 == 0:
print('четное')
if a % 2 != 0:
print('нечетное')
## Запишем тоже самое немного короче:
if a % 2 == 0:
print('четное')
else:
print('нечетное')
x = int(input())
y = int(input())
#Определим, в какой четверти находится число
if x > 0 and y > 0:
print("Первая четверть")
elif x > 0 and y < 0:
print("Четвертая четверть")
elif y > 0:#Если дошли досюда, то точно x < 0, иначе бы выполнились бы предыдущие условия. Поэтому проверим только y
print("Вторая четверть")
else:
print("Третья четверть")
Логические операторы¶
Кроме приведенных выше операторов сравнения (< > <= >= == !=
) еще есть логические операторы, которые помогают задавать сложные логические выражения:
and
- логическое И (верно только если верны левый и правый операнд)or
- логические ИЛИ (верно, если верен хотя бы один операнд)not
- логическиое отрицание (верно, если единстенный операнд неверен)
and
и or
- принимают два операнда (слева и справа). not
- только один (справа)
Логические И имеет больший приоритет, чем ИЛИ. К примеру, выражение A and B or C
верно, если верно либо C, либо и A, и B. Однако, если поставить скобки, трактовка будет другая: выражение A and (B or C)
верно, если верно А и верно либо B либо C.
Пример:
- выражение
a % 10 == 0 or b % 10 == 0
верно если хотя бы одно из чиселa
илиb
заканчивается на 0.
Списки (list)¶
Как и понятно из названия, списки в python позволяют хранить упорядоченную информацию. В python списки обозначаются квадратными скобками. Переменные могут быть типа список, рассмотрим на примере:
a1 = [1, 3, 2]
a2 = []
a3 = ['hello', 102, [3, 1, 2]]
print(type(a1))
С помощью функции len
можно узнавать длину списка:
print(a3)
print(len(a3))
Поскольку в списке элементы упорядоченны, у них есть свои номера, по которым можно к ним обращаться: Обратите внимание, элементы нумеруются с нуля!! Также можно использовать отрицательные индексы: a[-1] - последний элемент, a[-2] - предпоследний и так далее.
a = [5, 2, 3, 4, 1]
print(a[0])
print(a[3])
print(a[-1])
a[-2] = 10
print(a)
Рассмотрим некоторые операции со списками:
- Сложение - складываемые списки "сливаются друг с другом" (в конец первого дописываются все элементы второго)
- Умножение - по аналогии - список складывается сам с собой
Подробнее в примерах:
ar = [1, 2]
pr = [2, 3]
print(ar + pr)
print(ar * 4)
print([1] * 10)
Чтобы добавить в конец списка новый элемент можно воспользоваться методом append
ar = [1, 5]
ar.append(6)
ar += [4] # аналогично предыдущему
print(ar)
Генераторы¶
В python есть функция, которая позволяет генерировать списки из целых чисел.
range(n)
создаст список из элементов [0, 1, 2, ..., n - 1]
print(list(range(10)))
print(list(range(20)))
Чтобы вывести, я использовал функцию list
, которая преобразовывает специальный объект генератора к удобному списку. Это нужно только для того, чтобы вывести список на экран
range(start, stop)
сгенерирует список вида [start, start + 1, ..., stop - 1]
print(list(range(3, 10)))
print(list(range(70, 20)))
range(start, stop, step)
сгенерирует список вида [start, start + step, ..., last]
, где last
обладает следующими свойствами:
last
<stop
last
+step
>=stop
print(list(range(3, 20, 4)))
print(list(range(30, 12, -5)))
цикл for¶
Цикл for в python перебирает значения переданного ему списка, переменная цикла принимает каждый раз значение какого-то элемента списка
for <переменная цикла> in <список>:
<код с отступом>
Несколько примеров:
for i in [2, 34, 4]:
print(i)
for i in range(3, 6):
print(i * i)
Обратите внимание, как ведет себя переменная цикла. В начале каждой итерации переменной цикла присваивается новое значение, пытаться изменять его бессмысленно:
i = 10
for i in range(4):
print(i)
i = 'bye'
print('after:')
print(i)