Полезные библиотеки python для егэ

Доброго времени суток каждому жителю Хабрвилля! Давненько я не писал статей! Пора это исправить!

В сегодняшней статье поговорим о насущной для многих выпускников школ теме — ЕГЭ. Да-да-да! Я знаю, что Хабр — это сообщество разработчиков, а не начинающих айтишников, но сейчас ребятам как никогда нужна поддержка именно сообщества. Ребят опять посадили на дистант. Пока не ясно на какой период, но уже сейчас можно сказать, что ЕГЭ по информатике будет на компьютерах и его можно зарешать при помощи языка Python.

Вот я и подумал, чтобы не получилось как в песне, стоит этим заняться. Я расскажу про все задачи первой части и их решения на примере демо варианта ЕГЭ за октябрь.

Всех желающих — приглашаю ниже!

Быстрый перевод из системы в систему

В Python есть интересные функции bin(), oct() и hex(). Работают данные функции очень просто:

bin(156) #Выводит '0b10011100'
oct(156) #Выводит '0o234'
hex(156) #Выводит '0x9c'

Вывод в интерпретационном режиме

Вывод в интерпретационном режиме

Как вы видите, выводится строка, где 0b — означает, что число далее в двоичной системе счисления, 0o — в восьмеричной, а 0x — в шестнадцатеричной. Но это стандартные системы, а есть и необычные…

Давайте посмотрим и на них:

n = int(input()) #Вводим целое число
 
b = '' #Формируем пустую строку
 
while n > 0: #Пока число не ноль
    b = str(n % 2) + b #Остатот от деления нужной системы (в нашем сл записываем слева
    n = n // 2 #Целочисленное деление
 
print(b) #Вывод

Данная программа будет работать при переводе из десятичной системы счисления в любую до 9, так как у нас нет букв. Давайте добавим буквы:

n = int(input()) #Вводим целое число

b = '' #Формируем пустую строку

while n > 0: #Пока число не ноль
	if (n % 21) > 9: #Если остаток от деления больше 9...
		if n % 21 == 10: #... и равен 10...
			b = 'A' + b #... запишем слева A
		elif n % 21 == 11:#... и равен 11...
			b = 'B' + b#... запишем слева B

'''

И так далее, пока не дойдём до системы счисления -1 (я переводил в 21-ную систему и шёл до 20)

'''

		elif n % 21 == 11:
			b = 'B' + b
		elif n % 21 == 12:
			b = 'C' + b
		elif n % 21 == 13:
			b = 'D' + b
		elif n % 21 == 14:
			b = 'E' + b
		elif n % 21 == 15:
			b = 'F' + b
		elif n % 21 == 16:
			b = 'G' + b
		elif n % 21 == 17:
			b = 'H' + b
		elif n % 21 == 18:
			b = 'I' + b
		elif n % 21 == 19:
			b = 'J' + b
		elif n % 21 == 20:
			b = 'K' + b
	else: #Иначе (остаток меньше 10)
		b = str(n % 21) + b #Остатот от деления записываем слева
	n = n // 21 #Целочисленное деление

print(b) #Вывод

Способ объёмен, но понятен. Теперь давайте используем тот же функцию перевода из любой системы счисления в любую:

