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

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

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

📺 YouTube: clck.ru/3FwqbX

🙋‍♂️ Я автор: @ilandroxxy
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
📱 Поиск делителей числа в Python: функция и примеры использования #tpy

В мире математики делители числа имеют важное значение, и в Python можно легко создать функцию, которая найдет все делители данного числа. Давайте рассмотрим функцию divisors(x):
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))



🔎 Как работает функция divisors(x)?

1⃣ Функция divisors(x) принимает один аргумент x, который является целым числом, для которого мы ищем делители.

2⃣ В цикле for от 1 до int(x ** 0.5) + 1 проходимся по всем числам от 1 до квадратного корня из x.

3⃣ Если число j является делителем x (то есть x % j == 0), то мы добавляем j и x // j в список делителей div, так как x // j это сомножитель числа j.

4⃣ Наконец, мы преобразуем список делителей во множество для устранения повторяющихся значений, затем сортируем его и возвращаем результат.


📝 Пример использования функции:

▪️Вызов divisors(24) вернет [1, 2, 3, 4, 6, 8, 12, 24], так как делители числа 24 - это все числа от 1 до 24, которые делят это число без остатка.

▪️Вызов divisors(16) вернет [1, 2, 4, 8, 16], поскольку делители числа 16 - это числа, которые можно поделить на 16, начиная с 1 и заканчивая самим 16.

Информатика ЕГЭ | itpy 🧑‍💻
Поддержать автора донатом 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
652
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 17564 #kege по информатике #ЕГЭ25
Автор: Основная волна 08.06.24
Уровень: Средний


🚩 Условие задачи:
Пусть М – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа.

Напишите программу, которая перебирает целые числа, большие 700 000, в порядке возрастания и ищет среди них такие, для которых М оканчивается на 4.

В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце - соответствующие им значения М.


🚩 Теоретическая справка:
В данной задаче нас просят не учитывать единицы и само число, поэтому диапазон в for j in range(2, int(x ** 0.5) + 1): начинаем с 2.

Кстати про саму функцию divisors() уже был пост.


👩‍💻 Код решения:
def divisors(x):
div = []
for j in range(2, int(x ** 0.5) + 1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))


k = 0
for x in range(700_001, 10**10):
d = divisors(x)
if len(d) >= 2:
M = min(d) + max(d)
if abs(M) % 10 == 4:
print(x, M)
k += 1
if k == 5:
break

# Ответ:
# 700004 350004
# 700009 41194
# 700023 233344
# 700024 350014
# 700044 350024


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

1⃣ k = 0
Инициализация переменной k, которая будет считать количество найденных чисел.


2⃣ for x in range(700_001, 10**10):
Цикл перебора чисел от 700001 до 10**10.


3⃣ d = divisors(x)
Вызов функции divisors() для нахождения делителей числа x.


4⃣ if len(d) >= 2:
Проверка наличия как минимум двух делителей.


5⃣ M = min(d) + max(d)
Нахождение суммы минимального и максимального делителя числа x.


6⃣ if abs(M) % 10 == 4:
Проверка условия: остаток от деления абсолютной величины суммы делителей M на 10 равен 4.


7⃣ print(x, M)
Вывод числа x и суммы делителей M.


8⃣ k += 1
Увеличение счетчика найденных чисел.


0⃣ if k == 5:
Проверка, достигнут ли лимит в 5 найденных чисел.


🔟 break
Прерывание цикла после нахождения 5 чисел.


Информатика ЕГЭ | itpy 🧑‍💻
Поддержать автора донатом 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
1043
This media is not supported in your browser
VIEW IN TELEGRAM
📱 Импорт модулей в Python #tpy

В Python импорт модулей - это важный аспект, который позволяет использовать функциональность, определенную в других файлах, в своем коде. Этот подход делает программирование более организованным, уменьшает дублирование кода и упрощает совместную разработку.

При импорте модулей в Python вы можете использовать различные подходы, такие как:

1. Импорт всего модуля:
import module_name


2. Импорт конкретного объекта из модуля:
from module_name import object_name


3. Импорт модуля с псевдонимом:
import module_name as alias


Примеры использования импорта модулей:

# Импорт модуля math
import math
print(math.sqrt(16)) # Выведет 4.0

# Импорт функции randint из модуля random
from random import randint
print(randint(1, 10)) # Выведет случайное число от 1 до 10

# Импорт модуля datetime с псевдонимом dt
import datetime as dt
print(dt.datetime.now()) # Выведет текущую дату и время


Подробнее о импорте модулей в Python вы можете прочитать в данной статье на Notion, а также следите за интересными материалами в моём канале.

Информатика ЕГЭ | itpy 🧑‍💻
Поддержать автора донатом 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
843
Что выведет этот код? 🤔

