Численные типы
Целые числа (int)
1 2 3 4 5 6 7 8 9 10 11 | num = 13 print(num) 13 num = 0 print(num) 0 num = -10 print(num) -10 |
1 2 3 | num = 100_000_000 print(num) 100000000 |
Встроенная функция type
1 2 3 | num = 13 print(type(num)) <class 'int'> |
Вещественные числа (float)
1 2 3 4 5 6 7 8 9 10 11 | num = 13.4 print(num) 13.4 num = 0.0 print(num) 0.0 num = -10.2 print(num) -10.2 |
1 2 3 | num = 100_000.000_001 print(num) 100000.000001 |
1 2 3 4 | # 1.5 умножить на 10 в степени 2 num = 1.5e2 print(num) 150.0 |
Конвертация типов:
1 2 3 | num = 150.2 print(type(num)) <class 'float'> |
1 2 3 4 5 6 7 | num = int(num) print(num, type(num)) 150 <class 'int'> num = float(num) print(num, type(num)) 150.0 <class 'float'> |
Комплексные числа (complex)
1 2 3 4 5 6 7 8 9 10 | num = 14 + 1j print(type(num)) <class 'complex'> print(num.real) 14.0 print(num.imag) 1.0 |
Модуль decimal для работы с вещественными числами с фиксированной точностью
Модуль fractions для работы с рациональными числами
Основные операции с числами
Сложение:
1 2 | 1 + 1 2 |
1 2 | 1 + 2.0 3.0 |
Вычитание:
1 2 | 10 - 1 9 |
1 2 | 4.2 - 1 3.2 |
Деление:
1 2 | 10 / 2 5.0 |
Делить на 0 нельзя:
1 2 3 4 5 6 7 | 2 / 0 --------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-11-ae0c5d243292> in <module>() ----> 1 2 / 0 ZeroDivisionError: division by zero |
Умножение:
1 2 | 4 * 5.25 21.0 |
Возведение числа в степень:
1 2 | 2 ** 4 16 |
Целочисленное деление:
1 2 | 10 // 3 3 |
Остаток от деления:
1 2 | 10 % 3 1 |
Порядок операций в выражениях с числами:
1 2 3 4 5 | print(10 * 3 + 3) 33 print(10 * (3 + 3)) 60 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 |
Задача: найти расстояние между двумя точками в декартовых координатах.
Решение:
1 2 3 4 5 6 7 | x1, y1 = 0, 0 x2 = 3 y2 = 4 distance = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5 print(distance) 5.0 |
Меняем местами значения 2-х переменных:
1 2 3 4 5 6 7 8 | a = 100 b = 200 print(a, b) 100 200 a, b = b, a print(a, b) 200 100 |
Вместо x, y = 0, 0
1 2 3 4 5 6 7 | x = y = 0 x += 1 print(x) 1 print(y) 0 |
Но нужно помнить об отличии изменяемых (mutable) и неизменяемых (immutable) типов:
1 2 3 4 5 6 7 8 | x = y = [] x.append(1) x.append(2) print(x) [1, 2] print(y) [1, 2] |
Логический тип (bool)
1 2 3 4 5 6 7 8 9 | True True False False result = True print(type(result)) <class 'bool'> |
Оператор «равно»:
1 2 | 13 == 13 True |
Оператор «не равно»:
1 2 | 1 != 2 True |
Операторы сравнения:
1 2 3 4 5 6 7 8 | print(3 > 4) Fasle print(3 <= 3) True print(6 >= 6) True print(6 < 5) False |
1 2 3 | x = 2 print(1 < x < 3) True |
Конвертация типов:
1 2 3 4 | bool(12) True bool(0) False |
Логические выражения
Логическое «и»:
1 2 3 | x, y = True, False print(x and y) Fasle |
Логическое «или»:
1 2 3 | x, y = True, False print(x or y) True |
Логическое отрицание:
1 2 3 | y = False print(not y) True |
Составные логические выражения:
1 2 3 4 | x, y, z = True, False, True result = x and y or z print(result) True |
1 2 3 4 5 | x = 12 y = False print(x or y) 12 |
1 2 3 4 5 | x = 12 z = "boom" print(x and z) boom |
Задача: определить високосный год или нет?
Год является високосным если он кратен 4, но при этом не кратен 100, либо кратен 400.
1 2 3 4 | year = 2017 is_leap = year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) print(is_leap) False |
1 2 3 4 | import calendar print(calendar.isleap(1980)) True |
Строки (str)
Строка – это неизменяемая последовательность юникодных символов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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-строки):
1 2 3 4 5 6 7 | example_string = "Файл на диске c:\\\\" print(example_string) Файл на диске c:\\ example_string = r"Файл на диске c:\\" print(example_string) Файл на диске c:\\ |
Как разбить объявление длинной строки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | example_string = "Perl — это тот язык, который одинаково " \ "выглядит как до, так и после RSA шифрования." \ "(Keith Bostic)" print(example_string) Perl — это тот язык, который одинаково выглядит как до, так и после RSA шифрования.(Keith Bostic) example_string = """ Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует. Bjarne Stroustrup """ print(example_string) Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует. Bjarne Stroustrup |
Как объединить 2 строки в одну?
1 2 3 4 5 | "Можно" + " просто " + "складывать" + " строки" 'Можно просто складывать строки' "Даже умножать!" * 3 'Даже умножать!Даже умножать!Даже умножать!' |
Строки неизменяемые!
1 2 3 4 5 6 7 | example_string = "Привет" print(id(example_string)) 4379064296 example_string += ", Мир!" print(id(example_string)) 4379064192 |
Срезы строк [start:stop:step]
1 2 3 4 5 6 7 8 9 10 11 | example_string = "Курс про Python" example_string[9:] 'Python' example_string = "Курс про Python" example_string[9:15] 'Python' example_string = "Курс про Python" example_string[-6:] 'Python' |
Использование step:
1 2 3 4 5 6 7 | example_string = "0123456789" example_string[::2] '02468' example_string = "Москва" example_string[::-1] 'авксоМ' |
У строк есть методы:
1 2 3 4 5 6 7 8 9 10 11 12 | quote = """Болтовня ничего не стоит. Покажите мне код. Linus Torvalds """ quote.count("о") 6 "москва".capitalize() 'Москва' "2017".isdigit() True |
Оператор in позволяет проверить наличие подстроки в строке:
1 2 3 4 5 | "3.14" in "Число Пи = 3.1415926" True "Алексей" in "Александр Пушкин" False |
Выражение for .. in позволяет итерироваться по строке:
1 2 3 4 5 6 7 8 9 10 | example_string = "Привет" for letter in example_string: print("Буква", letter) Буква П Буква р Буква и Буква в Буква е Буква т |
Конвертация типов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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-ый способ форматирования:
1 2 3 | template = "%s — главное достоинство программиста. (%s)" template % ("Лень", "Larry Wall") 'Лень — главное достоинство программиста. (Larry Wall)' |
https://docs.python.org/3/library/string.html#format-specification-mini-language
2-ой способ:
1 2 3 4 | "{} не лгут, но {} пользуются формулами. ({})".format( "Цифры", "лжецы", "Robert A. Heinlein" ) 'Цифры не лгут, но лжецы пользуются формулами. (Robert A. Heinlein)' |
Еще способ:
1 2 3 4 | "{num} Кб должно хватить для любых задач. ({author})".format( num=640, author="Bill Gates" ) '640 Кб должно хватить для любых задач. (Bill Gates)' |
И еще f-строки, Python >= 3.6:
1 2 3 4 5 | subject = "оптимизация" author = "Donald Knuth" f"Преждевременная {subject} — корень всех зол. ({author})" 'Преждевременная оптимизация — корень всех зол. (Donald Knuth)' |
Модификаторы форматирования:
1 2 3 4 5 6 7 8 9 10 | 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() позволяет получить ввод пользователя в виде строки
1 2 3 4 5 | name = input("Введи свое имя: ") f"Привет, {name}!" Введи свое имя: Александр 'Привет, Александр!' |
Байтовые строки (bytes)
Байт — минимальная единица хранения и обработки цифровой информации. Последовательность байт представляет собой какую-либо информацию (текст, картинку, мелодию…)
Байтовая строка – это неизменяемая последовательность чисел от 0 до 255.
b-литерал для объявления байтовой строки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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'> |
Декодируем байты обратно в строку:
1 2 3 | decoded_string = encoded_string.decode() print(decoded_string) привет |
Объект None
1 | answer = None |
По сути None это значение специального типа NoneType, используемое на практике для обозначения отсутствия значения. Если вы знаете C можете рассматривать его как нулевой указатель.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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 используется для выполнения каких-либо действий при выполнении условия:
1 2 3 4 5 6 7 8 9 10 11 12 13 | company = "my.com" if "my" in company: print("Условие выполнено!") Условие выполнено! company = "example.net" if "my" in company or company.endswith(".net"): print("Условие выполнено!") Условие выполнено! |
if — else
Оператор else позволяет выполнить какой-либо код, если условие в блоке if не выполнилось:
1 2 3 4 5 6 7 8 | company = "google.com" if "my" in company: print("Условие выполнено!") else: print("Условие не выполнено!") Условие не выполнено! |
if — elif — else
Оператор elif используется, когда нужно проверить несколько разных условий друг за другом:
1 2 3 4 5 6 7 8 9 10 | company = "google.com" if "my" in company: print("Подстрока my найдена") elif "google" in company: print("Подстрока google найдена") else: print("Подстрока не найдена") Подстрока google найдена |
Аналог тернарного оператора
1 2 3 4 5 6 | score_1 = 5 score_2 = 0 winner = "Argentina" if score_1 > score_2 else "Jamaica" print(winner) Argentina |
while
Оператор while позволяет выполнять блок кода до тех пор пока выполняется условие:
1 2 3 4 5 6 | i = 0 while i < 100: i += 1 print(i) 100 |
Цикл for, объект range
Выражение for .. in это еще один способ выполнить блок кода — но оно позволяет выполнить блок кода для каждого из элементов из последовательности:
1 2 3 4 5 6 7 8 | name = "Alex" for letter in name: print(letter) A l e x |
Встроенный объект range позволяет итерироваться по целым числам:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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
Определяет пустой блок, который ничего не делает
1 2 | for i in range(100): pass |
break
Оператор break позволяет выйти из цикла досрочно:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 используется, когда в блоке цикла нужно перейти к следующей итерации цикла без выполнения оставшихся инструкций в блоке:
1 2 3 4 5 6 7 8 | result = 0 for i in range(10): if i % 2 != 0: continue result += i print(result) 20 |
Пример управления потоком в python программе
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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('Загаданное число меньше') |