def convert_base(num, to_base=10, from_base=10):
    # Перевод в десятичную систему
    if isinstance(num, str): # Если число - строка, то ...
        n = int(num, from_base) # ... переводим его в нужную систему счисления
    else: # Если же ввели число, то ...
        n = int(num) # ... просто воспринять его как число
    # Перевод десятичной в 'to_base' систему
    alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" # Берём алфавит
    if n < to_base: # Если число меньше системы счисления в которую переводить...
        return alphabet[n] # ... вернуть значения номера в алфавите (остаток от деления)
    else: # Иначе...
        return convert_base(n // to_base, to_base) + alphabet[n % to_base] # ... рекурсивно обратиться к функии нахождения остатка

Вызвав функцию вывода print(convert_base(156, 16, 10)) мы переведём 156 из 10 в 16 систему счисления, а введя print(convert_base('23', 21, 4)) переведёт 23 из 4-ичной в 21-ичную систему (ответ: B).

Задача 2

Все задания беру из первого октябрьского варианта (он же вариант № 9325894) с сайта Решу.ЕГЭ.

Решение данной задачи совсем простое: банальный перебор.

print('y', 'x', 'z', 'F') #Напечатаем заголовки таблицы
for y in range(2): #Берём все переменные и меняем их в циклах '0' и '1'
	for x in range(2):
		for z in range(2):
			for w in range(2):
				F = ((not x or y) == (not z or w)) or (x and w) #Записываем функцию
				print(x, y, z, F) #Выводим результат

Результат:

Нам вывелась вся таблица истинности (1 = True, 0 = False). Но это не очень удобно. Обратите внимание, что в задании, функция равно 0, так и давайте подправим код:

print('y', 'x', 'z', 'F') #Напечатаем заголовки таблицы
for y in range(2): #Берём все переменные и меняем их в циклах '0' и '1'
	for x in range(2):
		for z in range(2):
			for w in range(2):
				F = ((not x or y) == (not z or w)) or (x and w) #Записываем функцию
				if not F:
					print(x, y, z, F) #Выводим результат

Результат:

Далее — простой анализ.

Задача 5

Данная задача легко решается простой последовательностью действий в интерпретационном режиме:

Задача 6

Перепечатали и получили ответ:

s = 0
k = 1
while s < 66:
    k += 3
    s += k
print(k)

Задача 12

В очередной раз, просто заменим слова на код:

a = '9' * 1000

while '999' in a or '888' in a:
	if '888' in a:
		a = a.replace('888', '9', 1)
	else:
		a = a.replace('999', '8', 1)
print(a)

Задача 14

Компьютер железный, он всё посчитает:

a = 4 ** 2020 + 2 ** 2017 - 15
k = 0

while a > 0:
    if a % 2 == 1:
    	k += 1
    a = a // 2

print(k)

Задача 16

Опять же, просто дублируем программу в python:

def F(n):
    if n > 0:
        F(n // 4)
        print(n)
        F (n - 1)
print(F(5))

Результат:

Задача 17

Задача с файлом. Самое сложное — достать данные из файла. Но где наша не пропадала?!

with open("17.txt", "r") as f: #Открыли файл 17.txt для чтения
    text = f.read() #В переменную text запихнули строку целиком
a = text.split("n") #Разбили строку энтерами (n - знак перехода на новую строку)

k = 0 #Стандартно обнуляем количество
m = -20001 #Так как у нас сумма 2-ух чисел и минимальное равно -10000, то минимум по условию равен -20000, поэтому...

for i in range(len(a)): #Обходим все элементы массива
	if (int(a[i - 1]) % 3 == 0) or (int(a[i]) % 3 == 0): #Условное условие
		k += 1 #Счётчик
		if int(a[i - 1]) + int(a[i]) > m: #Нахождение минимума
			m = int(a[i - 1]) + int(a[i])

print(k, m) #Вывод

Немного пояснений. Функция with() открывает файл считывает данные при помощи функции read() и закрывает файл. В остальном — задача стандартна.

Задача 19, 20 и 21

Все три задачи — задачи на рекурсию. Задачи идентичны, а вопросы разные. Итак, первая задача:

Пишем рекурсивную функцию и цикл перебора S:

def f(x, y, p): #Рекурсивная функция
	if x + y >= 69 or p > 3: #Условия завершения игры
		return p == 3
	return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or
		   f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий

for s in range (1, 58 + 1): #Перебор S
	if f(10, s, 1): #Начали с 10 камней
		print(s)
		break

Немного пояснений. В рекурсивной функции существует 3 переменные x — число камней в первой куче, y — число камней во второй куче, p — позиция. Позиция рассчитывается по таблице:

Игра

Петя

Ваня

Петя

Ваня

Петя

p

1

2

3

4

5

6

Далее — всё по условию задачи.

Вторая задача на теорию игр:

Все отличия в рамке. Ну и код, соответственно, не сильно отличается:

def f(x, y, p): #Рекурсивная функция
	if x + y >= 69 or p > 4: #Условия завершения игры
		return p == 4
	if p % 2 != 0:
		return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or
			   f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий
	else:
		return f(x + 1, y, p + 1) and f(x, y + 1, p + 1) and
			   f(x * 2, y, p + 1) and f(x, y * 3, p + 1) #Варианты действий


for s in range (1, 58 + 1): #Перебор S
	if f(10, s, 1): #Начали с 10 камней
		print(s)

Отличия:

  1. Выиграл Петя, соответственно, позиция 4

  2. Так как Петя не может выиграть за один ход — он выигрывает за 2 хода (and, а не or на нечётных позициях (играх Пети))

  3. Убрали break, так как нам нужны все S, а не единственный

Последняя вариация задачи:

Сразу код:

def f(x, y, p): #Рекурсивная функция
	if x + y >= 69 or p > 5: #Условия завершения игры
		return p == 3 or p == 5
	if p % 2 == 0:
		return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or
			   f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий
	else:
		return f(x + 1, y, p + 1) and f(x, y + 1, p + 1) and
			   f(x * 2, y, p + 1) and f(x, y * 3, p + 1) #Варианты действий


for s in range (1, 58 + 1): #Перебор S
	if f(10, s, 1): #Начали с 10 камней
		print(s)

Ну и всего лишь 2 отличия:

  1. Позиции 3 или 5, а не 4, так как выиграл Ваня

  2. На второй ход выигрывает Ваня и нам нужно or и and поменять. Я заменил только кратность 2.

Задача 22

Ctrl+C, Ctrl+V — наше всё! :)

for i in range(1, 100000):
	x = i
	L = 0
	M = 0
	while x > 0 :
		L = L+1
		if (x % 2) != 0:
			M = M + x % 8
		x = x // 8
	if L == 3 and M == 6:
		print(i)

Задача 23

Итак, код:

def f(x, y):
	if x > y: #Перегнали цель
		return 0
	if x == y:  #Догнали цель
		return 1
	if x < y: #Догоняем цель тремя методами
		return f(x + 1, y) + f(x + 2, y) + f(x * 2, y)

print(f(3, 10) * f(10, 12)) #Прошло через 10, значит догнали 10 и от де догоняем 12

Так как в условии задачи мы увеличиваем число, но будем числа «догонять». Три метода описаны, ну а пройти через 10 — значит дойти до него и идти от него.

Собственно, это и есть вся первая часть ЕГЭ по информатике решённая на Python.

Ссылка на репозиторий со всеми программами:

Надеюсь, что смог помочь в своей статье выпускникам и готовящимся ;)

Остался один вопрос — нужен ли разбор второй части ЕГЭ по информатике на Python? Оставлю этот вопрос на ваше голосование.

Всем удачи!

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Делаю разбор второй части?

Проголосовали 106 пользователей.

Воздержались 15 пользователей.

Документация

Библиотека работает в Python 3.6+

Немного терминологии

Модуль — это файл с расширением .py, находящийся в библиотеке.

Например, модуль constants — это файл constants.py.


Модуль decorators

1. Декоратор cache

Для чего: мемоизация работы функции.

Пример использования:

from infEGE import cache

@cache
def fib(n):
    if n in {0,1}:
        return 1
    return fib(n - 1) + fib(n - 2)

fib(50)

Если убрать @cache, то вычисляться будет очень долго.


Модуль constants

Для чего: константы для использования в алгоритмах.

Содержимое:

E = 2.718281828459045
PI = 3.141592653589793
maxValue = float('inf')
minValue = float('-inf')

Модуль algebra_logic

1. Функция print_true_table

Синтаксис: print_true_table(variables: str, expretion: str, value: Union[int, bool, ‘all’] = ‘all’) -> None

Для чего:

Вывод таблицы истинности лог.функции expretion от переменных variables.

Если value='all', выводятся все строки таблицы;

Если value=1 или True, выводятся строки таблицы, где функция истинна;

Если value=0 или False, выводятся строки таблицы, где функция ложна.

В качестве лог.операций можно использовать обычные операции Python
или такие эквиваленты:
{"&": " and ", "|": " or ", "~": " not ", "->": "<="}.

Пример использования #1:

from infEGE import print_true_table

print_true_table("xy", "x->y", 1)

Вывод:

xy F
00 1
01 1
11 1

