This media is not supported in the widget
VIEW IN TELEGRAM
❤🔥12🔥7❤6
Почему метод
list.sort()
в Python возвращает значение None
вместо отсортированного списка? Ответ:
Если вам необходим новый отсортированный список, рекомендуется использовать функцию sorted(). Она возвращает отсортированный список, не изменяя оригинал.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7❤🔥5🔥3
Автор: Досрочная волна 2025
Уровень: Базовый
Перед игроками лежит куча камней.
− убрать из кучи два камня,
− уменьшить количество камней в куче в два раза (количество камней, полученное при делении, округляется до меньшего).
Победителем считается игрок, сделавший последний ход, т.е. первым получивший в куче 87 камней или меньше. В начальный момент в куче было S камней; S > 88.
Весьма классическое условие для Теории игр, а это значит, что можно написать удобный и типовой код решения для всех трех задач.❗️ Обратите внимание на 8 пункт в решении! Тут функция all() пишется для 20 и 21 номеров, а вот с 19 номером все сложнее. Если мы имеем условие "при любой игре Пети", то ставим all(), если же условие звучит как "после неудачного первого хода Пети", то будем писать функцию any()
from math import ceil, floor
def F(s, n):
if s <= 87:
return n % 2 == 0
if n == 0:
return 0
h = [F(s-2, n-1), F(floor(s/2), n-1)]
return any(h) if (n - 1) % 2 == 0 else all(h)
print([s for s in range(89, 1000) if F(s, 2)])
print([s for s in range(89, 1000) if F(s, 3) and not F(s, 1)])
print([s for s in range(89, 1000) if F(s, 4) and not F(s, 2)])
Ответы:
19. 176
20. 178 179
21. 180
from math import ceil, floor
Импортирует функции округления вверх (ceil) и вниз (floor) из модуля math.
def F(s, n):
Определяет функцию F с двумя параметрами: s (текущее значение камней в куче) и n (количество оставшихся ходов игры).
if s <= 87:
Проверяет, не достигнуто ли пороговое значение 87 или меньше для завершения игры.
return n % 2 == 0
Если достигнуто пороговое значение, то возвращает True, если n четное (победил Ваня), и False, если n нечетное (победил Петя).
if n == 0:
Проверяет, не закончились ли ходы.
return 0
Если ходы закончились, возвращает 0 (что эквивалентно False), чтобы не зациклить нашу рекурсию.
h = [F(s-2, n-1), F(floor(s/2), n-1)]
Создает список возможных ходов: уменьшение s на 2 или деление s на 2 с округлением вниз.
return any(h) if (n - 1) % 2 == 0 else all(h)
Если следующий ход четный (n-1 четное), возвращает True, если хотя бы один из ходов выигрышный (any).
Если следующий ход нечетный, возвращает True, только если все ходы выигрышные (all).
print([s for s in range(89, 1000) if F(s, 2)])
Выводит список значений s от 89 до 999, для которых F(s, 2) возвращает True (выигрышные позиции при 2 ходе - победа Вани первым ходом).
print([s for s in range(89, 1000) if F(s, 3) and not F(s, 1)])
Выводит список значений s, для которых F(s, 3) истинно, а F(s, 1) ложно (выигрышные позиции при 3 ходе, но не при 1 - победа Пети вторым, но не первым ходом).
print([s for s in range(89, 1000) if F(s, 4) and not F(s, 2)])
Выводит список значений s, для которых F(s, 4) истинно, а F(s, 2) ложно (выигрышные позиции при 4 ходах, но не при 2 - победа Вани вторым или первым, но не только лишь первым ходом).
Наша Stepik подборкой задач
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤5❤🔥4
Автор: Досрочная волна 2025
Уровень: Базовый
Текстовый файл состоит из символов, обозначающих десятичные цифры и заглавные буквы латинского алфавита.
Определите в прилагаемом файле максимальное количество идущих подряд символов, которые могут представлять запись чётного числа в двенадцатеричной системе счисления. В этой записи отсутствуют незначащие (ведущие) нули.
Регулярные выражения стали еще одним шагом ФИПИ к усложнению 24 номера, поэтому на канале постараюсь почаще публиковать решения через библиотеку re.
Обратите внимание на строчку номер 8 - настоятельно рекомендую не пропускать этот шаг, чтобы визуально можно было проверить вывод своей программы!
from re import *
s = open('0. files/24.txt').readline()
num = r'([1-B][0-B]*[02468A]|[0-B])'
M = [x.group() for x in finditer(num, s)]
maxi = 0
for x in M:
maxi = max(maxi, len(x))
print(x)
print(maxi)
Ответ: 19
from re import *
Импортирует все функции из модуля регулярных выражений re.
s = open('24.txt').readline()
Открывает файл '24.txt', считывает первую строку и сохраняет её в переменную s.
num = r'([1-B][0-B]*[02468A]|[0-B])'
Создаёт шаблон регулярного выражения, который ищет либо последовательность, начинающуюся с символа от 1 до B, содержащую любое количество символов от 0 до B и заканчивающуюся чётным символом (0,2,4,6,8,A), либо одиночный символ от 0 до B.
M = [x.group() for x in finditer(num, s)]
Находит все совпадения с шаблоном num в строке s и создаёт список M из найденных совпадений, используя генератор списка и метод group().
maxi = 0
Инициализирует переменную maxi значением 0 для хранения максимальной длины найденной последовательности.
for x in M:
Начинает цикл, который перебирает все найденные последовательности в списке M.
maxi = max(maxi, len(x))
Обновляет значение maxi, выбирая максимум между текущим значением maxi и длиной текущей последовательности x.
print(x)
Выводит текущую последовательность x на экран.
print(maxi)
После завершения цикла выводит максимальную длину найденной последовательности.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥7🔥4❤3🫡2
Полезным ли оказался последний пост? Стоит ли мне сделать теоретический пост про библиотеку import re и регулярные выражения?
Anonymous Poll
91%
Точно нужно ✔️
7%
Может повезет без них ⁉️
1%
Уже разобрались ❌
❤5🔥5👍4❤🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
🔥10👍7🫡4
This media is not supported in your browser
VIEW IN TELEGRAM
2❤🔥12👍10🔥4
Я хочу и дальше радовать вас качественным и полезным техническим контентом на канале. Поэтому прошу вас поддержать мой канал своим голосом (Boost). Это простое действие поможет развитию канала и даст мне ещё больше мотивации делать контент интереснее и насыщеннее.
Оставить голос можно по этой ссылке: t.me/boost/informatika_kege_itpy
Искренне благодарю каждого, кто поддерживает мой труд
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤6🫡4
До экзамена осталось менее двух месяцев – самое время объективно оценить свои знания!
В ближайшие выходные (19-20 числа) мои студенты будут писать пробник, и я с удовольствием делюсь этим вариантом с вами, уважаемые подписчики. Это полноценный вариант с необходимыми файлами – рекомендую проходить его без конспектов, чтобы результат был максимально честным и полезным.
✅ Что предлагаю:
С вас решение пробника, с меня результат в виде разбаловки – бесплатно.
Краткий анализ ваших решений – 500 ₽.
Вы присылаете выполненный пробник в виде архива (будет подробная инструкция), а я делаю короткий обзор с комментариями.
Персональный разбор – 2000 ₽ (60 минут).
То есть полноценное онлайн занятие с детальным анализом, ответами на вопросы и рекомендациями по дальнейшей подготовке.
Если хотите присоединиться – пишите: @ilandroxxy, все материалы и инструкции вышлю в ЛС. Это отличная возможность понять, на каком вы уровне, и как усилить подготовку в оставшееся время.
Информатика ЕГЭ | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥7❤3🔥3👨💻2
This media is not supported in your browser
VIEW IN TELEGRAM
❤10🔥4❤🔥3
🧑💻 "Да ладно, я потом попробую списать эту информатику, пронесет!" — Слышит каждый родитель подростка, кто сдает ЕГЭ и ОГЭ ‼️
А вот не пронесет…
Хватит переживать из-за поступления на бюджет! Познакомьтесь с Ульяной Балашовой!
Она не просто репетитор — а самый настоящий «переводчик» с цифрового на подростковый.
🔥 Почему к ней записываются даже самые "безнадежные" случаи?
✅ Объясняет на крутых примерах — от компьютерных игр до кода Apple!
✅ Гарантия прогресса — уже через пару занятий виден результат!
✅ Готовит к ОГЭ/ЕГЭ — проверенная методика для высоких баллов!
✅ А так же есть потрясающие летние интенсивы!
Подписывайтесь на канал Ульяны и двери на бюджет в Университет распахнутся сами собой!
Ссылка тут 👉 https://t.me/+2CPoHD8EKCo4N2Ey
А вот не пронесет…
Хватит переживать из-за поступления на бюджет! Познакомьтесь с Ульяной Балашовой!
Она не просто репетитор — а самый настоящий «переводчик» с цифрового на подростковый.
🔥 Почему к ней записываются даже самые "безнадежные" случаи?
✅ Объясняет на крутых примерах — от компьютерных игр до кода Apple!
✅ Гарантия прогресса — уже через пару занятий виден результат!
✅ Готовит к ОГЭ/ЕГЭ — проверенная методика для высоких баллов!
✅ А так же есть потрясающие летние интенсивы!
Подписывайтесь на канал Ульяны и двери на бюджет в Университет распахнутся сами собой!
Ссылка тут 👉 https://t.me/+2CPoHD8EKCo4N2Ey
❤6❤🔥3🔥3😁2
Forwarded from Программирование на Python | itpy 💻
Регулярные выражения — мощный инструмент для поиска и анализа текстовых данных. В заданиях ЕГЭ по информатике (задание 24) они часто используются для поиска числовых последовательностей по определённому шаблону. Разберём основные приёмы на примерах из реальных задач.
Общая структура большинство решений строится по следующему шаблону:
from re import *
s = open('24.txt').readline()
# num — шаблон отдельного числа
# reg — шаблон всей последовательности
reg = rf'{num}([+*]{num})*'
matches = [x.group() for x in finditer(reg, s)]
maxi = max(len(x) for x in matches)
print(maxi)
Пример 1: Поиск последовательностей чисел от 7, 8, 9, 0 (№ 20813 #kege)
num = r'([789][0789]*|[0])'
reg = rf'{num}([-*]{num})*'
Пример 2: Работа с буквами и диапазоном 1–6 (№ 18619 #kege)
s = s.replace('A', ' ').replace('C', ' ').replace('D', ' ')
num1 = r'[B]([1-6][1-6]*)'
num2 = r'([1-6][1-6]*)'
reg = rf'{num1}([-*]{num2})*'
Пример 3: Подсчёт количества чисел (№ 18285 #kege)
num = r'([1-9][0-9]*)'
reg = rf'{num}([+*]{num})*'
Пример 4: Сумма выражений (№ 18147 #kege)
num = r'([789]+)'
reg = rf'{num}([+]{num})+'
Определение чисел:
r'([1-9][0-9]*)' - натуральные числа (без ведущих нулей)
r'([0-9]+)' - любые целые числа
r'([789][0789]*)' - числа, начинающиеся с 7,8 или 9
Операции между числами:
([+*]{num})* - повторяющиеся операции + или *
([-+*]{num})* - операции -, + или *
Специальные условия:
Окончание на определенные цифры: [05]
Начало с определенных букв: [AFD]
Регулярные выражения - это мощный инструмент, который требует практики. Разбирая подобные задачи, вы лучше поймете их синтаксис и возможности.
Второй канал про теорию Python
Please open Telegram to view this post
VIEW IN TELEGRAM
4❤7🔥3👍2
Автор: Досрочная волна 2025
Уровень: Базовый
Напишите программу, которая перебирает целые числа, бóльшие 1 125 000, в порядке возрастания и ищет среди них такие, у которых
есть натуральный делитель, оканчивающийся на цифру 7 и не равный ни самому числу, ни числу 7. В ответе запишите в первой строке таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце – наименьший делитель для каждого из них, оканчивающийся цифрой 7, не равный ни самому числу, ни числу 7.
Относительно базовая задача 25 номера, но надо добавить этот разбор на канал для объективности, так как примеры ФИПИшных задач в списке разборов отсутствуют..
def divisors(x):
div = []
for j in range(1, int(x**0.5)+1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))
cnt = 0
for x in range(1_125_000+1, 10**10):
div = [j for j in divisors(x) if j != x and j % 10 == 7 and j != 7]
if len(div) > 0:
print(x, min(div))
cnt += 1
if cnt == 5:
break
Ответ:
1125003 467
1125006 97
1125009 17
1125011 3187
1125012 177
def divisors(x):
Определение функции divisors, которая находит все делители числа x.
div = []
Создание пустого списка для хранения делителей числа x.
for j in range(1, int(x*0.5)+1):
Цикл от 1 до квадратного корня из x (оптимизация для поиска делителей).
if x % j == 0:
Проверка, является ли j делителем x (если остаток от деления равен 0).
div += [j, x // j]
Добавление в список делителей как j, так и x/j (парный делитель).
return sorted(set(div))
Возврат отсортированного списка уникальных делителей (set удаляет дубликаты).
cnt = 0
Инициализация счетчика найденных чисел.
for x in range(1_125_000+1, 10*10):
Цикл по числам от 1_125_001 до 10**10.
div = [j for j in divisors(x) if j != x and j % 10 == 7 and j != 7]
Создание списка делителей числа x, которые не равны самому x, оканчиваются на 7 и не равны 7.
if len(div) > 0:
Проверка, есть ли подходящие делители в списке.
print(x, min(div))
Вывод числа x и его минимального подходящего делителя.
cnt += 1
Увеличение счетчика найденных чисел.
if cnt == 5:
Проверка, найдено ли уже 5 чисел.
break
Прерывание цикла, если найдено 5 чисел.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4🔥2
Forwarded from Программирование на Python | itpy 💻
all()
и any()
в Python: просто о полезном #tpyВ задачах ЕГЭ (например, в номере 25) часто нужно проверять условия для всех или хотя бы одного элемента из набора. Python предлагает элегантные решения — встроенные функции
all()
и any()
.all()
— Проверка простого числаdef is_prime(x):
if x <= 1:
return False
return all(x % i != 0 for i in range(2, x))
print(is_prime(7)) # Вывод: True
(x % i != 0 for i in range(2, x))
создает последовательность логических значений: True
, если x
не делится на i
, и False
, если делится.all()
возвращает True
, только если все значения в последовательности — истинны.is_prime(7)
вернет True
, так как 7 не делится ни на одно число от 2 до 6 — то есть, это простое число.any()
— Поиск хотя бы одного делителяdef has_divisor(x):
return any(x % i == 0 for i in range(2, x))
print(has_divisor(9)) # Вывод: True
any()
вернет True
, если хотя бы одно значение в последовательности — истина.has_divisor(9)
возвращает True, потому что 9 делится на 3.💡 Кратко:
all()
— возвращает True, если все элементы истинны.any()
— возвращает True, если хотя бы один элемент истинен.Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥9 3 2
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Л. Шастин
Уровень: Сложный
Определите наибольший номер строки таблицы, для чисел которой выполнены оба условия:
– числа в строке расположены в порядке неубывания;
– в строке есть повторяющиеся числа с чётной суммой цифр.
Аудио с пояснением к коду решения оставлю в комментариях.
R = []
for n, s in enumerate(open('9.csv'), 1):
M = [int(x) for x in s.split(';')]
if M == sorted(M):
if any(M.count(x) > 1 and sum(map(int, str(x))) % 2 == 0 for x in M):
R.append(n)
print(max(R))
Ответ: 6937
R = []
- Создаём пустой список R для хранения номеров строк, которые будут соответствовать условиям.
for n, s in enumerate(open('9.csv'), 1):
- Начинаем цикл по каждой строке файла 9.csv, считывая одновременно её содержание s и устанавливая номер строки n, начиная с 1.
M = [int(x) for x in s.split(';')]
- Преобразуем строку s, разделённую по символу ;, в список целых чисел M.
if M == sorted(M):
- Проверяем, является ли список M отсортированным по возрастанию.
if any(M.count(x) > 1 and sum(map(int, str(x))) % 2 == 0 for x in M):
- Проверяем, есть ли в списке M повторяющиеся элементы x, сумма цифр которых чётная.
R.append(n)
- Добавляем номер строки n в список R, если выполняются условия выше.
print(max(R))
- Выводим максимальный номер строки из списка R, соответствующий требуемым условиям.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥7 3 3 3👍1
Автор: Рогов.А
Уровень: Сложный
В файле электронной таблицы в каждой строке содержатся шесть натуральных чисел. Определите количество строк таблицы, для которых выполнены оба условия:
в строке хотя бы одно число повторяется дважды (ровно 2 раза);
каждое из повторяющихся дважды (ровно 2 раза) чисел превышает каждое неповторяющееся.
Опасная задача потому что автор учитывает ситуацию, когда список uncopied пустой, что может вызывать ошибку при использовании функции max().
cnt = 0
for s in open('0. files/9.csv'):
M = sorted([int(x) for x in s.split(',')])
copied = [x for x in M if M.count(x) == 2]
uncopied = [x for x in M if M.count(x) == 1]
if len(copied) > 0:
if len(uncopied) == 0:
maxi = 0
else:
maxi = max(uncopied)
if min(copied) > maxi:
cnt += 1
print(cnt)
Ответ: 665
cnt = 0
- Создаём переменную-счётчик cnt и инициализируем её нулём.
- Будет хранить количество строк, удовлетворяющих условию.
for s in open('0. files/9.csv'):
- Открываем файл '0. files/9.csv' для чтения.
- Циклом for перебираем каждую строку s из файла.
M = sorted([int(x) for x in s.split(',')])
- Разбиваем строку s по запятым с помощью s.split(',').
- Каждый элемент преобразуем в целое число int(x).
- Полученный список чисел сортируем по возрастанию sorted().
- Результат сохраняем в переменную M.
copied = [x for x in M if M.count(x) == 2]
- Создаём список copied с помощью генератора списка.
- Включаем в него элементы x из M, которые встречаются ровно 2 раза (M.count(x) == 2).
- Это будут числа-дубликаты в текущей строке.
uncopied = [x for x in M if M.count(x) == 1]
- Аналогично создаём список uncopied.
- Включаем элементы, которые встречаются только 1 раз (M.count(x) == 1).
- Это уникальные числа в текущей строке.
if len(copied) > 0:
- Проверяем, есть ли в строке дубликаты (длина списка copied больше 0).
- Если нет, то пропускаем дальнейшие проверки для этой строки.
if len(uncopied) == 0:
- Проверяем, есть ли в строке уникальные числа.
- Если уникальных чисел нет (uncopied пуст):
maxi = 0
- Устанавливаем maxi (максимальное уникальное число) в 0,
- так как сравнивать будем с минимальным дубликатом.
else:
- Если в строке есть уникальные числа:
maxi = max(uncopied)
- Находим максимальное число среди уникальных и сохраняем в maxi.
if min(copied) > maxi:
- Проверяем условие: минимальное число из дубликатов больше maxi.
- Если условие выполняется:
cnt += 1
- Увеличиваем счётчик подходящих строк на 1.
print(cnt)
- После обработки всех строк выводим итоговое значение счётчика cnt.
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥7❤🔥4 4❤2
This media is not supported in your browser
VIEW IN TELEGRAM
❤🔥6🔥3 3👨💻2 2
Ответ:
В Python блок else после цикла for или while выполняется только в том случае, если цикл завершился нормально, то есть без использования break.
➡Программирование на Python | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤🔥10👍4🔥3 2
string
в Python #tpyПри работе со строками часто возникает задача: определить, к какой категории символов относится тот или иной символ — цифра ли это, буква, знак пунктуации и т.д.
✅ Помимо методов
isdigit()
, isalpha()
, использования Unicode (ord()) и регулярных выражений, Python предлагает более удобный способ — строковые константы встроенного модуля string
.📚 Примеры полезных констант:
import string
print(string.digits)
# Цифры: 0123456789
print(string.ascii_letters)
# Все английские буквы: abc...XYZ
print(string.ascii_lowercase)
# Только строчные: abc...
print(string.ascii_uppercase)
# Только заглавные: ABC...
print(string.punctuation)
# Знаки препинания: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
🔣 Нужно фильтровать или валидировать ввод🔣 Писать генераторы случайных паролей🔣 Проверять состав строки без использования регулярных выражений
s = "Hello123!"
letters_only = [ch for ch in s if ch in string.ascii_letters]
print(letters_only) # ['H', 'e', 'l', 'l', 'o']
Кроме вышеупомянутых, модуль string содержит и другие полезные объекты, включая
string.whitespace
, string.printable
и даже шаблонные классы для форматирования.docs.python.org/3/library/string.html
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8 4🔥3