Информатика | Илья Андрианов | itpy 🧑‍💻
1.1K subscribers
269 photos
22 videos
19 files
649 links
По рекламе: @ilandroxxy

Шпаргалки: clck.ru/3FwqWt
📚 Наши курсы: clck.ru/3FwqYb

Разборы: clck.ru/3Fwqay
💬 Чатик: clck.ru/3FwqZa

📺 YouTube: clck.ru/3FwqbX

🙋‍♂️ Я автор: @ilandroxxy
Download Telegram
a = [0, 1, 2]
b = a
b += [3, 4]

c = (0, 1, 2)

d = c
d += (3, 4)

print(a, c)


#⃣ Вся теория для ЕГЭ в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
43🔥2
🚩🚩 Разбор этого номера #yandex по информатике #ЕГЭ12
Автор: Яндекс Учебник
Уровень:
Простой

🚩 Условие задачи:
ПОКА нашлось (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

👩‍💻 Комментарии к коду:

1⃣ my_set = set()
- Создание пустого множества my_set для хранения уникальных строк


2⃣ for n in range(4, 1000):
- Цикл по значениям n от 4 до 999 включительно


3⃣ s = '4' + '9' * n
- Создание строки, состоящей из цифры '4' и n цифр '9' (например, при n=4: '49999')


4⃣ while '44' in s or '9299' in s or '49' in s:
- Цикл выполняется, пока в строке есть хотя бы одна из подстрок: '44', '9299' или '49'


5⃣ s = s.replace('49', '944', 1)
- Замена первой найденной подстроки '49' на '944'


6⃣ s = s.replace('44', '2', 1)
- Замена первой найденной подстроки '44' на '2'


7⃣ s = s.replace('9299', '4', 1)
- Замена первой найденной подстроки '9299' на '4'


8⃣ my_set.add(s)
- Добавление полученной строки в множество (автоматически исключает дубликаты)


0⃣ print(len(my_set))
- Вывод количества уникальных строк в множестве


#⃣ Полный список разборов в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
26❤‍🔥5🔥3
📱 Что такое замыкание в Python? #useful

🧠 Объявление: функция внутри функции, которая запоминает переменные из внешней области


Пример: создание счетчика
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() увеличивает внутренний счетчик, который "запомнен" внутри функции. Это и есть замыкание!


🔍 Зачем это нужно?
- Хранить состояние между вызовами
- Создавать "приватные" переменные
- Сделать код более модульным и безопасным


#⃣ Вся теория для ЕГЭ в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
4❤‍🔥33🔥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

👩‍💻 Комментарии к коду:

1⃣ def F(a, b):
Объявление функции F с двумя параметрами a и b.


2⃣ if a < b or a == 28:
- Проверка условий: если a меньше b ИЛИ a равно 28.


3⃣ return 0
- Возвращает 0, если выполнилось условие выше.


4⃣ if a == b:
- Проверка, если a равно b.


5⃣ return 1
- Возвращает 1, если a равно b.


6⃣ else:
- Если ни одно из предыдущих условий не выполнилось.


7⃣ return F(a-2, b) + F(a // 2 if a % 2 == 0 else a - 3, b)
- Рекурсивный вызов функции F с разными аргументами


8⃣ print(F(98, 1))
- Вызов функции F с аргументами 98 и 1, и вывод результата.


#⃣ Полный список разборов в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
25❤‍🔥4🔥2
👩‍💻 Генераторы списков в Python #tpy

Это обычный способ создания списков через цикл 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 условие]


💬 Читается как:
«Добавь выражение в список для каждого элемента, если выполняется условие»



🚩 Примеры для ЕГЭ:

🟣Все нечётные числа от 1 до 20:
[x for x in range(1, 21) if x % 2 != 0]


🟣Строки в верхнем регистре:
[s.upper() for s in ['питон', 'егэ', 'код']]


🟣Цифры от 0 до 9, кроме 3 и 7:
[x for x in range(10) if x not in (3, 7)]



💭 Когда использовать?

🕓для компактного создания списков
🕓когда нужна фильтрация (if)
🕓при преобразовании значений

💡 Важно: генераторы не заменяют циклы везде. Но для быстрого и чистого кода они очень полезны.


#⃣ Вся теория для ЕГЭ в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
5❤‍🔥33🔥2
🚩 Разбор этого номера #yandex по информатике #ЕГЭ9
Автор: Богданов А
Уровень:
Сложный

🚩 Условие задачи:
Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел. Определите количество строк таблицы, для которых выполняются все условия:

в строке три числа повторяются ровно два раза;
эти три числа образуют стороны прямоугольного треугольника.
В ответе запишите одно число.


👩‍💻 Код решения:
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

👩‍💻 Файлы для решения задачи: 9.csv

👩‍💻 Комментарии к коду:

1⃣ cnt = 0
- Создаем счетчик cnt и инициализируем его нулем. Он будет считать количество строк, удовлетворяющих условиям.


2⃣ for s in open('9.csv'):
- Открываем файл 9.csv и построчно читаем его. Каждая строка сохраняется в переменную s.


3⃣ M = [int(x) for x in s.split(',')]
- Разбиваем строку s по запятым, преобразуем каждый элемент в целое число и сохраняем в список M.


4⃣ copied_2 = [x for x in M if M.count(x) == 2]
- Создаем список copied_2, содержащий элементы из M, которые встречаются ровно 2 раза.


5⃣ if len(copied_2) == 6:
- Проверяем, что в списке copied_2 ровно 6 элементов (то есть 3 пары одинаковых чисел).


6⃣ a, b, c = sorted(set(copied_2))
- Удаляем дубликаты из copied_2 (оставляем уникальные значения), сортируем их и присваиваем переменным a, b, c.


7⃣ if a**2 + b**2 == c**2:
- Проверяем, выполняется ли теорема Пифагора для полученных чисел (являются ли они пифагоровой тройкой).


8⃣ cnt += 1
- Если все условия выполнены, увеличиваем счетчик cnt на 1.


0⃣ print(cnt)
- После обработки всех строк выводим значение счетчика cnt.


#⃣ Полный список разборов в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥65🔥4
🚀 Почему нельзя использовать is для сравнения строк и чисел в Python? #tpy

💻 is - это оператор идентичности, он проверяет, ссылаются ли переменные на один и тот же объект в памяти. А == - оператор равенства, сравнивает значения.

🔍 Для небольших чисел и коротких строк 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 - только чтобы проверить, ссылаются ли переменные на один объект!

#⃣ Вся теория для ЕГЭ в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥5🔥32
🚩🚩 Разбор этого номера #yandex по информатике #ЕГЭ25
Автор: Джобс Е.
Уровень:
Базовый

🚩 Условие задачи:
Назовём нетривиальным делителем натурального числа его делитель, не равный единице и самому числу. Найдите все натуральные числа, принадлежащие отрезку [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


👩‍💻 Комментарии к коду:

1⃣ def divisors(x):
- Объявление функции divisors, которая принимает число x и возвращает его делители.


2⃣ div = []
- Создание пустого списка div для хранения делителей.


3⃣ for j in range(2, int(x**0.5)+1):
- Цикл по возможным делителям от 2 до квадратного корня из x (включительно).


4⃣ if x % j == 0:
- Проверка, делится ли x на j без остатка.


5⃣ div.append(j)
- Если j - делитель, добавляем его в список.


6⃣ div.append(x // j)
- Добавляем парный делитель (x разделить на j).


7⃣ return sorted(set(div))
- Возвращаем отсортированный список уникальных делителей.


8⃣ for x in range(106732567, 152673836+1):
- Основной цикл по числам от 106732567 до 152673836 включительно.


0⃣ if (x**0.5).is_integer():
- Проверка, является ли x полным квадратом (квадратный корень - целое число).


🔟 d = divisors(x)
- Если x - полный квадрат, находим все его делители.


1⃣1⃣ if len(d) == 3:
- Проверяем, что у числа ровно 3 делителя (не считая 1 и само число).


1⃣2⃣ print(x, max(d))
- Если условие выполняется, выводим число и его наибольший делитель.


#⃣ Полный список разборов в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
4❤‍🔥2🔥1
📎 Что такое файл .env, и зачем он нужен? #tpy

Если вы когда-либо работали с проектами на Python, Node.js или других языках, то, скорее всего, сталкивались с файлами .env. Но что они из себя представляют?

Файл .env - это секретный шкафчик для хранения переменных окружения!
В нем хранятся важные настройки: ключи API, пароли, настройки базы данных и другие конфиденциальные данные.


🔒 Почему это удобно?
- Безопасность: секретные данные не хранятся прямо в коде, их легко исключить из системы контроля версий.
- Гибкость: можно легко менять настройки между разными окружениями - тестовым, продакшеном и локальной разработкой.
- Удобство: все важные переменные сосредоточены в одном месте, их легко найти и обновить.


🚀 .env - это безопасный способ хранения конфиденциальной информации, если он используется локально и не попадает в публичные источники.
⚠️ Ведь его публичное размещение - серьёзная уязвимость!


#⃣ Вся теория для ЕГЭ в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
24❤‍🔥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

👩‍💻 Комментарии к коду:

1⃣ from itertools import *
- Импорт всех функций из модуля itertools (в данном случае используется product)


2⃣ s = sorted('АРГУМЕНТ')
- Создание отсортированного списка букв из слова "АРГУМЕНТ": ['А', 'Г', 'Е', 'М', 'Н', 'Р', 'Т', 'У']


3⃣ for n, p in enumerate(product(s, repeat=4), 1):
- Цикл по всем возможным комбинациям букв длиной 4 (с повторами)
- product(s, repeat=4) генерирует декартово произведение списка s на себя 4 раза
- enumerate добавляет нумерацию, начиная с 1


4⃣ word = ''.join(p)
- Объединение кортежа p в строку (слово из 4 букв)


5⃣ if len(word) == len(set(word)):
- Проверка, что все буквы в слове уникальны (длина слова равна длине множества его букв)


6⃣ if list(word) == sorted(word):
- Проверка, что буквы в слове идут в алфавитном порядке (слово равно своему отсортированному варианту)


7⃣ print(n)
- Если оба условия выполнены, выводится номер текущей комбинации


#⃣ Полный список разборов в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥31👍1
🚩 Друзья, мы с коллегами снова собрали папку с каналами по различным школьным образовательным направлениям. Загляните и найдите что-то интересное для себя!

📁 Папка с полезными телеграм-каналами

Если хотите добавить свой канал в папку, пишите: @kubik2566
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥4🔥22