Внимание: в Python приоритет <= выше, чем and, or, not! Ставьте скобки!

Пример использования #2:

from infEGE import print_true_table

print_true_table("xy", "x&(y|x)|y", 0)

Вывод:

xy F
00 0

Пример использования #3:

from infEGE import print_true_table

print_true_table("xzy", "x or z and (y or not x)")

Вывод:

xzy F
000 0
001 0
010 1
011 1
100 1
101 1
110 1
111 1

Модуль combinatorics

1. Функция permutation_with_repeat

Синтаксис: permutation_with_repeat(seq: Union[list, tuple, str], repeat: int = 1)

Для чего:

Возвращает перестановки элкементов итерируемого
обьекта seq с repeat повторениями.

Пример использования:

from infEGE import permutation_with_repeat

for el in permutation_with_repeat('123', 2):
    print(el)

Вывод:

('1', '1')
('1', '2')
('1', '3')
('2', '1')
('2', '2')
('2', '3')
('3', '1')
('3', '2')
('3', '3')

2. Функция permutations

Синтаксис: permutations(seq: Union[list, tuple, str]):

Для чего:

Возвращает перестановки элкементов итерируемого объекта seq.

Пример использования:

from infEGE import permutations

for el in permutations('abc'):
    print(el)

Вывод:

abc
acb
bac
bca
cab
cba

Модуль lists_and_other

1. Функция prod

Синтаксис: prod(seq: Union[list, tuple, set]) -> Union[int, float]

Для чего:

Возввращает произведение элементов итерируемого объекта seq.

Пример использования:

from infEGE import prod

print(prod([5, 8, 6, 100, 54]))

Вывод:

1296000

Модуль string

1. Функция replacing

Синтаксис: replacing(string: str, substring: str, new_string: str, mode: str = ‘обычно’, cnt: Union[int, str] = ‘all’) -> str

Для чего:

Возвращает строку string с заменённой подстрокой
substring на  подстроку new_string в количестве cnt.

Режим "обычно":
                замена стандартным replace

Режим "целиком":
                замена подстроки substring если она не
                является частью большей подстроки.

Пример использования #1:

from infEGE import replacing

print(replacing("Питон плохой тон", "тон", "нот"))

Вывод:

Пинот плохой нот

Пример использования #2:

from infEGE import replacing

print(replacing("Питон плохой тон", "тон", "нот", cnt=1))

Вывод:

Пинот плохой тон

Пример использования #3:

from infEGE import replacing

print(replacing("Питон плохой тон", "тон", "нот", "целиком"))

Вывод:

Питон плохой нот

2. Функция index_n

Синтаксис: index_n(string: str, substring: str, n: int = 1) -> int

Для чего:

Возвращает индекс n-го вхождения СЛЕВА подстроки
substring в строку string. Если такого вхождения
нет, возвращается -1000.

Пример использования #1:

from infEGE import index_n

print(index_n("01230123", "1"))

Вывод:

1

Пример использования #2:

from infEGE import index_n

print(index_n("01230123", "1", 2))

Вывод:

5

Пример использования #3:

from infEGE import index_n

print(index_n("01230123", "1", 3))

Вывод:

-1000

3. Функция is_number

Синтаксис: is_number(n: str) -> bool

Для чего:

Проверяет является ли строка n числом.
Если да возвращается True, иначе - False.

Пример использования #1:

from infEGE import is_number

print(is_number("23"))

Вывод:

True

Пример использования #2:

from infEGE import is_number

print(is_number("2n3"))

Вывод:

False

Модуль system_count

1. Функция to_base

Синтаксис: to_base(number: Union[int, str], old_base: int = 10, new_base: int = 10) -> Union[int, str]

Для чего:

Переводит число number с основанием old_base в число
с основанием new_base.

Пример использования #1:

from infEGE import to_base

print(to_base(5, new_base=2))

Вывод:

101

Пример использования #2:

from infEGE import to_base

print(to_base(15, new_base=16))

Вывод:

F

Пример использования #3:

from infEGE import to_base

print(to_base("FA32", old_base=17, new_base=10))

Вывод:

76638

Пример использования #4:

from infEGE import to_base

print(to_base("FA32", old_base=17, new_base=6))

Вывод:

1350450

Модуль mathematics

1. Функция is_prime

Синтаксис: is_prime(n: int) -> bool

Для чего:

Если n - простое, то возващается True, иначе - False.

Пример использования #1:

from infEGE import is_prime

print(is_prime(5))

Вывод:

True

Пример использования #2:

from infEGE import is_prime

print(is_prime(25))

Вывод:

False

Пример использования #3:

from infEGE import is_prime

print(is_prime(1))

Вывод:

False

2. Функция is_even

Синтаксис: is_even(n: int) -> bool

Для чего:

Если n - чётно, то возващается True, иначе - False.

Пример использования #1:

from infEGE import is_even

print(is_even(12))

Вывод:

True

Пример использования #2:

from infEGE import is_even

print(is_even(25))

Вывод:

False

3. Функция is_odd

Синтаксис: is_odd(n: int) -> bool

Для чего:

Если n - нечётно, то возващается True, иначе - False.

Пример использования #1:

from infEGE import is_odd

print(is_odd(12))

Вывод:

False

Пример использования #2:

from infEGE import is_odd

print(is_odd(25))

Вывод:

True

4. Функция divided

Синтаксис: divided(n: int, d: int) -> bool

Для чего:

Если n нацело делится на d, то возвращается True, иначе - False.

Пример использования #1:

from infEGE import divided

print(divided(12, 5))

Вывод:

False

Пример использования #2:

from infEGE import divided

print(divided(121, 11))

Вывод:

True

5. Функция not_divisible

Синтаксис: not_divisible(n: int, d: int) -> bool

Для чего:

Если n не делится нацело на d, то возвращается True, иначе - False.

Пример использования #1:

from infEGE import not_divisible

print(not_divisible(12, 5))

Вывод:

True

Пример использования #2:

from infEGE import not_divisible

print(not_divisible(121, 11))

Вывод:

False

6. Функция factorial

Синтаксис: factorial(n: int) -> int

Для чего:

Возвращает n! (0! = 1)

Пример использования:

from infEGE import factorial

print(factorial(6))

