На главную BearWakes
МЕТОДЫ INT ВЫПОЛНЯЕМАЯ ФУНКЦИЯ
pow (2, 3)  round (2, 4)  Степень (a, b), округление (x, y), ЕЩЕ: max, min, sum
a % 15 Одновременная кратность 3 и 5 (!)
a = ((m - 1) // 2) * 2 + 1 Проверка на нечетность (!) Всегда будет нечетное с округлением в меньшую сторону (!).
n[:] == n[::-1] Проверка палиндрома (числа одинаково читающегося слева-направо)
   
МЕТОДЫ СПИСКОВ  
   
lst.append(x) Добававляет элемент в конец списка. Эквивалентен [len (a):] = [x]
lst.extend( ) Расширяет один список другим списком: lst[2][1][2].extend(sub_list) или сразу подсписок lst[2][2].append([7000, 700])
lst.clear( ) Удаляет все элементы из списка. Эквивалентно del a [:]
lst.copy( ) Возвращает мелкую копию списка. Эквивалентно a [:]
lst.index(x [, start [, end] ] ) Возвращает индекс в списке 1-го элемента, значение которого равно x. Вызывает ошибку ValueError, если такого элемента нет.
lst.insert( i , x) Вставка элемента x перед  индексом i.  a.insert (0, x) вставляет в начало списка, а a.insert (len (a), x) эквивалентно a.append (x).
lst.pop( [ i ] ) Удаляет и возвращает последний элемент в списке, если не указан его индекс
lst.remove( x ) Удаляет из списка 1-й элемент, значение которого равно x. Если такого элемента нет, возникает ошибка ValueError.
lst.reverse( ) Реверс элементов списка на месте (после удачной операции возвращает None). Экв. list1[i] = list1[i][::-1]
lst.sort(*, key=None, reverse=False) Сортировка элементов списка на месте (аргументы можно использовать для настройки сортировки, см. Sorted () для их объяснения).
lst2 = list[lst1] Создать копию списка lst1. Если записать lst1 = lst2 то будет создана ссылка на тот же объект, а  не новый список.
sorted(lst) Отдает отсортированный список по возрастанию
   
МЕТОДЫ СТРОК Строковые методы не изменяют содержимого объекта, к которому они применяются
   
len(s) Длина строки
chr(число) Отдает код символа в UTF8, 
ord(символ) Отдает по коду UFT8 его символ. 
str [i], str * 3, str1 + str2 Обращение по индексу, Повторение строки, Конкатенация строки
s = 'str'; s = "str"; s = '''str'''; s = """str""" Литералы строк
s = "s\np\ta\nbbb" Экранированные последовательности
s = b"byte" Строка байтов
s = r"C:\temp\new" Неформатированные строки (подавляют экранирование)
s.append( [1, 2, 3] )   или  s.append("Hello") Добавить символ / строку / группу символов в конец строки / списка. S.append(46) - затрёт список?
s.capitalize() Переводит первый символ строки в верхний регистр, а все остальные в нижний
s.casefold() Более агрессивный вариант lower. Действует на любые языки
s.center(width, [fill]) Возвращает отцентрованную строку, по краям которой стоит символ fill (пробел по умолчанию)
s.clear() Тоже самое, что и a [:]. Копия списка с созданием нового объекта
s.copy()  
s.count(str, [start], [end] ) Возвращает количество непересекающихся вхождений подстроки в диапазоне [начало, конец] (0 и длина строки по умолчанию)
s.endswith(<suffix>, <start>, <end>) Определяет оканчивается ли исходная строка s подстрокой <suffix> (частью символов конца строки)
s.endswith(suffix, start, end) Заканчивается ли строка s подстрокой (шаблоном) suffix
s.expandtabs([tabsize]) Возвращает копию строки, в которой все символы табуляции заменяются одним или несколькими пробелами, в зависимости от текущего столбца. Если TabSize не указан, размер табуляции полагается равным 8 пробелам
s.find(str, [start],[end]) Поиск подстроки в строке. Возвращает номер первого вхождения или -1
s.format(*args, **kwargs) Форматирование строки
s.index(str, [start],[end]) Поиск подстроки (символ/лы ) в строке. Возвращает номер первого вхождения или вызывает ValueError. Без start : stop ищет слева
s.insert(1,'Привет') Вставить элемент между индексами 0 и 2 (на индекс 1). Только 1 объект можно
s.isalnum() Состоит ли строка из цифр или букв
s.isalpha() Состоит ли строка из букв
s.isdigit() Состоит ли строка из цифр
s.islower() Состоит ли строка из символов в нижнем регистре
s.isspace() Состоит ли строка из неотображаемых символов (пробел, символ перевода страницы ('\f'), "новая строка" ('\n'), "перевод каретки" ('\r'), "горизонтальная табуляция" ('\t') и "вертикальная табуляция" ('\v'))
s.istitle() Начинаются ли слова в строке с заглавной буквы
s.isupper() Состоит ли строка из символов в верхнем регистре
s.join(список) Сборка строки из списка с разделителем S
s.ljust(width, fillchar=" ") Делает длину строки не меньшей width, по необходимости заполняя последние символы символом fillchar
s.lower() Преобразование строки к нижнему регистру
s.lstrip([chars]) Удаление пробельных символов в начале строки (без параметра)
s.partition(шаблон) Возвращает кортеж, содержащий часть перед первым шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий саму строку, а затем две пустых строки
s.pop( i ) Вырезает индекс с конца, если без (i) и сначала, если цифра. Возвращает значение вырезанного.
s.remove(43)     lst.remove(min(lst)) Удалить по первое попавшееся значение 43 слева направо. Без аргумента удаляет первое слева
s.removeprefix ("Виктор") Удалить из строки все, кроме Виктор, *с версии 3.9
s.removsufix ("Виктор")  
s.replace(шаблон, замена[, maxcount] ) Замена 'шаблона' на замену, maxcount (*с версии 3.10) ограничивает количество замен.   .replace('  ', ' ')
s.reverse() Реверс без аргументов
s.rfind(str, [start],[end]) Поиск подстроки в строке. Возвращает номер последнего вхождения или -1
s.rindex(str, [start],[end]) Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueError
s.rjust(width, fillchar=" ") Делает длину строки не меньшей width, по необходимости заполняя первые символы символом fillchar
s.rpartition(sep) Возвращает кортеж, содержащий часть перед последним шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий две пустых строки, а затем саму строку
s.rstrip([chars]) Удаление пробельных символов в конце строки (без параметра)
s.sort() Сортировка по возрастанию
s.sort(key=len) Сортировка по длине. Можно другую функцию применить
s.sort(reverse=True) Сортировка по убыванию
s.split(символ) Разбиение строки по разделителю
s.starswith(suffix, start, end) Начинается ли строка s с шаблона подстроки
s.startswith(suffix, start, end) Определяет начинается ли исходная строка a подстрокой <suffix> (частью символов)
s.strip([chars]) Удаление пробельных символов в начале и в конце строки
s.swapcase() Переводит символы нижнего регистра в верхний, а верхнего – в нижний
s.title() Первую букву каждого слова переводит в верхний регистр, а все остальные в нижний
s.upper() Преобразование строки к верхнему регистру
s.zfill(width) Делает длину строки не меньшей width, по необходимости заполняя первые символы нулями
n = int(str(n)[0]) * n Достать 1-ю цифру в сторке, если ввод был n = int(input()) (!)
   
СРЕЗЫ Срезы похожи на комбинацию индексации и функции range(). Списочные методы меняют содержимое объекта к которому применяются.
   
if 'love' in s: Оператор принадлежности in
s [start: stop: step] Индексы от Start до Stop (невкл) с шагом Step. Извлечение среза
s [:] Вся строка целиком
s [::-1] Реверсивный вывод - Строка в обратном порядке (шаг отрицательный). Экв. elem.reverse( ) в цикле for
s [-1::-3] При реверсивном выводе с шагом Start будет считаться началом среза справа (!)
s [:5] Первые 5 символов строки
s [5:] Индексы от 5 и до конца
s [-2:] Последние 2 символа строки
s [3:5] = 34, 12 Присвоить новое значение индексам с 3-го по 5-й невкл
s [2:4] = 32, 26  Если аргументов < интервала, то список уменьшится IN [1, 2, 4, 7, 8]  OUT [1, 2, 32, 26]
s [1, 2, 3]     d = s [:] Создаем новый объект d с копией списка a
del s [2] Удаление элемента с индексом 2 из списка
del s [1::2] Удалить все нечетные цифры элементы списка
s [len(s) - 1] или s [-1] Достать последний элемент (символ) в строке
s = s [s:4] + 'a' + s[5:] Заменить в строке символ нельзя. Поэтому, расрезаем, склеиваем с новым символом и пересприсваиваем
str[i::].count(lst[i]) - 1 Пример среза
lst.append(a + b) Добавь в список lst сумму переменных a + b (или просто 1 элемент в конец)
lst.extend(input()) Перебирает аргументы (разбивает на символы) и помещает их в список один за другим в хвостовую часть.
   
МЕТОДЫ СЛОВАРЕЙ Присвоение по новому ключу расширяет словарь, присвоение по существующему ключу перезаписывает его, а
  попытка извлечения несуществующего ключа порождает исключение
classmethod dict.fromkeys(seq[, value]) Создает словарь с ключами из seq и значением value (по умолчанию None).
dict.clear() Очищает словарь.
dict.copy()  Возвращает копию словаря.
dict.get(key [, default] )  Возвращает значение ключа, но если его нет, не бросает исключение, а возвращает default (по умолчанию None).
dict.items() Возвращает пары (ключ, значение).
dict.keys() Возвращает ключи в словаре.
dict.get(key [, default] )  Удаляет ключ и возвращает значение. Если ключа нет, возвращает default (по умолчанию бросает исключение).
dict.popitem()  Удаляет и возвращает пару (ключ, значение). Если словарь пуст, бросает исключение KeyError. Помните, что словари неупорядочены.
dict.setdefault(key [, default] ) Возвращает значение ключа, но если его нет, не бросает исключение, а создает ключ со значением default (по умолчанию None).
dict.update( [other] )  Обн-яет словарь, добавляя пары (ключ, значение) из other. Существующие ключи перезаписываются. Возвр. None (не новый словарь!).
dict.values() -  возвращает значения в словаре
a | b и a |= b Объединение и обновление словарей *с версии 3.10
   
МНОЖЕСТВА Набор неупорядоченных элементов. Отличие set от frozenset, set - изменяемый тип данных, а frozenset - нет. Как со списками и кортежами.
   
len(s) Число элементов в множестве (размер множества).
x in s Принадлежит ли x множеству s.
set.isdisjoint(other) Истина, если set и other не имеют общих элементов.
set == other Все элементы set принадлежат other, все элементы other принадлежат set.
set.issubset(other) или set <= other Все элементы set принадлежат other.
set.issuperset(other) или set >= other Аналогично.
set.union(other, ...) или set | other |  Объединение нескольких множеств.
set.intersection(other, ...) или set & other & Пересечение.
set.difference(other, ...) или set - other -  Множество из всех элементов set, не принадлежащие ни одному из other.
set.symmetric_difference(other); set ^ other - Множество из элементов, встречающихся в одном множестве, но не встречающиеся в обоих.
set.copy() Копия множества.
set.update(other, ...); set |= other |  Объединение.
set.intersection_update(other, ...); set &= other &  Пересечение.
set.difference_update(other, ...); set -= other |  Вычитание.
set.symmetric_difference_update(other); set ^= other - Множество из элементов, встречающихся в одном множестве, но не встречающиеся в обоих.
set.add(elem) Добавляет элемент в множество.
set.remove(elem) Удаляет элемент из множества. KeyError, если такого элемента не существует.
set.discard(elem)  Удаляет элемент, если он находится в множестве.
set.pop()  Удаляет первый элемент из множества. Так как множества не упорядочены, нельзя точно сказать, какой элемент будет первым.
set.clear()  Очистка множества.
   
КОРТЕЖИ tuple Можно складывать и умножать на число. Могут состоять из произвольных элементов. Неизменяемый тип данных
   
tup = 1, 5, True, 'London' Объявление кортежа, можно без ( )
tup = tuple("Hello world!") Преобразовать объекты (например, строки) в кортежи
lst = list(tup)  Преобразовать (неизменяемый) кортеж в список
tup = (20, 10, 13, (1, 2, 3)) Кортеж в кортеже
b = a[3][1] Обращаемся к 4-му элементу кортежа a (подкортежу) и ко 2-му элементу полученного подкортежа.
[a; b) Означает промежуток из чисел от a включительно до b невключительно, соответствует записи range(a, b). 
[b; a) Соответствует записи range(b, a)
   
   
f - строки и форматирование Самые быстрые в исполнении
   
print(f'{fio [-1] } {fio [0][0] }.{fio [1][0] }.')  f-строка со срезами в каждом элементе ФИО от [0]. OUT Козлова Д.М.
print(f"Команда {a} длину", len(a), "символов")  
print(f'''Аденин: {a.count('а')}\nГуанин: {a.count('г')}\n''')       
"message = (  Многострочные f-строки
    f'Hello, {first_name} {last_name}! '  
    f'You are {age}. You are a {profession}.\n' )" Экранированные (служебные) символы Hello\nworld. При воводе выдаст в разных строках. Служ.симв.= 1 знак!
   