1️⃣ Произойдет ошибка 
2️⃣ 0,9
3️⃣ (0, 3, 0, 3, 0, 3)

Информатика ЕГЭ | itpy 👨‍💻
Поддержать автора донатом 💵
942
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 17528 #kege по информатике #ЕГЭ15
Автор: Основная волна 07.06.24
Уровень: Базовый


🚩 Условие задачи:
На числовой прямой даны два отрезка: P=[15;40] и Q=[21;63].
Укажите наименьшую возможную длину такого отрезка A, для которого логическое выражение (x∈P)→(((x∈Q)∧¬(x∈A))→¬(x∈P)) истинно (т.е. принимает значение 1) при любом значении переменной х.

👩‍💻 Код решения:
def F(x, a1, a2):
P = 15 <= x <= 40
Q = 21 <= x <= 63
A = a1 <= x <= a2
return P <= ((Q and (not A)) <= (not P))

R = []
M = [x / 4 for x in range(5 * 4, 80 * 4)]
for a1 in M:
for a2 in M:
if all(F(x, a1, a2) for x in M):
R.append(a2 - a1)
print(round(min(R)))

# Ответ: 19


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

1⃣ def F(x, a1, a2):
Определение функции F с параметрами x, a1 и a2.


2⃣ P = 15 <= x <= 40
Проверка условия нахождения x в интервале от 15 до 40.


3⃣ Q = 21 <= x <= 63
Проверка условия нахождения x в интервале от 21 до 63.


4⃣ A = a1 <= x <= a2
Проверка условия нахождения x в интервале между a1 и a2.


5⃣ return P <= ((Q and (not A)) <= (not P))
Возвращение результата выражения, описывающего взаимосвязь между P, Q, и A.


6⃣ R = []
Инициализация пустого списка R, в который будут сохраняться значения.


7⃣ M = [x / 4 for x in range(5 * 4, 80 * 4)]
Создание списка M с числами, равными x / 4, где x изменяется от 20 до 320 с шагом 1.


8⃣ for a1 in M:
Цикл перебора значений из списка M для переменной a1.


0⃣ for a2 in M:
Вложенный цикл перебора значений из списка M для переменной a2.


1⃣0⃣ if all(F(x, a1, a2) for x in M):
Проверка условия с помощью функции F для всех значений x из списка M.


1⃣1⃣ R.append(a2 - a1)
Добавление разности a2 - a1 в список R.


1⃣2⃣ print(round(min(R)))
Вывод минимального значения из списка R после округления.


Информатика ЕГЭ | itpy 🧑‍💻
Поддержать автора донатом 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
964
This media is not supported in your browser
VIEW IN TELEGRAM
💡 Работа с файлами Python #tpy

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

А в следующем посту рассмотрим несколько примеров открытия файлов с ЕГЭ.

🚩 Открытие файла:
file = open("example.txt", "r")  # Открываем файл example.txt на чтение


🚩 Чтение содержимого файла:
content = file.read()
print(content)


🚩 Построчное чтение файла:
file = open("example.txt", "r")  # Открытие файла для чтения

for line in file:
print(line.strip())

file.close()


🚩 Более подробную информацию про работу с файлами вы можете изучить в нашей статье на Notion

Информатика ЕГЭ | itpy 👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
652
🚩 Разбор ДВ #2024 номера #8 по информатике #ЕГЭ8

👩‍💻 Код решения:
from itertools import *
alphabet = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')
cnt = 0
for per in product(alphabet[:17], repeat=5):
w = ''.join(per)
if w[0] != '0':
if w.count('3') == 1:
if len([x for x in w if x > 'C']) <= 3:
cnt += 1
print(cnt)



Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
854
🚩🚩 Разбор ДВ #2024 номера #14 по информатике #ЕГЭ14

👩‍💻 Код решения 1:
def G(n, b):
r = ''
while n > 0:
r = str(n % b) + r
n //= b
return r

R = []
for x in range(1, 2030+1):
num = 6**2030 + 6**100 - x
s = G(num, 6)
R.append([s.count('0'), x])

print(max(R))


👩‍💻 Код решения 2:
R = []
for x in range(1, 2030+1):
num = 6**2030 + 6**100 - x
s = ''
while num > 0:
s = str(num % 6) + s
num //= 6
R.append([s.count('0'), x])

print(max(R))


Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
853
🚩🚩 Разбор ДВ #2024 номера #25 по информатике #ЕГЭ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(600_000+1, 10**10):
d = [j for j in divisors(x) if j % 10 == 7 and j != 7 and j != x]
if len(d) > 0:
print(x, min(d))
cnt += 1
if cnt == 5:
break


Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
944
🚩 Разбор ДВ #2024 номера #5 по информатике #ЕГЭ5