Вывод:

720

7. Функция factorize

Синтаксис: factorize(number: int) -> list

Для чего:

Возвращает разложение числа number на простые множители в list.

Пример использования #1:

from infEGE import factorize

print(factorize(1))

Вывод:

[]

Пример использования #2:

from infEGE import factorize

print(factorize(11))

Вывод:

[11]

Пример использования #3:

from infEGE import factorize

print(factorize(55))

Вывод:

[5, 11]

8. Функция divisors

Синтаксис: divisors(n: int) -> list

Для чего:

Возвращает все натуральные делители числа n на интервале (1; n).

Пример использования #1:

from infEGE import divisors

print(divisors(1))

Вывод:

[]

Пример использования #2:

from infEGE import divisors

print(divisors(720))

Вывод:

[2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 30, 36, 40, 45, 48, 60, 72, 80, 90, 120, 144, 180, 240, 360]

9. Функция fib

Синтаксис: fib(n: int) -> int

Для чего:

Возвращает n-ый член последовательности Фибоначчи. Нумерация с 0.

Пример использования #1:

from infEGE import fib

print(fib(0))

Вывод:

0

Пример использования #2:

from infEGE import fib

print(fib(1))

Вывод:

1

Пример использования #3:

from infEGE import fib

print(fib(2))

Вывод:

1

Пример использования #4:

from infEGE import fib

print(fib(3))

Вывод:

2

Пример использования #5:

from infEGE import fib

print(fib(2001))

Вывод:

6835702259575806647045396549170580107055408029365524565407553367798082454408054014954534318953113802726603726769523447478238192192714526677939943338306101405105414819705664090901813637296453767095528104868264704914433529355579148731044685634135487735897954629842516947101494253575869699893400976539545740214819819151952085089538422954565146720383752121972115725761141759114990448978941370030912401573418221496592822626

Примечание: Данный алгоритм работает быстрее рекурсивного! Асимптоматика: O(N)

Пакетов для Python создано уже очень много, поэтому ни один человек физически не может изучить их все. Только PyPi насчитывает 47 000 пакетов. В то время как pandas, scikit-learn или numpy у многих на слуху, про перечисленные здесь — уже достаточно старые, но всё ещё полезные — библиотеки часто забывают.

Delorean

Это — отличная библиотека для работы с датами и временем. Работа с временем с помощью неё в Python мне кажется наиболее естественной. Delorean чем-то похожа на Moment.js. Так же стоит отметить отличную документацию и бесчисленное количество отсылок к «Назад в будущее».

from delorean import Delorean
EST = "US/Eastern"
d = Delorean(timezone=EST)

Back to the Future

Назад в будущее

Prettytable

Я почти уверен, что про эту библиотеку вы не слышали, ведь она выложена на GoogleCode, который в мире кода является точным аналогом Сибири.

Несмотря на то, что она была сослана в это холодное, заснеженное и пустынное место, Prettytable остаётся отличной библиотекой для формирования красивого вывода в терминал:

from prettytable import PrettyTable
table = PrettyTable(["животное", "свирепость"])
table.add_row(["Оборотень", 100])
table.add_row(["Гризли", 87])
table.add_row(["Кролик из Кэрбенног", 110])
table.add_row(["Кот", -1])
table.add_row(["Утконос", 23])
table.add_row(["Дельфин", 63])
table.add_row(["Альбатрос", 44])
table.sort_key("свирепость")
table.reversesort = True
+----------------------+------------+
|       животное       | свирепость |
+----------------------+------------+
| Кролик из Кэрбенног |   110      |
|      Оборотень       |   100      |
|        Гризли        |    87      |
|       Дельфин        |    63      |
|       Альбатрос      |    44      |
|        Утконос       |    23      |
|         Кот          |    -1      |
+----------------------+------------+

Snowballstemmer

Ладно, признаюсь, первый раз я установил snowballstemmer из-за крутого названия. Но оказалось, что это действительно очень удобная маленькая библиотечка. Она содержит алгоритмы стемминга для 15 языков (включая русский).

from snowballstemmer import EnglishStemmer, SpanishStemmer
EnglishStemmer().stemWord("Gregory")
# Gregori
SpanishStemmer().stemWord("amarillo")
# amarill

Wget

Наверняка вам не раз приходилось писать методы для какой-то специфической работы с вебом. Но я вас огорчу — вы делали это зря. Ведь уже есть wget. Рекурсивно скачать сайт? Забрать со страницы все изображения? Для wget это не проблема.

import wget
wget.download("http://www.cnn.com/")
# 100% [............................................................................] 280385 / 280385

PyMC

А эта библиотека предназначена для Байесовского анализа. По непонятным причинам эта библиотека используется гораздо реже, чем scikit-learn, а ведь очень зря.

from pymc.examples import disaster_model
from pymc import MCMC
M = MCMC(disaster_model)
M.sample(iter=10000, burn=1000, thin=10)
[-----------------100%-----------------] 10000 of 10000 complete in 1.4 sec

Sh

Я не могу себе позволить, чтобы вы ушли с этой страницы, не зная о sh. Как можно догадаться, sh импортирует в Python команды shell в виде функций. Это — суперудобная возможность, когда вы помните, как сделать что-то с помощью bash, но не помните, как это реализуется на Python (например, рекурсивный поиск по файлам).

from sh import find
find("/tmp")
/tmp/foo
/tmp/foo/file1.json
/tmp/foo/file2.json
/tmp/foo/file3.json
/tmp/foo/bar/file3.json

Fuzzywuzzy

Эта библиотека добавляет классных фич для сравнения данных. Может быть использована для связи записей в различных базах данных.

from fuzzywuzzy import fuzz
fuzz.ratio("Hit me with your best shot", "Hit me with your pet shark")
# 85

Progressbar

Да, да, эта библиотека делает именно то, о чём вы подумали — выводит прогрессбар.

from progressbar import ProgressBar
import time
pbar = ProgressBar(maxval=10)
for i in range(1, 11):
    pbar.update(i)
    time.sleep(1)
pbar.finish()
# 60% |########################################################                                      |

Colorama

Если уж вы занимаетесь добавление прогрессбаров в свои программы, то, может, стоит добавить ещё немного цвета? Справиться с этим вам поможет Colorama.

