Основы Python
Первые конструкции, с которых начинается любой скрипт: вывод, переменные, ввод.
Переменные и присваивание
price = 199
qty = 3
total = price * qty # 597
total += 100 # 697
price, qty = qty, price # swap: price=3, qty=199 Имя появляется в момент первого присваивания, объявлять тип не нужно. total += 100 — то же, что total = total + 100; так же работают -=, *= и /=.
print: вывод и разделители
print('total', 597) # total 597
print(1, 2, 3, sep=', ') # 1, 2, 3
print('loading', end='... ')
print('done') # loading... done print сам ставит пробел между значениями и перенос строки в конце — sep и end это меняют. Для отладки печатай подпись рядом со значением: print(«total», total).
f-строки: значения внутри текста
name = 'Anna'
price = 199
print(f'{name}: {price} RUB') # Anna: 199 RUB
print(f'{price * 0.9:.2f}') # 179.10 Буква f перед кавычками включает подстановку — внутри {} работает любое выражение. Формат :.2f оставляет два знака после точки.
Комментарии
# comment until the end of the line
rate = 0.13 # tax rate
# temporarily disable a line:
# rate = 0.2 Всё после # интерпретатор пропускает — до конца строки. Хороший комментарий объясняет «почему», а не пересказывает код.
Типы и числа в Python
Числа, строки, булевы значения и приведение одного к другому.
Базовые типы и type()
age = 21 # int
price = 19.9 # float
name = 'Anna' # str
active = True # bool
type(price) # <class 'float'> Четыре типа закрывают почти все задачи новичка: int, float, str, bool. type(x) показывает, с чем ты имеешь дело — первый шаг, когда значение ведёт себя странно.
Преобразование типов
int('42') # 42
float('19.9') # 19.9
str(597) # '597'
int('12a') # ValueError int(), float() и str() создают новое значение нужного типа. Строка с мусором внутри падает с ValueError — оборачивай вызов в try/except, если данные приходят извне.
Деление: / , // и %
7 / 2 # 3.5
7 // 2 # 3
7 % 2 # 1
597 % 10 # 7, the last digit / всегда возвращает float, // отбрасывает дробную часть, % даёт остаток. Пара // и % — стандартный способ разобрать число на цифры или минуты на часы.
Степень и корень: **
2 ** 10 # 1024
25 ** 0.5 # 5.0, the square root
10 ** -2 # 0.01 ** возводит в степень, дробный показатель даёт корень: x ** 0.5 — квадратный. Заметь: результат корня — float, даже когда он «ровный».
round и abs
round(2.678) # 3
round(2.678, 2) # 2.68
abs(-15) # 15
round(2.5) # 2, not 3 round(x, n) округляет до n знаков, abs убирает знак. Подвох: round(2.5) даёт 2 — Python округляет половинки к чётному соседу, а не вверх.
Строки в Python
Срезы, разбор и склейка строк — то, что нужно почти в каждой задаче.
Строка: индексы и срезы
word = 'python'
word[0] # 'p'
word[-1] # 'n'
word[:3] # 'pyt'
word[::-1] # 'nohtyp' Строка индексируется как список: с нуля, минус — с конца, срезы те же. Изменить символ по индексу нельзя — строки неизменяемы, собирай новую.
Регистр и пробелы: upper, lower, strip
raw = ' Anna@Mail.RU '
raw.strip() # 'Anna@Mail.RU'
raw.strip().lower() # 'anna@mail.ru'
'python'.upper() # 'PYTHON' strip срезает пробелы и переносы по краям, lower/upper меняют регистр. Методы не трогают исходную строку — результат нужно сохранить в переменную.
split и join: строка ↔ список
line = 'python,sql,go'
parts = line.split(',') # ['python', 'sql', 'go']
text = ' / '.join(parts) # 'python / sql / go' split режет строку по разделителю и отдаёт список, join собирает список обратно в строку. Разделитель у join стоит слева: '-'.join(parts), а не parts.join('-').
replace: замена в строке
phone = '8-999-123-45-67'
phone.replace('-', ' ') # '8 999 123 45 67'
phone.replace('-', '', 2) # '8999123-45-67' replace(old, new) меняет все вхождения и возвращает новую строку; третий аргумент ограничивает число замен. Удалить символ — заменить его на пустую строку ''.