👩‍💻 Код решения:
R = []
for n in range(1, 1000):
s = f'{n:b}' # s = bin(n)[2:]
if n % 2 == 0:
s = s + '10'
else:
s = '1' + s + '01'
r = int(s, 2)
if n < 11:
R.append(r)
print(min(R))


Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
875
🚩 Разбор ДВ #2024 номера #7 по информатике #ЕГЭ7

👩‍💻 Код решения:
a = 2  # – Стерео
b = 72000 # – Частота дискретизации
# c = ? – Битовое разрешение
t = 28 * 60 + 40 # – Общая длительность 17 треков

bit_all = 14_680_064 * 380
print(bit_all) # 5578424320 – бит

bit = bit_all - 17 * 308 * 2**13 # – Кбайт перевожу в бит (для 17 треков)

c = bit / (a * b * t)
print(c) # 22.34952...



Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
1055
🚩🚩 Разбор ДВ #2024 номера #16 по информатике #ЕГЭ16

👩‍💻 Код решения:
import sys
sys.setrecursionlimit(10000)

def F(n):
if n == 1:
return 1
if n > 1:
return (n - 1) * F(n - 1)

print((2*F(2024) - F(2023)) / F(2022))


Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
844
🚩🚩 Разбор ДВ #2024 номера #23 по информатике #ЕГЭ23

👩‍💻 Код решения:
def F(a, b):
if a >= b:
return a == b
return F(a+1, b) + F(a+2, b) + F(a+3, b)

print(F(3, 9) * F(9, 13))


Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
854
🚩🚩 Разбор ДВ #2024 номера #17 по информатике #ЕГЭ17

👩‍💻 Код решения:
M = [int(x) for x in open('17.txt')]
D = [x for x in M if x > 0]
R = []
for i in range(len(M)-1):
x, y = M[i], M[i+1]
if x < 0 or y < 0:
if x + y % min(D) == 0:
R.append(x + y)
print(len(R), max(R))


Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
955
🚩 Разбор ДВ #2024 номера #9 по информатике #ЕГЭ9

👩‍💻 Код решения:
cnt = 0
for s in open('9.csv'):
M = [int(x) for x in s.split(';')]
copied = [x for x in M if M.count(x) == 2]
not_copied = [x for x in M if M.count(x) == 1]
if len(copied) == 4 and len(not_copied) == 2:
if sum(copied) < sum(not_copied):
cnt += 1
print(cnt)



Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
864
🚩🚩 Разбор ДВ #2024 номера #15 по информатике #ЕГЭ15

👩‍💻 Код решения:
def F(x, y):
return (x + y <= 26) or (y <= x - 4) or (y >= A)

for A in range(1000):
if all(F(x, y) for x in range(100) for y in range(100)):
print(A)


Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
865
👩‍💻 Использования f-строк в python #tpy

Использование метода форматирования строк .format() в Python является широко распространенным способом работы со строками. Однако, с появлением f-строк (f-strings) в Python 3.6, разработчики получили удобный и современный способ форматирования строк.

f-строки позволяют встраивать значения переменных непосредственно в строку без необходимости использования метода .format(). Это делает код более читаемым, компактным и удобным для использования.

user = "Андрей"
action = "покупка"
log_message = f'Пользователь {user} зашел на сайт и выполнил действие: {action}'
print(log_message)
# Пользователь Андрей зашел на сайт и выполнил действие: покупка


В данном коде мы использовали префикс f перед строкой, а затем в фигурных скобках указали переменные, которые хотим вставить в строку. Python автоматически подставит значения этих переменных при формировании строки.

Информатика ЕГЭ | itpy 🧑‍💻
Поддержать автора донатом 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
665
This media is not supported in your browser
VIEW IN TELEGRAM
🚩 Разбор номера 17620 #kege по информатике #ЕГЭ1
Автор: Основная волна 19.06.24
Уровень: Базовый


🚩 Условие задачи:
Определите, какова сумма протяжённостей дорог из пункта F в пункт B и из пункта E в пункт D.


🚩 Теоретическая справка:
Данный код позволяет нам в универсальном случае определить последовательность вершин графа. И если знаем вершины, то не сложно найти длины и сумму длин!


👩‍💻 Код решения:
from itertools import permutations

table = '12 15 16 21 23 24 32 36 37 42 47 51 56 61 63 65 73 74'
graph = 'AB BA AF FA FB BF FE EF BD DB ED DE EC CE DG GD CG GC'

for per in permutations('ABCDEFG'):
new_table = table
for i in range(1, 7+1):
new_table = new_table.replace(str(i), per[i-1])
if set(new_table.split()) == set(graph.split()):
print('1 2 3 4 5 6 7')
print(*per)


👩‍💻 Результат:
# 1 2 3 4 5 6 7
# B D E G A F C

# FB = 53, ED = 2, => 55

# 1 2 3 4 5 6 7
# F E D C A B G