Colorama

Colorama

Uuid

Наверняка вам приходилось генерировать для пользователей ID, или рассылать покупателям промокоды, или делать ещё что-то, где нужно создать уникальные последовательности. UUID вам в этом поможет:

import uuid
print uuid.uuid4()
# e7bafa3d-274e-4b0a-b9cc-d898957b4b61

И если вы переживаете, что ID кончатся, то не стоит: их количество сравнимо с количеством атомов во вселенной.

Источник: blog.yhat.com

Стандартные библиотеки и сторонние библиотеки Python

Стандартная библиотека состоит из множества модулей, объединенных в пакеты,и поставляется в составе Python. Она включает большое количество функций и классов, выполняющих различные типовые задачи программирования. Там мы мо­жем найти инструменты для сложной обработки строк, объявления новых типов данных, средства для обмена данными по сети, шифрования и дешифрования, ра­боты с файлами, разработки многопоточных приложений и многое другое.

Давайте для примера возьмем модуль datetirne. В нем объявлен класс date, позво­ляющий хранить и обрабатывать значения даты:

from datetime import date

Импортируем класс date из модуля datetime:

now = date.today()

Метод класса today возвращает объект, класса date, хранящий текущее значение даты:

birthday = date(1970, 10, 27)

Создаем еще один объект класса date, хранящий дату 27 октября 1970 года:

delta = now - birthday
days = delta.days

Получаем количество дней, прошедших между этими датами. (Его хранит свойство days класса date.)

Также в стандартной библиотеке объявлен класс Fraction, который мы рассмотрели ранее.

Вы знали что есть сторонние библиотеки работающие с медиаплеером tronsmart orion r28? Недавно на гитхабе встретил, библиотека совместима с Python 2.7 и Python 3.x.

Стандартная библиотека хранится в папке Lib папки, в которую установлен Python. Полные имена сущностей, объявленных в стандартной библиотеке, формируются относительно этой папки.

Помимо стандартной библиотеки, поставляемой в составе Python, мы можем загру­зить и установить любое количество сторонних библиотек. Они разрабатываются силами сторонних программистов ( отчего и получили свое название ), а существует их столько, что мы можем без труда найти ту, что нам нужна.

Все сторонние библиотеки устанавливаются в папку site-packages, что автоматиче­ски создается в упомянутой ранее папке Lib. Полные имена сущностей, объявлен­ных в сторонних библиотеках, формируются относительно этой папки.

Николай Власов



Ученик

(225),
на голосовании



1 год назад

Всем привет, сдаю в этом году егэ по информатике . Можно использовать яп и библиотеки к нему . Есть ли какие-нибудь библиотеки для python, которые могут как-либо облегчить выполнение некоторых заданий?

Голосование за лучший ответ

Библиотеки python для егэ

Три бомбических блока за 10 дней: основы Python, современное программирование и внутреннее устройство языка. Задача курса сформировать в твоей голове понимание «я могу этому научиться»

Ждём тебя✨

Библиотеки python для егэ


Коля Касперский
Учитель

990 ₽ Библиотеки python для егэ

Что будет на курсе?

Этот курс ‐ это обзор возможностей языка Python, который пригодится как в универе, так и в дальнейшей жизни. Курс построен с нуля и условно его можно разделить на три блока: основы Python, современное программирование и внутреннее устройство языка. Задача курса сформировать в твоей голове понимание «я могу этому научиться»

🔥После курса ты сможешь изучать Python самостоятельно. На курсе будет теория, объяснения и практика. Практика построена на примерах из IT, медицины и биологии, например, задачи на анализ генома

Библиотеки python для егэ Библиотеки python для егэ Библиотеки python для егэ Библиотеки python для егэ

Библиотеки python для егэ

Твой преподаватель

Коля Касперский

Информатика

Информатика, аниме, мемы — главное не перепутать порядок.

подробнее о преподе

7 учеников сдали ЕГЭ на 100 баллов

каждый 2-ой на 80+ баллов

каждый 5-ый на 90+

все стобальники вебиума

Расписание курса

Введение в Python и Collab Research

Функциональное программирование

Объектно Ориентированное Программирование

Бонусный урок. Tilda. Твой первый заработок

Математические библиотеки

Задание на финальный проект

Вот что говорят наши выпускники

Библиотеки python для егэ

Полина Щербакова

балловБиблиотеки python для егэ

Весь 11-ый класс познавала информатику с Касперским, сдала ЕГЭ на 96 баллов и счастлива! А потом решила пойти на курс по питону, и не пожалела) Очень понравилась программа, как будто маленький экскурс в мир программирования. После курса лучше стала понимать, что меня ждёт в вузе. Кстати, это отличная возможность понять, действительно ли тебе нравится программирование и готов ли ты с этим связывать свою жизнь и дальше копаться во всяких интересных штуках)) Уже сейчас, сидя на парах по математике, я могу провести параллели со структурой языка программирования и понять, зачем мы проходим ту или иную тему. Из минусов могу выделить только то, что не было проверки дз, но на самом деле, можно было справиться и без этого) В общем, советую!!

Библиотеки python для егэ

Марат Мухамедьянов

балловБиблиотеки python для егэ

Курс Python для ВУЗа оставил только положительные эмоции
Понравилось всё, от подачи материала до красивого окончания вебов 😊
Такого ощущения, что вот, мне это не нравится, не было 😉 Абсолютно все мои ожидания оправдались, получил то, чего хотел. В чате курса было активное обсуждение решения ДЗ, и быть может было бы интереснее организовать время для, например, созвонов в зуме и там делиться своими идеями и мыслями по задачам. 🤠Всё было супер, спасибо😃

Библиотеки python для егэ

Антонина Шлыкова

балловБиблиотеки python для егэ

Всем привет, кто читает этот отзыв! Я бакалавр питерского Политеха по направлению Биотехнология и этот курс я решила пройти в промежуток между защитой диплома и поступлением на магистратуру по той же специальности. Дело в том, что в сфере биотехнологии нередко приходится работать с огромным количеством объемных и однообразных данных, обработка которых в Excel или вручную очень утомительна или просто невозможна.

