Численные типы
Целые числа (int)
num = 13 print(num) 13 num = 0 print(num) 0 num = -10 print(num) -10
num = 100_000_000 print(num) 100000000
Встроенная функция type
num = 13 print(type(num)) <class 'int'>
Вещественные числа (float)
num = 13.4 print(num) 13.4 num = 0.0 print(num) 0.0 num = -10.2 print(num) -10.2
num = 100_000.000_001 print(num) 100000.000001
# 1.5 умножить на 10 в степени 2 num = 1.5e2 print(num) 150.0
Конвертация типов:
num = 150.2 print(type(num)) <class 'float'>
num = int(num) print(num, type(num)) 150 <class 'int'> num = float(num) print(num, type(num)) 150.0 <class 'float'>
Комплексные числа (complex)
num = 14 + 1j print(type(num)) <class 'complex'> print(num.real) 14.0 print(num.imag) 1.0
Модуль decimal для работы с вещественными числами с фиксированной точностью
Модуль fractions для работы с рациональными числами
Основные операции с числами
Сложение:
1 + 1 2
1 + 2.0 3.0
Вычитание:
10 - 1 9
4.2 - 1 3.2
Деление:
10 / 2 5.0
Делить на 0 нельзя:
2 / 0 --------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-11-ae0c5d243292> in <module>() ----> 1 2 / 0 ZeroDivisionError: division by zero
Умножение:
4 * 5.25 21.0
Возведение числа в степень:
2 ** 4 16
Целочисленное деление:
10 // 3 3
Остаток от деления:
10 % 3 1
Порядок операций в выражениях с числами:
print(10 * 3 + 3) 33 print(10 * (3 + 3)) 60
x = 4 y = 3 print("Побитовое или:", x | y) Побитовое или: 7 print("Побитовое исключающее или:", x ^ y) Побитовое исключающее или: 7 print("Побитовое и:", x & y) Побитовое и: 0 print("Битовый сдвиг влево:", x << 3) Битовый сдвиг влево: 32 print("Битовый сдвиг вправо:", x >> 1) Битовый сдвиг вправо: 2 print("Инверсия битов:", ~x) Инверсия битов: -5
Задача: найти расстояние между двумя точками в декартовых координатах.
Решение:
x1, y1 = 0, 0 x2 = 3 y2 = 4 distance = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5 print(distance) 5.0
Меняем местами значения 2-х переменных:
a = 100 b = 200 print(a, b) 100 200 a, b = b, a print(a, b) 200 100
Вместо x, y = 0, 0
x = y = 0 x += 1 print(x) 1 print(y) 0
Но нужно помнить об отличии изменяемых (mutable) и неизменяемых (immutable) типов:
x = y = [] x.append(1) x.append(2) print(x) [1, 2] print(y) [1, 2]
Логический тип (bool)
True True False False result = True print(type(result)) <class 'bool'>
Оператор «равно»:
13 == 13 True
Оператор «не равно»:
1 != 2 True
Операторы сравнения:
print(3 > 4) Fasle print(3 <= 3) True print(6 >= 6) True print(6 < 5) False
x = 2 print(1 < x < 3) True
Конвертация типов:
bool(12) True bool(0) False
Логические выражения
Логическое «и»:
x, y = True, False print(x and y) Fasle
Логическое «или»:
x, y = True, False print(x or y) True
Логическое отрицание:
y = False print(not y) True
Составные логические выражения:
x, y, z = True, False, True result = x and y or z print(result) True
x = 12 y = False print(x or y) 12
x = 12 z = "boom" print(x and z) boom
Задача: определить високосный год или нет?
Год является високосным если он кратен 4, но при этом не кратен 100, либо кратен 400.
year = 2017 is_leap = year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) print(is_leap) False
import calendar print(calendar.isleap(1980)) True
Строки (str)
Строка – это неизменяемая последовательность юникодных символов
example_string = "Курс про Python" print(example_string) Курс про Python print(type(example_string)) <class 'str'> example_string = 'Курс про "Python"' print(example_string) Курс про "Python" example_string = "Курс про \"Python\"" print(example_string) Курс про "Python"
«Cырые» (r-строки):
example_string = "Файл на диске c:\\\\" print(example_string) Файл на диске c:\\ example_string = r"Файл на диске c:\\" print(example_string) Файл на диске c:\\
Как разбить объявление длинной строки:
example_string = "Perl — это тот язык, который одинаково " \ "выглядит как до, так и после RSA шифрования." \ "(Keith Bostic)" print(example_string) Perl — это тот язык, который одинаково выглядит как до, так и после RSA шифрования.(Keith Bostic) example_string = """ Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует. Bjarne Stroustrup """ print(example_string) Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует. Bjarne Stroustrup
Как объединить 2 строки в одну?
"Можно" + " просто " + "складывать" + " строки" 'Можно просто складывать строки' "Даже умножать!" * 3 'Даже умножать!Даже умножать!Даже умножать!'
Строки неизменяемые!
example_string = "Привет" print(id(example_string)) 4379064296 example_string += ", Мир!" print(id(example_string)) 4379064192
Срезы строк [start:stop:step]
example_string = "Курс про Python" example_string[9:] 'Python' example_string = "Курс про Python" example_string[9:15] 'Python' example_string = "Курс про Python" example_string[-6:] 'Python'
Использование step:
example_string = "0123456789" example_string[::2] '02468' example_string = "Москва" example_string[::-1] 'авксоМ'
У строк есть методы:
quote = """Болтовня ничего не стоит. Покажите мне код. Linus Torvalds """ quote.count("о") 6 "москва".capitalize() 'Москва' "2017".isdigit() True
Оператор in позволяет проверить наличие подстроки в строке:
"3.14" in "Число Пи = 3.1415926" True "Алексей" in "Александр Пушкин" False
Выражение for .. in позволяет итерироваться по строке:
example_string = "Привет" for letter in example_string: print("Буква", letter) Буква П Буква р Буква и Буква в Буква е Буква т
Конвертация типов:
num = 999.01 num_string = str(num) print(type(num_string)) <class 'str'> num_string '999.01' bool("Непустая строка") True bool("") False name = "" if not name: print("Имя не заполнено!") Имя не заполнено!
Форматирование строк
1-ый способ форматирования:
template = "%s — главное достоинство программиста. (%s)" template % ("Лень", "Larry Wall") 'Лень — главное достоинство программиста. (Larry Wall)'
https://docs.python.org/3/library/string.html#format-specification-mini-language
2-ой способ:
"{} не лгут, но {} пользуются формулами. ({})".format( "Цифры", "лжецы", "Robert A. Heinlein" ) 'Цифры не лгут, но лжецы пользуются формулами. (Robert A. Heinlein)'
Еще способ:
"{num} Кб должно хватить для любых задач. ({author})".format( num=640, author="Bill Gates" ) '640 Кб должно хватить для любых задач. (Bill Gates)'
И еще f-строки, Python >= 3.6:
subject = "оптимизация" author = "Donald Knuth" f"Преждевременная {subject} — корень всех зол. ({author})" 'Преждевременная оптимизация — корень всех зол. (Donald Knuth)'
Модификаторы форматирования:
num = 8 f"Binary: {num:#b}" 'Binary: 0b1000' num = 2 / 3 print(num) 0.6666666666666666 print(f"{num:.3f}") 0.667
Больше описания и примеров в документации: https://docs.python.org/3/library/string.html
Встроенная функция input() позволяет получить ввод пользователя в виде строки
name = input("Введи свое имя: ") f"Привет, {name}!" Введи свое имя: Александр 'Привет, Александр!'
Байтовые строки (bytes)
Байт — минимальная единица хранения и обработки цифровой информации. Последовательность байт представляет собой какую-либо информацию (текст, картинку, мелодию…)
Байтовая строка – это неизменяемая последовательность чисел от 0 до 255.
b-литерал для объявления байтовой строки:
example_bytes = b"hello" print(type(example_bytes)) <class 'bytes'> for element in example_bytes: print(element) 104 101 108 108 111 example_bytes = b"привет" File "<ipython-input-48-f10cf569d599>", line 1 example_bytes = b"привет" ^ SyntaxError: bytes can only contain ASCII literal characters. Bytes literals are always prefixed with 'b' or 'B'; they produce an instance of the bytes type instead of the str type. They may only contain ASCII characters; bytes with a numeric value of 128 or greater must be expressed with escapes. example_string = "привет" print(type(example_string)) <class 'str'> print(example_string) привет encoded_string = example_string.encode(encoding="utf-8") print(encoded_string) b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' print(type(encoded_string)) <class 'bytes'>
Декодируем байты обратно в строку:
decoded_string = encoded_string.decode() print(decoded_string) привет
Объект None
answer = None
По сути None это значение специального типа NoneType, используемое на практике для обозначения отсутствия значения. Если вы знаете C можете рассматривать его как нулевой указатель.
print(type(None)) <class 'NoneType'> bool(None) False answer = None if not answer: print("Ответ не получен") Ответ не получен income = 0 if not income: print("Ничего не заработали") Ничего не заработали income = None if income is None: print("Еще не начинали продавать") elif not income: print("Ничего не заработали") Еще не начинали продавать
Вы часто увидите None в именованных аргументах функций или методах классов как значение по умолчанию — это обычно применяется тогда, когда аргумент является не обязательным — то есть функция или метод могут работать и тогда когда аргумент явным образом не передали при вызове. Также часто этим значением инициализируют атрибуты экземпляров классов, чтобы потом в нужный момент переопределить каким-то значением.
Конструкции управления потоком
if — проверка условия
Оператор if используется для выполнения каких-либо действий при выполнении условия:
company = "my.com" if "my" in company: print("Условие выполнено!") Условие выполнено! company = "example.net" if "my" in company or company.endswith(".net"): print("Условие выполнено!") Условие выполнено!
if — else
Оператор else позволяет выполнить какой-либо код, если условие в блоке if не выполнилось:
company = "google.com" if "my" in company: print("Условие выполнено!") else: print("Условие не выполнено!") Условие не выполнено!
if — elif — else
Оператор elif используется, когда нужно проверить несколько разных условий друг за другом:
company = "google.com" if "my" in company: print("Подстрока my найдена") elif "google" in company: print("Подстрока google найдена") else: print("Подстрока не найдена") Подстрока google найдена
Аналог тернарного оператора
score_1 = 5 score_2 = 0 winner = "Argentina" if score_1 > score_2 else "Jamaica" print(winner) Argentina
while
Оператор while позволяет выполнять блок кода до тех пор пока выполняется условие:
i = 0 while i < 100: i += 1 print(i) 100
Цикл for, объект range
Выражение for .. in это еще один способ выполнить блок кода — но оно позволяет выполнить блок кода для каждого из элементов из последовательности:
name = "Alex" for letter in name: print(letter) A l e x
Встроенный объект range позволяет итерироваться по целым числам:
for i in range(3): print(i) 0 1 2 result = 0 for i in range(101): result += i print(result) 5050 for i in range(5, 8): print(i) 5 6 7 for i in range(1, 10, 2): print(i) 1 3 5 7 9 for i in range(10, 5, -1): print(i) 10 9 8 7 6
pass
Определяет пустой блок, который ничего не делает
for i in range(100): pass
break
Оператор break позволяет выйти из цикла досрочно:
result = 0 while True: result += 1 if result >= 100: break print(result) 100 for i in range(10): if i == 5: break print(i) 0 1 2 3 4
continue
Оператор continue используется, когда в блоке цикла нужно перейти к следующей итерации цикла без выполнения оставшихся инструкций в блоке:
result = 0 for i in range(10): if i % 2 != 0: continue result += i print(result) 20
Пример управления потоком в python программе
import random number = random.randint(0, 100) while True: answer = input('Угадайте число: ') if answer == "" or answer == "exit": print("Выход из программы") break if not answer.isdigit(): print("Введите правильное число") continue answer = int(answer) if answer == number: print('Совершенно верно!') break elif answer < number: print('Загаданное число больше') else: print('Загаданное число меньше')