# ED = 53, FB = 2, => 55


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

1⃣ from itertools import permutations
Импортируем функцию permutations из модуля itertools для генерации всех возможных перестановок элементов.


2⃣ table = '12 15 16 21 23 24 32 36 37 42 47 51 56 61 63 65 73 74'
Определяем строку 'table', представляющую набор чисел, разделенных пробелами, которые описывают соединения в графе.


3⃣ graph = 'AB BA AF FA FB BF FE EF BD DB ED DE EC CE DG GD CG GC'
Определяем строку 'graph', которая описывает возможные связи между буквами A, B, C, D, E, F, G в графе.


4⃣ for per in permutations('ABCDEFG'):
Запускаем цикл, перебирающий все возможные перестановки букв A, B, C, D, E, F, G.


5⃣ new_table = table
Создаем копию строки 'table', чтобы постепенно заменять числа на соответствующие буквы из текущей перестановки.


6⃣ for i in range(1, 7 + 1):
Запускаем вложенный цикл, который проходит по всем числам от 1 до 7.


7⃣ new_table = new_table.replace(str(i), per[i - 1])
Заменяем каждое число в 'new_table' на соответствующую букву из текущей перестановки 'per', используя индексы.


8⃣ if set(new_table.split()) == set(graph.split()):
Проверяем, совпадает ли множество уникальных элементов в 'new_table' с множеством уникальных элементов в 'graph'.


0⃣ print('1 2 3 4 5 6 7')
Если множества совпадают, выводим строку '1 2 3 4 5 6 7', что означает, что найдено подходящее соответствие.


🔟 print(*per)
Печатаем текущее соответствие букв из перестановки, используя распаковку для форматированного вывода.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Поддержать автора донатом 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
833
Всем хороших выходных! 👋

Я вернулся из отпуска (затишья), который был мне очень нужен после всей этой канители с экзаменами и пересдачами.. В планах радовать вас постоянным контентом: новыми разборами задач, короткими видео, шпаргалками, статьями про Python и новыми курсами. Да-да, все это время мы работали над созданием полезных материалов для вас.

Главной нашей целью до конца лета является создание бесплатного курса "Питон для успешной сдачи ЕГЭ". Будем считать, что это анонс! 😅
Please open Telegram to view this post
VIEW IN TELEGRAM
1477
This media is not supported in your browser
VIEW IN TELEGRAM
🚩 Разбор номера 917 #kege по информатике #ЕГЭ5
Автор: Е. Джобс
Уровень: Средний


🚩 Условие задачи:
Автомат обрабатывает натуральное число N > 1 по следующему алгоритму:

1. Строится двоичная запись числа N.
2. В записи последний ноль заменяется на первые две цифры в полученной записи.
3. Запись записывается справа налево (в обратную сторону).
4. Полученное двоичное число переводится в десятичную систему счисления.

Для какого максимального значения в результате работы алгоритма получится число 119?


🚩 Теоретическая справка:
Про возможность обрабатывать исключения try я писал в этом посте.


👩‍💻 Код решения:
R = []
for n in range(2, 1000):
s = f'{n:b}'
try:
m = s.rindex('0')
s = s[:m] + s[:2] + s[m+1:]
s = s[::-1]
r = int(s, 2)
if r == 119:
R.append(n)
except Exception as E:
print(s, E)
print(max(R))

# Ответ: 58



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

1⃣ R = []
Создаем пустой список R для хранения чисел, которые будут соответствовать заданным условиям.


2⃣ for n in range(2, 1000):
Запускаем цикл, перебирающий числа от 2 до 999 включительно.


3⃣ s = f'{n:b}'
Преобразуем текущее число n в строку, содержащую его двоичное представление.


4⃣ try:
Начинаем блок try для обработки возможных исключений в последующем коде.


5⃣ m = s.rindex('0')
Находим индекс последнего вхождения символа '0' в строке s.


6⃣ s = s[:m] + s[:2] + s[m+1:]
Формируем новую строку: оставляем часть до последнего '0', вставляем первые два символа исходной строки и добавляем оставшуюся часть исходной строки после последнего '0'.


7⃣ s = s[::-1]
Переворачиваем строку s задом наперед.


8⃣ r = int(s, 2)
Преобразуем строку s обратно в целое число из двоичной системы счисления.


0⃣ if r == 119:
Проверяем, равно ли получившееся число 119.


1⃣0⃣ R.append(n)
Если условие верно, добавляем исходное число n в список R.


1⃣1⃣ except Exception as E:
Обрабатываем возможные исключения, которые могут возникнуть в блоке try.


1⃣2⃣ print(s, E)
В случае исключения выводим текущую строку s и описание ошибки E.


1⃣3⃣ print(max(R))
Выводим максимальное число из списка R.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Поддержать автора донатом 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
555