Ранее я не имела никаких навыков работы с языками программирования от слова совсем, поэтому немного волновалась, буду ли вообще что либо понимать на курсе. Должна сказать, что была в шоке, когда после первого же занятия у меня получилось сделать 4 из 7 заданий. Визжала как счастливый ребенок, когда программа адекватно запрашивала данные и адекватно обрабатывала их за считанные секунды. Спасибо Коле за это!!

Занятия проходили очень увлекательно и нетривиально — ни секунды скуки, теоретический материал всегда разбавлен шутками, Коля чувствует, когда нужно разрядить обстановку, а когда можно добавить немного дополнительного материала для общего развития. На все свои вопросы (иногда абсурдно базовые) Коля давал исчерпывающие ответы на занятиях. Ко многим операциям и концепциям Коля объяснил возможное применение. Порадовало, что все, что я изучила за курс, реально можно было использовать для решения моих внутренних научных проблем. Вне занятий в беседе курса было интересно посмотреть, как каждый по-своему решает одно и то же задание.

Самое приятное то, что курс оправдал ожидания, которые я на него накладывала. В описании говорилось, что курс поможет приобрести установку «Я могу!», именно это и произошло. Сейчас я вполне реально рассматриваю возможность взять курсы программирования на питоне для биологов уже в своей магистерской программе. Страх программирования, как чего-то шаманского, пропал!

Я могу! :)
Спасибо Коле и его команде за это чувство!

Библиотеки python для егэ

Полина Галаганова

балловБиблиотеки python для егэ

Мое направление в университете очень-очень косвенно связано с IT. В общем-то я и не планировала заниматься техническими дисциплинами в ВУЗе от слова совсем, но мне хотелось быстро и качественно освоить базу самого удобного языка программирования. Еще хуже: я никогда серьезно не учила информатику, поэтому для меня все команды и синтаксис — это дивный новый мир. Я переживала, что ничего не пойму и просто потрачу время.

Зря боялась. Колин курс очень доступен для новичков: даже на первых занятиях было не сложно понять, о чем идет речь. Гораздо больше пользы будет, если у вас уже есть база, но если ее нет и вы такой же профан, как я — все равно занимайтесь у Касперского, потому что писать базовые программы вы научитесь моментально (честное слово, даже у меня и моего ноля за информатику первое задание получилось).

Мне очень понравился подход к темам. Не было загонов вроде :»Очень страшна, вырубай», — Коля все подробно объяснял и отвечал на любые (даже очень «глупые») вопросы. (И Тонины комментарии насчет Колиного английского языка — это огонь, на всю жизнь останутся в моем сердечке)

Питон разбирался на пальцах и на куче разных примеров из жизни, даже куда-то философия приплеталась. В общем бóльшая часть базы (за исключением всяких штук с четвертого курса ВУЗа) была понятна.

Подбешивала меня только платформа, с которой мы работали — проблема моего невывозящего компьютера. 🙃

Скриптов нет, но это удобно: к каждому занятию прикрепляется «кодильник», в котором собрано все-все, что разбиралось на вебе.

В целом курс отличный и очень информативный.

UPDATE: на второй неделе учебы у меня повились два предмета (Медиакуммуникационные технологии и Информатика) — Колин курс стал в 10 раз полезнее, потому что мы год будем проходить то, что Касперский и Гречка объяснили за неделю. Отдельное спасибо за Тильду: зачет по медкому — это создание лонгрида на ней (хочу думать, что «отлично» у меня уже в кармане). ❤❤❤

больше отзывов в

Шаблоны программ для задач в ЕГЭ по Информатике на Python

В текущей версии ЕГЭ довольно много заданий, которые можно (а иногда и обязательно) сделать на компьютере, однако их можно существенно упростить, если знать шаблон, в который достаточно дописать условие данной задачи. В этом репозитории я постараюсь собрать все шаблоны, которые были придуманы учителями и учениками в ходе подготовки (а через раздел «Issues» можно предложить и свои шаблоны).
Скачать шаблоны и примеры в формате .py можно, нажав кнопку Code и в ней Download ZIP. Все примеры будут лежать в папке examples, а шаблоны в templates.

Задания

Задание №2

Задание №6

Задание №12

Задание №14

Задание №16

Задание №17

Задание №19-21

Задание №22

Задание №23

Благодарности

Сайту РешуЕГЭ за предоставленные задания

Учитель информатики высшей
категории Жевтило Ирина Аскольдовна

МБОУ «Лицей «Дубна»

Использование
библиотеки itertools при решении задач ЕГЭ по информатике

В встроенном в Python модуле itertools существует
ряд комбинаторных функций. Рассмотрим некоторые из них:

· product() –
прямое произведение одного или нескольких итераторов.

· permutations() –
перестановки и размещения элементов множества.

Данная библиотека позволяет
решать задачи с комбинаторикой, упрощая программу решения.

Вызов модуля itertools:

from itertools import *

Данный модуль можно
использовать для решения задач №8 ЕГЭ по информатике.

Примеры заданий и способы
использования данного модуля.

Пример 1. МАРИНА из букв своего имени составляет слова перестановкой
исходных букв. Сколько различных слов может составить МАРИНА, если первая буква
не может быть гласной?

Аналитический способ решения

Общее количество слов с
учетом, что в слове две буквы «А» (перестановка этих букв не дает нового слова)

Вычтем количество слов,
начинающихся с гласной с учетом 2 букв «А»:

Позиция в слове

*

*

*

*

*

*

Количество букв

3 (МРН)

5

4

3

2

1

Получаем =180 слов

Итого: 360 – 180 = 180

Программа для решения данной
задачи:

from itertools import *

a=’МАРИНА

k=0

for i in set(permutations(a)):

    s=».join(i)

    if s[0] not in ‘АИ‘:

        k+=1

print(k)

В программе
используем

1)    функцию: 
permutations(a), т.к. слова составляются
перестановкой букв;

2)   
используем множества (set), чтобы слова не повторялись;

3)    в условии проверяем отсутствие гласных  в начале слова.

Пример 2. Используем функцию product

Миша составляет
5-буквенные коды из букв К, А, Л, Ь, К, А. Каждая допустимая гласная буква
может входить в код не более одного раза. Сколько кодов может составить Миша?

Аналитический способ решения

Количество слов без «А»

