Численные типы
Целые числа (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('Загаданное число меньше')