v = """Hello_с_новой_строки"""  
print(str, sep=" ", end=" ")     Вывести значения до двух знаков после точки L=68.00 S=314.00
print("Вывели %s строк в %s выражении", %(a, b)) Вывести тип данных переменной a
print('L=' '%0.2f' % (l), 'S=' '%0.2f' %(s)) Используются заполнители { } и .format предпочтительнее, чем txt = 'My name is Timur, I am ' + str(age)
print(type(a)) Соединить все элементы list через =. Если слово написано целиком, то будут разделены буквы через =!
txt = 'My name is {}, I am {},'.format(name,age) Длина введенной строки макс и мин через ключ key
print('='.join(a)) Оператор in в print
print(max(a, b, c, key = len)) Оператор all (!)
print("YES" if "суббота" in a or "воскресенье" in a else "NO") Условия в функции print
print('YES' if all(_ in a for _ in ('@', '.')) else 'NO')  
print('Тимур' if str1 < str2 else "" 'Руслан' if str1 > str2 else "" 'ничья' if str1 == str2 else "")
print('ничья' if str1 == str2 else 'Тимур' if str1 + str2 in 'каменьножницыбумагакамень' else 'Руслан') List comprehension Списочные выражения
print('Тимур' if T + R in win else 'ничья' if T == R else 'Руслан') if b in dict[a]
   