3*3*3*3*3= 35 =243

Количество слов с одной  «А»

5 вариантов *3*3*3*3 = 405

Итого: 243 + 405 = 648

Программа для решения данной
задачи:

from itertools import*

a=’КАЛЬ’

k=0

for i in product(a, repeat=5):

    s=».join(i)

    if s.count(‘А’)<=1 :

        k+=1                               

print (k)

В программе
используем

1)    функцию
product (a, repeat=5):
, т.к. буквы в слове могут повторяться;

2)    в условии проверяем количество гласных  не более 1.

Доброго времени суток каждому жителю Хабрвилля! Давненько я не писал статей! Пора это исправить!

В сегодняшней статье поговорим о насущной для многих выпускников школ теме — ЕГЭ. Да-да-да! Я знаю, что Хабр — это сообщество разработчиков, а не начинающих айтишников, но сейчас ребятам как никогда нужна поддержка именно сообщества. Ребят опять посадили на дистант. Пока не ясно на какой период, но уже сейчас можно сказать, что ЕГЭ по информатике будет на компьютерах и его можно зарешать при помощи языка Python.

Вот я и подумал, чтобы не получилось как в песне, стоит этим заняться. Я расскажу про все задачи первой части и их решения на примере демо варианта ЕГЭ за октябрь.

Всех желающих — приглашаю ниже!

Быстрый перевод из системы в систему

В Python есть интересные функции bin(), oct() и hex(). Работают данные функции очень просто:

bin(156) #Выводит '0b10011100'
oct(156) #Выводит '0o234'
hex(156) #Выводит '0x9c'

Вывод в интерпретационном режиме

Вывод в интерпретационном режиме

Как вы видите, выводится строка, где 0b — означает, что число далее в двоичной системе счисления, 0o — в восьмеричной, а 0x — в шестнадцатеричной. Но это стандартные системы, а есть и необычные…

Давайте посмотрим и на них:

n = int(input()) #Вводим целое число
 
b = '' #Формируем пустую строку
 
while n > 0: #Пока число не ноль
    b = str(n % 2) + b #Остатот от деления нужной системы (в нашем сл записываем слева
    n = n // 2 #Целочисленное деление
 
print(b) #Вывод

Данная программа будет работать при переводе из десятичной системы счисления в любую до 9, так как у нас нет букв. Давайте добавим буквы:

n = int(input()) #Вводим целое число

b = '' #Формируем пустую строку

while n > 0: #Пока число не ноль
	if (n % 21) > 9: #Если остаток от деления больше 9...
		if n % 21 == 10: #... и равен 10...
			b = 'A' + b #... запишем слева A
		elif n % 21 == 11:#... и равен 11...
			b = 'B' + b#... запишем слева B

'''

И так далее, пока не дойдём до системы счисления -1 (я переводил в 21-ную систему и шёл до 20)

'''

		elif n % 21 == 11:
			b = 'B' + b
		elif n % 21 == 12:
			b = 'C' + b
		elif n % 21 == 13:
			b = 'D' + b
		elif n % 21 == 14:
			b = 'E' + b
		elif n % 21 == 15:
			b = 'F' + b
		elif n % 21 == 16:
			b = 'G' + b
		elif n % 21 == 17:
			b = 'H' + b
		elif n % 21 == 18:
			b = 'I' + b
		elif n % 21 == 19:
			b = 'J' + b
		elif n % 21 == 20:
			b = 'K' + b
	else: #Иначе (остаток меньше 10)
		b = str(n % 21) + b #Остатот от деления записываем слева
	n = n // 21 #Целочисленное деление

print(b) #Вывод

Способ объёмен, но понятен. Теперь давайте используем тот же функцию перевода из любой системы счисления в любую:

