Учебник PYTHON в ЕГЭ
Готовишься к ЕГЭ по информатике и понимаешь, что Python — это твой ключ к успеху, но объем языка пугает, а времени на изучение всего подряд просто нет?
Учи не весь Python, а только то, что реально нужно на ЕГЭ!
Научись решать простые задачи кратко, сила Python — в его лаконичности!
Задачи на Python для ЕГЭ. Каждая задача содержит решение-ответ.
Напишите программу, которая находит сумму цифр натурального числа (например, п = 123456789)
Программа должна обрабатывать натуральные числа любой длины.
Решение:
Функциональный стиль
n = 123456789
print(sum(map(int, str(n)))) # 45
Возможные решения:
Генератор
n = 123456789
print(sum(int(d) for d in str(n))) # 45
Креативный
n = 123456789
print(eval('+'.join(str(n)))) # 45
Математический
n = 123456789
s=0
while n>0:
s+=n%10
n//=10
print(s) # 45
Напишите программу, которая в списке натуральных чисел определит количество таких пар чисел, в которых первый элемент пары больше второго. Под парой подразумевается два числа, стоящие рядом.
Пример списка: s = [12, 1564, 54, 546, 84, 123, 456, 789, 1, 96, 12]
Программа должна корректно обрабатывать список любой длины.
Решение:
Функциональный стиль
s = [12, 1564, 54, 546, 84, 123, 456, 789, 1, 96, 12]
print(sum(1 for a, b in zip(s, s[1:]) if a > b)) # Ответ: 4
Возможные решения:
Императивный стиль
s = [12, 1564, 54, 546, 84, 123, 456, 789, 1, 96, 12]
k = 0
for a, b in zip(s, s[1:]):
if a > b:
k += 1
print(k) # Ответ: 4
Решение через индексы
s = [12, 1564, 54, 546, 84, 123, 456, 789, 1, 96, 12]
k = 0
for i in range(len(s) - 1):
if s[i] > s[i + 1]:
k += 1
print(k) # Ответ: 4
Напишите программу, которая определит, сколько можно составить различных трёхбуквенных слов из букв слова “ЛОГИКА”, в которых каждая буква встречается не более одного раза.
Под словом в данной задаче подразумевается любая комбинация букв, не обязательно осмысленная.
Решение:
from itertools import permutations
print(sum(1 for _ in permutations('ЛОГИКА', 3))) # 120
Возможные решения:
Более читаемый вариант с permutations
from itertools import permutations
print(len(list(permutations('ЛОГИКА', 3))) # 120
Аналитическое решение
На первую позицию можно поставить любую из 6 букв
На вторую позицию - любую из оставшихся 5 букв
На третью позицию - любую из оставшихся 4 букв
6 × 5 × 4 = 120
Ручной перебор с циклами (не рекомндуется)
word = 'ЛОГИКА'
count = 0
for i in range(len(word)):
for j in range(len(word)):
if j != i:
for k in range(len(word)):
if k != i and k != j:
count += 1
print(count) # 120
Напишите программу, которая находит расстояние между точками, расположенными в декартовой системе координат.
Пример точек: A(15, 24) и B(5, -10)
Решение:
С использованием функции dist() библиотеки math - предпочтительно
from math import *
A = (15, 24)
B = (5, -10)
print(dist(A, B)) # 36.40054944640259
Возможные решения:
Алгебраический способ
from math import *
# Координаты точек
x1, y1 = 15, 24
x2, y2 = 5, -10
# Расчёт расстояния
dx = x2 - x1
dy = y2 - y1
print(sqrt(dx**2 + dy**2)) # 36.40054944640259
Алгебраический способ без использования math
# Координаты точек
x1, y1 = 15, 24
x2, y2 = 5, -10
# Расчёт расстояния
dx = x2 - x1
dy = y2 - y1
print((dx**2 + dy**2) ** 0.5) # 36.40054944640259
Найдите элемент списка, который встречается в списка наибольшее количество раз. Гарантируется, что такой элемент один.
Пример списка: s = [1, 2, 2, 3, 4, 4, 4, 5, 1, 6]
Решение:
Ключ и lambda-функция
s = [1, 2, 2, 3, 4, 4, 4, 5, 1, 6]
print(max(set(s), key=lambda x: s.count(x)))
Возможные решения:
Короткий вариант lambda-функции
s = [1, 2, 2, 3, 4, 4, 4, 5, 1, 6]
print(max(set(s), key=s.count)) # Сравниваются не числа, а сколько раз они встречаются в списке
Counter - объект-счетчик, который подсчитывает количество каждого элемента в списке, возвращает ключ/значение - элемент/сколько раз встречается
from collections import Counter
s = [1, 2, 2, 3, 4, 4, 4, 5, 1, 6]
print(Counter(s).most_common(1)[0][0]) # .most_common - метод: (1) - сколько самых частых элементов вернуть? [0] - берём первый элемент из списка результатов? [0] - берём сам элемент из кортежа (элемент, количество)
Напишите программу, которая проверяет, является ли число полиндромом.
Например, n = 45678987654
Решение:
Сравнениие строк
n = 45678987654
print(str(n) == str(n)[::-1]) # True
Возможные решения:
Функциональный стиль
n = 45678987654
print((lambda x: x == x[::-1])(str(n))) # True
# lambda x: x == x[::-1] - Создает анонимную функцию. Принимает один аргумент x. Возвращает True если x равен своей перевернутой версии x[::-1]. Применяется к строке.
Напишите программу, которая проверет, есть ли в списке два числа, которые повторяются трижды.
Программа должна работать при любой длине списка.
Пример списка: s = [1, 2, 1, 2, 1, 2, 3, 4]
Решение:
Через список
s = [1, 2, 1, 2, 1, 2, 3, 4]
p = [el for el in s if s.count(el) == 3]
print(len(p)) # 6 ШЕСТЬ элементов сторки - два числа, повторяющиеся трижды
print(len(set(p))) # 2 ДВА числа встречаются трижды
Возможные решения:
Через множество
s = [1, 2, 1, 2, 1, 2, 3, 4]
p = {el for el in s if s.count(el) == 3}
print(len(p)) # 2 - ДВА числа встречаются трижды
Напишите программу, которая в последовательности N чисел ищет количество чисел кратных 3 и заканчивающихся на 2.
Пример последовательности: s = [7, 14, 12, 19, 25, 33, 41, 8, 42, 16, 23, 50, 72, 5, 28, 37, 11, 44, 30, 9]
Решение:
sum с генератором и 1
s = [7, 14, 12, 19, 25, 33, 41, 8, 42, 16, 23, 50, 72, 5, 28, 37, 11, 44, 30, 9]
print(sum(1 for num in s if num % 3 == 0 and num % 10 == 2))
Возможные решения:
Обычный цикл
s = [7, 14, 12, 19, 25, 33, 41, 8, 42, 16, 23, 50, 72, 5, 28, 37, 11, 44, 30, 9]
counter = 0
for num in s:
if num % 3 == 0 and num % 10 == 2:
counter += 1
print(counter)
sum с булевыми значениями
s = [7, 14, 12, 19, 25, 33, 41, 8, 42, 16, 23, 50, 72, 5, 28, 37, 11, 44, 30, 9]
print(sum(num % 3 == 0 and num % 10 == 2 for num in s))
filter + len
s = [7, 14, 12, 19, 25, 33, 41, 8, 42, 16, 23, 50, 72, 5, 28, 37, 11, 44, 30, 9]
print(len(list(filter(lambda x: x % 3 == 0 and x % 10 == 2, s))))
list comprehension + len
s = [7, 14, 12, 19, 25, 33, 41, 8, 42, 16, 23, 50, 72, 5, 28, 37, 11, 44, 30, 9]
print(len([num for num in s if num % 3 == 0 and num % 10 == 2]))