ВЫВОД  
   
print(*lst) Распаковка спискавывод элементов списка без [скобок]
print(*list(lst[:][k - 1]), end='', sep='') Вывод k-1 (2 напр.) символа во всех эелементах списка OUT: 234 из ['123', '234', '345']
print(*list(lst[j][k - 1:k]), end='', sep='') Вывод через for j in range каждый j-й элемент
print('YES' if all(_ in a for _ in ('@', '.')) else 'NO')  Оператор all in (можно и без all)
print("YES" if "суббота" in a or "воскресенье" in a else "NO")  
print('='.join(lst))  Соединить элементы через =
print(max(a, b, c, key = len))     Макс через ключ len
   
   
СПИСОЧНЫЕ ВЫРАЖЕНИЯ и ВВОД  
   
str = input().split() Ввод списка через пробел, без функции map в случае, если ввод смешанными данными. Иначе 
lst = list(map(int, input().split())) Ввести список через пробел и преобразовать его в список из чисел
a, b, c = map(int, input().split()) Ввод 3-х чисел через пробел через map
a, b, c, d = [int(input()) for _ in range(4)] Ввод в цикле с присвоением переменным
a, b = input()[0], input()[0] Забрать 0-й индекс из строки
lst = [i[0] for i in input().split()] Ввод только первых букв списка
str = [input() for i in range(a)] Ввод нескольких строк в отдельном окне
lst = list(map(int, input().split())) Ввести список через пробел и преобразовать его в список из чисел
lst = list(map(int, input())) Пример ввода при работе со срезами (фунциональное програмирование)
lst = list(map(chr, list(range(97, 97 + n)))) Вывести количество символов Unicode начиная с 'a'
str = list(input().upper()) Когда нужно изменить регистр введнных символов в списке
str = input().rjust(6,'0') Когда нужно добавить к строке еще нули до длины в 6.
lst = list(map(ord, input())) Ввести и преобразовать все символы в ASCII код. Далее просто sum(n), для сложения элементов
lst = sorted(list(map(int, input().split()))) Ввести и сразу отсортировать список (метод sorted НЕ изменяет исходный список (!))
lst = list(reversed(a) Вывести элементы списка в обратном порядке. Как и b [::-1] (!)
str = len(input()) Преобразовать в длину строку
count += int(input()) Расширенный оператор присваивания. Равносильно: a = int(input()) count += a
strings = [input() for i in range(a)] Ввод нескольких строк в отдельном окне
timur, ruslan = (game[input()] for _ in '') Собрать 2 ввода в 2 переменные строки
n = map(int, input().split())  
[0 for i in range(10)] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[i ** 2 for i in range(1, 8)] [1, 4, 9, 16, 25, 36, 49]
[i * 10 for i in numbers] [10, 140, 50, 90, 120]
[c * 2 for c in word] ['HH', 'ee', 'll', 'll', 'oo']
[m[0] for m in words] ['o', 't', 't', 'f', 'f', 's']
[i for i in numbers if i < 10] [1, 5, 9]
[m[0] for m in words if len(m) == 3] ['o', 't', 's']
[i[1:] for i in keywords] ['ne', 'wo', 'hree',....]
[i ** 3 for i in range(10, 21)] Кубы чисел от 10 до 20 заполнить список
[len(i) for i in keywords] Вывести длины строк списка
[i for i in keywords if len(i) >= 5] Вывести все строки, длины которых >= 5 
[i for i in range(100, 1001) if str(i)[0] == str(i)[-1]] Список всех чисел палиндромов от 100 до 1000.
print(*[i**2 for i in range(1, int(input())+1)], sep='\n') Квадрат каждого числа, введенного с клавиатуры
print(*[int(i) ** 3 for i in input().split()], sep=' ')  Куб каждого числа, веденного через пробел
print('\n'.join(input().split()))  Вывести слова, веденные через пробел в каждой новой строке
print(*input().split(), sep = '\n') Тоже самое
print(*[int(char) for char in input() if char.isdigit()], sep='') Вывести только цифры из введенной в перемешку строки
print(*[i for i in input() if i.isdigit()], sep="") Тоже самое
list1 = [list(reversed(el)) for el in list1] Меняет элементы списка в обратную сторону (см. Reverse())
   
ЛОГИЧЕСКИЕ ПАТТЕРНЫ Duck Typing - Утичный полиморфизм (можно сравнивать любые типы данных)
   
or x or y.  (x * y). 0*0=0, 0*1=0, 1*0=0, 1*1=1
and x and y. (a + y). 0*0=0, 0+1=1, 1+0=1, 1+1=1
XOR Исключающее ИЛИ (сложение по модулю 2, антиэквиваленция). 0+0=0, 0+1=1, 1+0=1, 1+1=0 (!)
not более низкий приоритет, чем операторы сравнения, так not a == b интерпретируется как not (a == b).
x -> y Импликация. x следовательно y. Предпосылка (x) и вывод (y). 0->0=1, 0->1=1, 1->0=0, 1->1=1. Из лжи может следовать истина
x = y Эквиваленция (в обе стороны работает. если там ноль и ноль - значит ноль). 0 0=1, 0 1=0, 1 0=0, 1 1=1.
x != y Антиэквиваленция (как XOR). 0 0=0, 0 1=1, 1 0=1, 1 1=0
flag = True…    flag = (x % 10 == 0) or flag Чтобы не потерять значение при единичной сработке (0 or 1 == 1, 1 or 1 == 0). Нашел такой флаг, или нашел ранее...
max_2(x, max_2(y, z)) Большее из 3-х
кит < кот < котенок Лексикографическое сравнение
help имя_функции Man (выдает инфу между ```    ```)
   
   
REGEX import re. Символ "r" впереди кавычек означает "сырая строка", т.е. как ее видим в кавычках - это 
  чтобы избегнуть наращивания знаков экранирования.
re.match(pattern, string) Метод ищет по заданному шаблону в начале строки
re.search(pattern, string) Ищет не только в начале строки
re.findall(pattern, string) Возвращает список всех найденных совпадений. У метода findall() нет ограничений на поиск в начале или конце строки
re.split(pattern, string, [maxsplit=0]) Метод разделяет строку по заданному шаблону.
re.sub(pattern, repl, string) Ищет шаблон в строке и заменяет его на указанную подстроку. Если шаблон не найден, строка остается неизменной.
re.compile(pattern, repl, string) Собрать регулярное выражение в отдельный объект, который может быть использован для поиска.
. Один любой символ, кроме новой строки \n.
? 0 или 1 вхождение шаблона (символа) слева
+ 1 и более вхождений шаблона (символа) слева
* 0 и более вхождений шаблона (символа) слева
\w Любая цифра или буква  и \W — все, кроме буквы или цифры
\d Любая цифра [0-9] и \D — все, кроме цифры
\s Любой пробельный символ и \S — любой непробельный символ
\b Граница слова
[ .. ] Один из символов в скобках ([^..] — любой символ, кроме тех, что в скобках)
\ Экранирование специальных символов, ( \. означает точку или \+ — знак «плюс» )
^ и $ Начало и конец строки (последовательности символов) соответственно
{n, m} От n до m вхождений ({,m} — от 0 до m). Указывается число повторений предыдущего символа, если 1 параметр
a|b Соответствует a или b. Логическое ИЛИ
() Группирует выражение (символы внутри) и возвращает найденный текст
\t, \n, \r Символ табуляции, новой строки и возврата каретки соответственно
[] Заменяет символ из квадратных скобок
- Задает символ, которого не должно быть
[^ ] Задает 1 символ из не содержащихся в квадратных скобках
r"D:\\Downloads.." Будет убирать все служебные символы (\n например). Нужно экранировать D:\\n D:\\t (tab). 
r"""cvc/(**vcvcvcvc///()(/vcv""" Экранирование многострочных в print е
   
Python 3.10  
match var: case + без print вывод Сопоставление структурного образца вместо if-else
  Менеджеры контекста: с (open ('output.log', 'w') как fout, open ('input.csv') как fin):  fout.write (fin.read ())
Union [int, float] был полностью упрощен до int | float . def add (a: int | float, b: int | float):  return a + b
   
   
WHILE Условный оператор, цикл с неизвестным числом повторений
   
while x > 0: Проверка условия НА ВХОДЕ в цикл
    оператор 1  
    if условие:  
        continue  Срезать ("круг на стадионе"), цикл и прийти к началу. 
    if условие:  
        break Прервать цикл (минуя else) при выполнении 2-го условия if (пожарная ситуация, допустим)
else:  
    после всех итераций Выполнить после всех итераций
дальнейшая программа  
   
FOR  
   
for el in object: Если элемент присутствует в объекте. Можно использовать el, i, j, k или _. Объектом может быть что угодно, хоть срез.
    инструкция  
   
for i in range(start, stop, step): При отрицательном шаге писать range(-4, -10, -1), чтобы не генерировал пустую последовательность (не исполнялся)
    инструкция print(i) Выведет от 0 до 10 - произведется 10 итераций цикла. 
print('End') Выведет End в любом случае
   
IF  
   
if условие: Если это условие выполняется, то программа дальше уже не проверяет условия elif
    инструкция  
elif условие: Иначе если
    инструкция  
else:  
    print('Ни одна проверка не прошла') Выполнится, если все проверки до него будут ложными (!)
   
FLAG Сигнальная метка
   
num = int(input())  
flag = True Флаговые переменные могут называться, напримр is_prime
for i in range(2, num):  
    if num % i == 0: Если исходное число делится на какое-либо отличное от 1 и самого себя
        flag = False Изменение значения
if num == 1:  
    print('Это единица, она не простая и не составная')   
elif flag == True: Изменение значения
    print('Число простое')  
else:  
    print('Число составное')  
   
   
MATH  
   
int() Округляет число в сторону нуля
round(x) Округляет число x до ближайшего целого. Если дробная часть числа равна 0.5, то число округляется до ближайшего четного числа
round(x, n) Округляет число x до n знаков после точки
floor(x) Округляет число x вниз («пол»)
ceil(x) Округляет число x вверх («потолок»)
abs(x) Модуль числа x (абсолютная величина)
   
Корни, логарифмы, степени и факториал  
sqrt(x) Квадратный корень числа x
pow(x, n) Возведение числа x в степень n
log(x) Натуральный логарифм числа x. Основание натурального логарифма равно числу e
log10(x) Десятичный логарифм числа x. Основание десятичного логарифма равно числу 10
log(x, b) Логарифм числа x по основанию b
factorial(n) Факториал натурального числа n
   
Тригонометрия  
degrees(x) Преобразует угол x, заданный в радианах, в градусы
radians(x) Преобразует угол x, заданный в градусах, в радианы
cos(x) Косинус угла x, задаваемого в радианах
sin(x) Синус угла x, задаваемого в радианах
tan(x) Тангенс угла x, задаваемого в радианах
acos(x) Возвращает угол в радианах от 00 до \piπ, cos которого равен x
asin(x) Возвращает угол в радианах от - \frac{\pi}{2}− 2π ​   до \frac{\pi}{2} 2π​ , sin которого равен x
atan(x) Возвращает угол в радианах от - \frac{\pi}{2}− 2π ​   до \frac{\pi}{2} 2π​ , tan которого равен x
atan2(y, x) Полярный угол (в радианах) точки с координатами (x, y)
   
Список констант модуля math (встроенных математические константы):  
pi Число \pi = 3.141592653589793π=3.141592653589793
e Число e = 2.718281828459045e= 2.718281828459045 (константа Эйлера)
   
ЧТЕНИЕ ИЗ ФАЙЛА  
   
with open("test.txt") as file: Диспетчер / менеджер контекста. Автоматически закроет файл после работы.
    for line in file:  Считает информацию и выведет по строке (1 цикл = 1 строка)
        print(line)  
   
file = open('data/text.txt', 'r') Не лучший способ, открытия и закрытия файла.
print(file.read())  Выведет на экран все содержимое.
print(file.read(25)) Выведет на экран первые 25 символов.
file.close()  
   
ОБРАБОТЧИК ИСКЛЮЧЕНИЙ. Конструкция «try - except»  
   
x = 0  
while x == 0:  
    try:  
        x = int(input('Введите число: '))  
        x += 5  
        print(x)  
    except ValueError:  Обработка ошибки (ValueError) с выводом принта. Ошибку можно любую обозначить.
        print('Введите ИМЕННО число: ')  
    excepr ZeroDivisionError:  
        print('На ноль делить нельзя') Обработка ошибки (ZeroDivisionError)
    else:   
        print('Если все правильно')  
    finally:   
        print('Напечатает в любом случае')    
   
DEF  
   
def max_2(x, y):  
    if x > y:  
        return x Оператор возврата значения фукнции после проведенного расчета и ПРЕКРАЩАЕТ ВЫПОЛНЕНИЕ
    return y Возращает иное значение
max_2() Вызов функции с параметрами по умолчанию (x, y)
   
* lambda  Создает объект и возвращает его в виде результата.
* return  Передает объект результата вызывающей программе.
* yield  Передает объект результата вызывающей программе и запоминает, где был произведен возврат.
   
ООП  
   
Функции ВНЕ классов, а МЕТОД внутри класса.
class чертеж робота
Объект сам робот
Наследование добавление полезных опций к чертежу робота
Полиморфизм общий функционал
Инкапсуляция защита внутренних данных самого класса
Поле (в классах) == Переменная (вне классов)  
   
class Cat:  
    name = None Поле / значение. Навание полей часто совпадает с парамертрами def (ниже) (!)
    age = None  Поле / значение
    isHappy = None  
   
    def set_data(self, name, age isHappy) def доступен для обоих объектов. self всегда в качестве 1-го параметра чтобы обращаться к значениям (полям) внутри класса
        self.name = name Обращаемся к class Cat через self, в поле name класса Cat устанавливаем значение, которое передается внутри функции (в скобках)
        self.age = age  
        self.isHappy = isHappy  
   
    def get_data(self)  
        print(self.name, 'age:', self.age, '. Happy:', self.isHappy)  
   
cat1 = Cat() Создаем объект cat1 на основе класса Cat
cat1.set_data('Барсик', 3, True) Присвоим все значения в 1 строке
   
cat2 = Cat()  
cat2.set_data('Жопен', 2, False)  
   
 МОДУЛИ  
   
import time as start  
print('Time: ', time.time() - start, 's')  
   
time.sleep(3)  
   
inport datetime as d Можно указать псевдоним
print(d.datetime.now().time().hour)  
   
inport sys, os, platform, random, array, math Так плохо - в каждой строке по PEP8
print(sys.path) Путь к текущему проекту
print(os.name)  ОС пользователя
print(platform.system())  
   
КОНСТРУКТОРЫ КЛАССОВ  
   
class Cat:  
    name = None Поле / значение. Навание полей часто совпадает с парамертрами def (ниже) (!)
    age = None Поле / значение
    isHappy = None  
   
    def __init__(self, name, age isHappy) Создаем конструктор __init__
        self.set_data(name, age isHappy) Устанавливаем значения         
        self.get_data() Получаем значения (выводим)?
   
    def set_data(self, name, age, isHappy):...  
   
    def get_data(self):...  
   
cat1 = Cat('Барсик', 3, True) Удалили set_data и теперь установка данных происходит в момент создания самого объекта (!) Объект 1 - и сразу вывод
cat2 = Cat('Жопен', 2, False) Удалили set_data и теперь установка данных происходит в момент создания самого объекта (!) Объект 2 - и сразу вывод
   
ПЕРЕОПРЕДЕЛЕНИЕ МЕТОДОВ  
   
class Cat:  
    name = None Поле / значение. Навание полей часто совпадает с парамертрами def (ниже) (!)
    age = None Поле / значение
    isHappy = None  
   
    def __init__(self, name, age isHappy) Создаем конструктор __init__
        self.set_data(name, age isHappy) Устанавливаем значения         
        self.get_data() Получаем значения (выводим)?
   
    def set_data(self, name = None, age = None, isHappy = None): По умолчанию параметр = None
        self.name = name                    
        self.age = age  
        self.isHappy = isHappy  
   
    def get_data(self):...  
   
cat1 = Cat('Барсик', 3, True) Удалили set_data и теперь установка данных происходит в момент создания самого объекта (!) Объект 1 - и сразу вывод
cat1.set_data('John', 2, False) Переопределение методов
   
cat2 = Cat('Жопен', 2, False) Удалили set_data и теперь установка данных происходит в момент создания самого объекта (!) Объект 2 - и сразу вывод
   
НАСЛЕДОВАНИЕ, ПОЛИМОРФИЗМ, ИНКАПСУЛЯЦИЯ  
   
class Building:  
    year = None Поле year в классе
    city = None  
   
    def __init__(self, year, city) Конструктор
        self.year = year Обращаемся к полю year в классе и будем получать значение из конструктора
        self.city = city  
   
    def get_info(self)  
        print('Year:', self.year, '. City:', self.city)  
   
  Класс наследник родителя Building
class School(Buildig): Дополнительный функционал для этого класса (к имеющемуся родителю Building)
    pupils = 0  
   
    def __init__(self, pupils, year, city): Передать данные в конструктор, вызывает superclass (класс - родитель)
        super(School, self).__init__(year, city)  
        self.pupils = pupils  
   
    def get_info(self) Сначала выводим из метода get_info класса Building [код для примера и возможностей изменения]
        super().get_info() И дополнительно еще выводим
        print('Pupils')  
  Класс - наследник родителя Building
   
class House(Building):  
    pass Класс - наследник родителя School (!) Наследует поля Building + School [код для примера]
   
   
class House2(School): Обращаемся к классу School, который наследует от Building
    pass Будет выбран метод get_info из класса School (!) а не Building
   
   
school = School(100, 2000, 'Moscow') Будет выбран метод get_info из класса Building
school.get_info()  
house = House(2000, 'Moscow')  
shop = Shop(2000, 'Moscow') Пример инкапсуляции (защиты), которая плохо реализована.
shop.get_info() В Python только вывести нельзя будет. Толку от такой защиты нет.
   
ДЕКОРАТОРЫ ФУНКЦИЙ Нужны для того, чтобы выполнить проверку ДО функции. Полезны для создания сайтов, или приложений на Android
   
import webbrowser  
   
def validator(func):  
    def wrapper(): Вложенная функция 
        if "." in url:   
            func()  
        else:  
            print('Неверный URL')  
    return wrapper  
   
ATvalidator Декоратор (можно будет использовать много раз, упомянув его)
def open_urt(url):  
    webbrowser.open(url)  
   
open_url('https://ya.ru')  
   
ЛЯМБДА ФУНКЦИЯ Анонимная функция (возвратить значение и забыть переменную). Функциональное програмирование
   
func = lambda x, y: x * y Функция принимает на вход параметры, делает вычисление и возвращает результат без return
print(*filter(lambda x: x > 0, n)) Вместо n в print можно написать выражение для ввода (1 строка). Без переменной вернет bool
print(*enumerate('abcd'))  Нумерация элементов последовательности. Принимает на вход 1 параметр (строку, или список). OUT: кортеж (0, 'a') (1, 'b') (2, 'c') (3, 'd')
print(any((True, False, True)))  Возвращает True, если 1 элемент True
print(all((True, False, True))) Возвращает True, если ALL элемент True
print(*itertools.perutations({1, 2, 3})) Перестановка Выдаст все варианты расположения 1 2 и 3 в лексикографическом порядке
   
DATA TYPES Иерархия типов в ООП
   
1. Числа (Numeric Type)   int,  float, complex – комплексное число
2. Словари (Mapping Types)  
3. Логические переменные (Boolean Type) Функции bool(), type(), isinstance() - когда надо получить иерархичный тип
4. Множество (Set Types)  Неизменяемый тип данных, где нет повторяющихся элементов
5. Последовательность (Sequence Type) Строки, Списки, Кортежи (неизм)
6. NoneType Тип данных NoneType, Литерал None
   
Функция Принимает параметры (аргументы), выполняет какие-то действия над аргументами и возвращает результат этого действия.
Метод          (* имя_объекта.имя_метода(параметры) Специализированная функция, тесно связанная с объектом. То есть метод — функция, применяемая к объекту
   
ПЕРЕБОР ЭЛЕМЕНТОВ ДВУМЕРНОГО СПИСКА  
   
list1 = [[1, 7, 8], [9, 7, 102], [6, 106, 105], [1, 2, 3]] list1 = [[1, 7, 8], [9, 7, 102], [6, 106, 105], [100, 99, 98, 103], [1, 2, 3]]
maximum = -1 maximum = -1
for i in range(len(list1)): for el in list1:
    for j in range(len(list1[i])):     if max(el) > maximum:
        if list1[i][j] > maximum:         maximum = max(el)
            maximum = list1[i][j]  
print(maximum) print(maximum)
   
РЕВЕРС ЭЛЕМЕНТОВ СПИСКА list1 = [list(reversed(el)) for el in list1]
   
list1 = [[1, 7, 8], [9, 7, 102], [102, 106, 105],  [1, 2, 3]] list1 = [[1, 7, 8], [9, 7, 102], [102, 106, 105], [1, 2, 3]]
for i in range(len(list1)): for elem in list1:
    list1[i] = list1[i][::-1]     elem.reverse()
   
РЕВЬЮ  
   
* Перебирать все числа от 2 до num - 1 не имеет смысла.  Достаточно проверить числа от 2 до num // 2 + 1.
* Правую границу num // 2 + 1 проверки можно улучшить, если заметить,  что у любого составного числа есть делитель (отличный от 1), не превосходящий квадратного корня из числа. 
  Таким образом, имеет смысл перебирать делители от 2 до sqrt(n + 1), то есть range(2, int(num ** 0.5) + 1).