Автор: Яндекс Учебник
Уровень: Простой
ПОКА нашлось (44) ИЛИ нашлось (9299) ИЛИ нашлось (49)
заменить (49, 944)
заменить (44, 2)
заменить (9299, 4)
На вход приведённой выше программе поступает строка, которая начинается с цифры «4», а затем содержит n цифр «9» (3<n<1 000).
Определите, сколько различных строк может получиться в результате её работы.
my_set = set()
for n in range(4, 1000):
s = '4' + '9' * n
while '44' in s or '9299' in s or '49' in s:
s = s.replace('49', '944', 1)
s = s.replace('44', '2', 1)
s = s.replace('9299', '4', 1)
my_set.add(s)
print(len(my_set))
Ответ: 3
my_set = set()
- Создание пустого множества my_set для хранения уникальных строк
for n in range(4, 1000):
- Цикл по значениям n от 4 до 999 включительно
s = '4' + '9' * n
- Создание строки, состоящей из цифры '4' и n цифр '9' (например, при n=4: '49999')
while '44' in s or '9299' in s or '49' in s:
- Цикл выполняется, пока в строке есть хотя бы одна из подстрок: '44', '9299' или '49'
s = s.replace('49', '944', 1)
- Замена первой найденной подстроки '49' на '944'
s = s.replace('44', '2', 1)
- Замена первой найденной подстроки '44' на '2'
s = s.replace('9299', '4', 1)
- Замена первой найденной подстроки '9299' на '4'
my_set.add(s)
- Добавление полученной строки в множество (автоматически исключает дубликаты)
print(len(my_set))
- Вывод количества уникальных строк в множестве
Please open Telegram to view this post
VIEW IN TELEGRAM
2 6❤🔥5🔥3
def create_counter():
count = 0 # Внутреннее состояние
def counter():
nonlocal count
count += 1
print("Текущий счет:", count)
return counter
my_counter = create_counter()
my_counter() # Текущий счет: 1
my_counter() # Текущий счет: 2
Каждый вызов my_counter() увеличивает внутренний счетчик, который "запомнен" внутри функции. Это и есть замыкание!
- Хранить состояние между вызовами
- Создавать "приватные" переменные
- Сделать код более модульным и безопасным
Please open Telegram to view this post
VIEW IN TELEGRAM
4❤🔥3❤3🔥1
19784
#kege по информатике #ЕГЭ23Автор: kompege.ru
Уровень: Базовый
У исполнителя имеются две команды, которые обозначены латинскими буквами:
A. Вычти 2
B. Если число чётное, раздели на 2, иначе вычти 3
Программа для исполнителя – это последовательность команд. Сколько существует программ, которые преобразуют исходное число 98 в число 1 и при этом траектория вычислений не содержит число 28?
def F(a, b):
if a < b or a == 28:
return 0
if a == b:
return 1
else:
return F(a-2, b) + F(a // 2 if a % 2 == 0 else a - 3, b)
print(F(98, 1))
Ответ: 12318
def F(a, b):
Объявление функции F с двумя параметрами a и b.
if a < b or a == 28:
- Проверка условий: если a меньше b ИЛИ a равно 28.
return 0
- Возвращает 0, если выполнилось условие выше.
if a == b:
- Проверка, если a равно b.
return 1
- Возвращает 1, если a равно b.
else:
- Если ни одно из предыдущих условий не выполнилось.
return F(a-2, b) + F(a // 2 if a % 2 == 0 else a - 3, b)
- Рекурсивный вызов функции F с разными аргументами
print(F(98, 1))
- Вызов функции F с аргументами 98 и 1, и вывод результата.
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤5❤🔥4🔥2
Это обычный способ создания списков через цикл
for
, но более лаконичный и читаемый.res = []
for i in range(10):
if i % 2 == 0:
res.append(i ** 2)
print(res) # [0, 4, 16, 36, 64]
res = [i ** 2 for i in range(10) if i % 2 == 0]
print(res) # [0, 4, 16, 36, 64]
[выражение for переменная in последовательность if условие]
«Добавь выражение в список для каждого элемента, если выполняется условие»
[x for x in range(1, 21) if x % 2 != 0]
[s.upper() for s in ['питон', 'егэ', 'код']]
[x for x in range(10) if x not in (3, 7)]
💭 Когда использовать?
💡 Важно: генераторы не заменяют циклы везде. Но для быстрого и чистого кода они очень полезны.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5❤🔥3 3🔥2
Автор: Богданов А
Уровень: Сложный
Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел. Определите количество строк таблицы, для которых выполняются все условия:
в строке три числа повторяются ровно два раза;
эти три числа образуют стороны прямоугольного треугольника.
В ответе запишите одно число.
cnt = 0
for s in open('9.csv'):
M = [int(x) for x in s.split(',')]
copied_2 = [x for x in M if M.count(x) == 2]
if len(copied_2) == 6:
a, b, c = sorted(set(copied_2))
if a**2 + b**2 == c**2:
cnt += 1
print(cnt)
Ответ: 148
cnt = 0
- Создаем счетчик cnt и инициализируем его нулем. Он будет считать количество строк, удовлетворяющих условиям.
for s in open('9.csv'):
- Открываем файл 9.csv и построчно читаем его. Каждая строка сохраняется в переменную s.
M = [int(x) for x in s.split(',')]
- Разбиваем строку s по запятым, преобразуем каждый элемент в целое число и сохраняем в список M.
copied_2 = [x for x in M if M.count(x) == 2]
- Создаем список copied_2, содержащий элементы из M, которые встречаются ровно 2 раза.
if len(copied_2) == 6:
- Проверяем, что в списке copied_2 ровно 6 элементов (то есть 3 пары одинаковых чисел).
a, b, c = sorted(set(copied_2))
- Удаляем дубликаты из copied_2 (оставляем уникальные значения), сортируем их и присваиваем переменным a, b, c.
if a**2 + b**2 == c**2:
- Проверяем, выполняется ли теорема Пифагора для полученных чисел (являются ли они пифагоровой тройкой).
cnt += 1
- Если все условия выполнены, увеличиваем счетчик cnt на 1.
print(cnt)
- После обработки всех строк выводим значение счетчика cnt.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥6❤5🔥4
is
для сравнения строк и чисел в Python
? #tpy🔍 Для небольших чисел и коротких строк Python часто использует кэш, поэтому is может иногда возвращать True.
Но для больших чисел или длинных строк это не гарантировано - объекты могут быть разными.
a = 256
b = 256
print(a is b) # True (кэш)
x = "hello"
y = "hello"
print(x is y) # True (кэш)
a = 1000
b = 1000
print(a is b) # False (разные объекты)
==
для сравнения значений, is
- только чтобы проверить, ссылаются ли переменные на один объект!Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5❤3🔥3
Автор: Джобс Е.
Уровень: Базовый
Назовём нетривиальным делителем натурального числа его делитель, не равный единице и самому числу. Найдите все натуральные числа, принадлежащие отрезку [106732567; 152673836] и имеющие ровно три нетривиальных делителя. Для каждого найденного числа запишите в ответе само число и его наибольший нетривиальный делитель. Найденные числа расположите в порядке возрастания.
Например, для числа 2018 имеем следующие делители 2 и 1009. Поэтому результатом (не принимая во внимание количества делителей) будет пара чисел 2018 1009.
def divisors(x):
div = []
for j in range(2, int(x**0.5)+1):
if x % j == 0:
div.append(j)
div.append(x // j)
return sorted(set(div))
for x in range(106732567, 152673836+1):
if (x**0.5).is_integer():
d = divisors(x)
if len(d) == 3:
print(x, max(d))
Ответ:
112550881 1092727
131079601 1225043
141158161 1295029
def divisors(x):
- Объявление функции divisors, которая принимает число x и возвращает его делители.
div = []
- Создание пустого списка div для хранения делителей.
for j in range(2, int(x**0.5)+1):
- Цикл по возможным делителям от 2 до квадратного корня из x (включительно).
if x % j == 0:
- Проверка, делится ли x на j без остатка.
div.append(j)
- Если j - делитель, добавляем его в список.
div.append(x // j)
- Добавляем парный делитель (x разделить на j).
return sorted(set(div))
- Возвращаем отсортированный список уникальных делителей.
for x in range(106732567, 152673836+1):
- Основной цикл по числам от 106732567 до 152673836 включительно.
if (x**0.5).is_integer():
- Проверка, является ли x полным квадратом (квадратный корень - целое число).
d = divisors(x)
- Если x - полный квадрат, находим все его делители.
if len(d) == 3:
- Проверяем, что у числа ровно 3 делителя (не считая 1 и само число).
print(x, max(d))
- Если условие выполняется, выводим число и его наибольший делитель.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4❤🔥2🔥1
.env
, и зачем он нужен? #tpyЕсли вы когда-либо работали с проектами на
Python
, Node.js
или других языках, то, скорее всего, сталкивались с файлами .env
. Но что они из себя представляют?В нем хранятся важные настройки: ключи API, пароли, настройки базы данных и другие конфиденциальные данные.
🔒 Почему это удобно?
- Безопасность: секретные данные не хранятся прямо в коде, их легко исключить из системы контроля версий.
- Гибкость: можно легко менять настройки между разными окружениями - тестовым, продакшеном и локальной разработкой.
- Удобство: все важные переменные сосредоточены в одном месте, их легко найти и обновить.
.env
- это безопасный способ хранения конфиденциальной информации, если он используется локально и не попадает в публичные источники.⚠️ Ведь его публичное размещение - серьёзная уязвимость!
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤4❤🔥2🔥2
17799
#kege по информатике #ЕГЭ8Автор: В. Зарянкин
Уровень: Средний
Все четырёхбуквенные слова, в составе которых могут быть только русские буквы А, Р, Г, У, М, Е, Н, Т, записаны в алфавитном порядке и пронумерованы начиная с 1.
Вот начало списка:
1. АААА
2. АААГ
3. АААЕ
4. АААМ
5. АААН
...
Под каким номером в списке идёт последнее слово, в котором все буквы различны и все символы располагаются в алфавитном порядке?
from itertools import *
s = sorted('АРГУМЕНТ')
for n, p in enumerate(product(s, repeat=4), 1):
word = ''.join(p)
if len(word) == len(set(word)):
if list(word) == sorted(word):
print(n)
Ответ: 2424
from itertools import *
- Импорт всех функций из модуля itertools (в данном случае используется product)
s = sorted('АРГУМЕНТ')
- Создание отсортированного списка букв из слова "АРГУМЕНТ": ['А', 'Г', 'Е', 'М', 'Н', 'Р', 'Т', 'У']
for n, p in enumerate(product(s, repeat=4), 1):
- Цикл по всем возможным комбинациям букв длиной 4 (с повторами)
- product(s, repeat=4) генерирует декартово произведение списка s на себя 4 раза
- enumerate добавляет нумерацию, начиная с 1
word = ''.join(p)
- Объединение кортежа p в строку (слово из 4 букв)
if len(word) == len(set(word)):
- Проверка, что все буквы в слове уникальны (длина слова равна длине множества его букв)
if list(word) == sorted(word):
- Проверка, что буквы в слове идут в алфавитном порядке (слово равно своему отсортированному варианту)
print(n)
- Если оба условия выполнены, выводится номер текущей комбинации
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥3❤1👍1
Примеры кодов для задач 9, 17, 24, 26, 27 из ЕГЭ:
for M in open('9.txt'):
M = [int(i) for i in M.split()]
print(M)
M = [int(i) for i in open('17.txt')]
print(M)
s = open('24.txt').readline()
Считываем только первую строку файла.
ans = []
for M in open('26.txt'):
M = [int(i) for i in M.split()]
ans.append(M)
Сохраняем каждую строку как список чисел, а потом собираем всё в общий список.
f = open('27.А.txt').readlines()[1:]
for M in f:
M = [float(i.replace(',','.')) for i in M.split()]
x, y = M[0], M[1]
print(x, y)
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍5❤3❤🔥2🔥2
Автор: Яндекс учебник
Уровень: Средний
Определите количество строк таблицы, содержащих числа, для которых выполнены все условия:
1. Четыре числа строки можно разбить на две пары чисел с равными суммами
2. Максимальное число строки меньше суммы трёх оставшихся чисел сумма чисел в строке чётна
from itertools import permutations
cnt = 0
for s in open('0. files/9.csv'):
M = [int(x) for x in s.split(';')]
if sum(M) % 2 == 0:
if max(M) < sum(M) - max(M):
if any(p[0] + p[1] == p[2] + p[3] for p in permutations(M)):
cnt += 1
print(cnt)
Ответ: 139
· Импортируем функцию permutations для генерации всех перестановок
· Создаем счетчик и инициализируем его нулем
· Открываем файл '9.csv' и построчно читаем его
· Разбиваем строку по символу ';' и преобразуем каждый элемент в целое число
· Проверяем, что сумма всех чисел в строке четная
· Проверяем, что максимальное число меньше суммы всех остальных чисел
· Проверяем, существует ли такая перестановка 4 чисел, где сумма первых двух равна сумме последних двух
· Если все три условия выполнены, увеличиваем счетчик на 1
· Выводим итоговое количество строк, удовлетворяющих всем условиям
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥3🔥1
📎 list - это изменяемый упорядоченный список. Можно добавлять, удалять, менять элементы. Например:
fruits = ['яблоко', 'банан', 'апельсин']📎 📎 tuple - неизменяемая последовательность. Отлично подходит, когда нужно зафиксировать набор данных:
coordinates = (10, 20)📎 📎 set - множество уникальных элементов. Быстро искать, удалять дубликаты:
unique_numbers = {1, 2, 3}📎 📎 dict - словарь, отображение ключей на значения. Очень удобно для хранения пар "ключ-значение":
person = {'имя': 'Анна', 'возраст': 25}📎 ❄️ frozenset - неизменяемое множество, его нельзя менять после создания. Используется там, где нужен "жёсткий" набор данных. frozenset([1, 2, 3, 4])➡️ frozenset({1, 2, 3, 4})🔼 🔽 deque - двусторонняя очередь из модуля collections. Быстро добавлять и удалять элементы с обоих концов:
from collections import deque⚙️ d = deque() - инициализировать элементами из любого итерируемого объекта (список, кортеж и т. д.).
Технологии телеграмма не стоят на месте, поэтому обращаю ваше внимание, что мы часто используем инструмент "цитата". Кликайте на цитату выше, чтобы открыть текст для чтения
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2❤🔥2🔥1