def convert_base(num, to_base=10, from_base=10):
    # Перевод в десятичную систему
    if isinstance(num, str): # Если число - строка, то ...
        n = int(num, from_base) # ... переводим его в нужную систему счисления
    else: # Если же ввели число, то ...
        n = int(num) # ... просто воспринять его как число
    # Перевод десятичной в 'to_base' систему
    alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" # Берём алфавит
    if n < to_base: # Если число меньше системы счисления в которую переводить...
        return alphabet[n] # ... вернуть значения номера в алфавите (остаток от деления)
    else: # Иначе...
        return convert_base(n // to_base, to_base) + alphabet[n % to_base] # ... рекурсивно обратиться к функии нахождения остатка

Вызвав функцию вывода print(convert_base(156, 16, 10)) мы переведём 156 из 10 в 16 систему счисления, а введя print(convert_base('23', 21, 4)) переведёт 23 из 4-ичной в 21-ичную систему (ответ: B).

Задача 2

Все задания беру из первого октябрьского варианта (он же вариант № 9325894) с сайта Решу.ЕГЭ.

Решение данной задачи совсем простое: банальный перебор.

print('y', 'x', 'z', 'F') #Напечатаем заголовки таблицы
for y in range(2): #Берём все переменные и меняем их в циклах '0' и '1'
	for x in range(2):
		for z in range(2):
			for w in range(2):
				F = ((not x or y) == (not z or w)) or (x and w) #Записываем функцию
				print(x, y, z, F) #Выводим результат

Результат:

Нам вывелась вся таблица истинности (1 = True, 0 = False). Но это не очень удобно. Обратите внимание, что в задании, функция равно 0, так и давайте подправим код:

print('y', 'x', 'z', 'F') #Напечатаем заголовки таблицы
for y in range(2): #Берём все переменные и меняем их в циклах '0' и '1'
	for x in range(2):
		for z in range(2):
			for w in range(2):
				F = ((not x or y) == (not z or w)) or (x and w) #Записываем функцию
				if not F:
					print(x, y, z, F) #Выводим результат

Результат:

Далее — простой анализ.

Задача 5

Данная задача легко решается простой последовательностью действий в интерпретационном режиме:

Задача 6

Перепечатали и получили ответ:

s = 0
k = 1
while s < 66:
    k += 3
    s += k
print(k)

Задача 12

В очередной раз, просто заменим слова на код:

a = '9' * 1000

while '999' in a or '888' in a:
	if '888' in a:
		a = a.replace('888', '9', 1)
	else:
		a = a.replace('999', '8', 1)
print(a)

Задача 14

Компьютер железный, он всё посчитает:

a = 4 ** 2020 + 2 ** 2017 - 15
k = 0

while a > 0:
    if a % 2 == 1:
    	k += 1
    a = a // 2

print(k)

Задача 16

Опять же, просто дублируем программу в python:

def F(n):
    if n > 0:
        F(n // 4)
        print(n)
        F (n - 1)
print(F(5))

Результат:

Задача 17

Задача с файлом. Самое сложное — достать данные из файла. Но где наша не пропадала?!

with open("17.txt", "r") as f: #Открыли файл 17.txt для чтения
    text = f.read() #В переменную text запихнули строку целиком
a = text.split("n") #Разбили строку энтерами (n - знак перехода на новую строку)

k = 0 #Стандартно обнуляем количество
m = -20001 #Так как у нас сумма 2-ух чисел и минимальное равно -10000, то минимум по условию равен -20000, поэтому...

for i in range(len(a)): #Обходим все элементы массива
	if (int(a[i - 1]) % 3 == 0) or (int(a[i]) % 3 == 0): #Условное условие
		k += 1 #Счётчик
		if int(a[i - 1]) + int(a[i]) > m: #Нахождение минимума
			m = int(a[i - 1]) + int(a[i])

print(k, m) #Вывод

Немного пояснений. Функция with() открывает файл считывает данные при помощи функции read() и закрывает файл. В остальном — задача стандартна.

Задача 19, 20 и 21

Все три задачи — задачи на рекурсию. Задачи идентичны, а вопросы разные. Итак, первая задача:

Пишем рекурсивную функцию и цикл перебора S:

def f(x, y, p): #Рекурсивная функция
	if x + y >= 69 or p > 3: #Условия завершения игры
		return p == 3
	return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or
		   f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий

for s in range (1, 58 + 1): #Перебор S
	if f(10, s, 1): #Начали с 10 камней
		print(s)
		break

Немного пояснений. В рекурсивной функции существует 3 переменные x — число камней в первой куче, y — число камней во второй куче, p — позиция. Позиция рассчитывается по таблице:

Игра

Петя

Ваня

Петя

Ваня

Петя

p

1

2

3

4

5

6

Далее — всё по условию задачи.

Вторая задача на теорию игр:

Все отличия в рамке. Ну и код, соответственно, не сильно отличается:

def f(x, y, p): #Рекурсивная функция
	if x + y >= 69 or p > 4: #Условия завершения игры
		return p == 4
	if p % 2 != 0:
		return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or
			   f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий
	else:
		return f(x + 1, y, p + 1) and f(x, y + 1, p + 1) and
			   f(x * 2, y, p + 1) and f(x, y * 3, p + 1) #Варианты действий


for s in range (1, 58 + 1): #Перебор S
	if f(10, s, 1): #Начали с 10 камней
		print(s)

Отличия:

  1. Выиграл Петя, соответственно, позиция 4

  2. Так как Петя не может выиграть за один ход — он выигрывает за 2 хода (and, а не or на нечётных позициях (играх Пети))

  3. Убрали break, так как нам нужны все S, а не единственный

Последняя вариация задачи:

Сразу код:

def f(x, y, p): #Рекурсивная функция
	if x + y >= 69 or p > 5: #Условия завершения игры
		return p == 3 or p == 5
	if p % 2 == 0:
		return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or
			   f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий
	else:
		return f(x + 1, y, p + 1) and f(x, y + 1, p + 1) and
			   f(x * 2, y, p + 1) and f(x, y * 3, p + 1) #Варианты действий


for s in range (1, 58 + 1): #Перебор S
	if f(10, s, 1): #Начали с 10 камней
		print(s)

Ну и всего лишь 2 отличия:

  1. Позиции 3 или 5, а не 4, так как выиграл Ваня

  2. На второй ход выигрывает Ваня и нам нужно or и and поменять. Я заменил только кратность 2.

Задача 22

Ctrl+C, Ctrl+V — наше всё! :)

for i in range(1, 100000):
	x = i
	L = 0
	M = 0
	while x > 0 :
		L = L+1
		if (x % 2) != 0:
			M = M + x % 8
		x = x // 8
	if L == 3 and M == 6:
		print(i)

Задача 23

Итак, код:

def f(x, y):
	if x > y: #Перегнали цель
		return 0
	if x == y:  #Догнали цель
		return 1
	if x < y: #Догоняем цель тремя методами
		return f(x + 1, y) + f(x + 2, y) + f(x * 2, y)

print(f(3, 10) * f(10, 12)) #Прошло через 10, значит догнали 10 и от де догоняем 12

Так как в условии задачи мы увеличиваем число, но будем числа «догонять». Три метода описаны, ну а пройти через 10 — значит дойти до него и идти от него.

Собственно, это и есть вся первая часть ЕГЭ по информатике решённая на Python.

Ссылка на репозиторий со всеми программами:

Надеюсь, что смог помочь в своей статье выпускникам и готовящимся ;)

Остался один вопрос — нужен ли разбор второй части ЕГЭ по информатике на Python? Оставлю этот вопрос на ваше голосование.

Всем удачи!

Давно ищешь все самые полезные функции для Python, которые пригодятся на ЕГЭ по информатике и в разработке?

Тогда лови нашу подборку! Не забудь сохранить.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter. Мы обязательно поправим!

Редакция Без Сменки

Редакция Без Сменки

Вам также будет интересно

Как работает сукцессия?

❓Как работает сукцессия?

В природе ничего не бывает просто так. Если есть голые скалы, то на них…

Лирика Тютчева

Самое важное из лирики Тютчева собрали для тебя на картинке

Сложные проценты

Как представить процент в виде десятичной дроби?
Смещаем десятичную запятую на два знака влево и…

Future Simple

Future Simple — простое будущее время.

Как составить? Проще простого:

🔸используй…


0 комментария

Авторизуйтесь, чтобы оставить комментарий.

Понравилась статья? Поделить с друзьями:
  • Полезное питание сочинение
  • Полезно ли быть фантазером сочинение огэ
  • Полезно или вредно фантазировать сочинение
  • Полезная лексика для егэ по английскому
  • Полезная информация для егэ по математике