CodeLab
145 subscribers
538 photos
20 videos
159 links
Говорим просто о сложном

Обсуждение, новости, материал и сплетни — все здесь https://t.me/CodeLabMLChat
Download Telegram
🐍 Разбор кода (Python)

Сразу скажу, код будет несложный, просто я начну с рассуждений, а вы можете сидеть и параллельно моим рассуждениям писать код. Можете в комменты кидать свои варианты👇🏻

🧑‍💻 Допустим, вам сказали написать такой код; При вводе чисел через пробел, создается список, в который будут записываться только четные числа, и уже потом код должен вывести эти числа и посчитать их сумму. Го пробовать:

0️⃣ Итак, первое че делаем — это пишем функцию для считывания строки:

🟰 numbers = input("Вводим числа через пробел: ").split()🟰

Зач нам split()? Вопрос хороший, как вы помните (а мы разбирали метод split(), чекайте навигацию), метод разделяет метод по разделителю и возвращает список, ввели мы 1 2 3 4 5, значит будет ['1', '2' ... и тд

1️⃣‼️🟰 numbers = [int(num) for num in numbers]🟰это генератор списка, и да, мы не разбирали это все, но будем потихоньку вливаться. Сама суть этой строчки в преобразовании строки в целое число. То есть, метод split() разделил строку на части по пробелам, а генератор списка преобразовывает эти самые части в целые числа.‼️

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

2️⃣ Создаем новый список 🟰even_numbers = []🟰 (список для четных чисел)

3️⃣ ❗️На этапе 1 генератор списка вернул нам новый список с числами, нам теперь нужно найти из них четные, поэтому перебираем...

for num in numbers:
if num % 2 == 0: # Проверка на четность
even_numbers.append(num) # Добавляем в список для четных чисел, непосредственно, четные числа)


⭕️ Выводим четные числа:

print("Чётные числа:", even_numbers)


4️⃣ Теперь подсчитаем сумму четных чисел, создаем счетчик:

🟰sum_even = 0🟰 (Сумма четных чисел)

🔗 И теперь проходим по списку 🟰even_numbers🟰 и вычисляем сумму всех элементов этого списка:

sum_even = 0
for even in even_numbers:
sum_even += even #Подсчет суммы


5️⃣ Выводим сумму:

 print("Сумма чётных чисел:", sum_even)


🧑‍💻 Мы просто красавчики, теперь получаем такой вот код:

numbers = input("Вводим числа через пробел: ").split()
numbers = [int(num) for num in numbers]
even_numbers = []

for num in numbers:
if num % 2 == 0:
even_numbers.append(num)

print("Чётные числа:", even_numbers)

sum_even = 0
for even in even_numbers:
sum_even += even

print("Сумма чётных чисел:", sum_even)
👍2🥰1👨‍💻1👀1
👨🏼‍💻 Добрый ночи гайс)
Надеюсь вы с большим кайфом проводите свои выходные) Сам решил отдохнуть, поэтому пост ток щас выкладываю.


⭕️ Я вчера выложил пост про неконтролируемое обучение и упомянул кластеры ( алгоритмы кластеризации ).

⚙️ Вы уже должны знать, что в неконтролируемом обучении модель работает с неразмеченными данными ( нет никаких меток ). К чему это я, наша модель должна же как-то извлечь информацию из нашего набора данных, об этом и поговорим…

💡Дак вот, алгоритмы кластеризации — это такие алгоритмы, которые разбивают набор данных на группы, а эти самые группы называются кластерами ( разбиваются данные на кластеры по какому-то сходству ), по сути, так модель и извлекает инфу из входных данных без меток га основе их сходства ( один из способов )

💤 Завтра напишу об этом подробнее, как никак, надо себе давать отдохнуть)
👍1👎1🥰1🤓1
😢
🤡1
Кластеры — это просто группы данных (объектов), которые имеют схожие характеристики. А вот Кластеризация — это задача группировки этих самых данных таким образом, чтобы данные в одном кластере (группе данных) были более схожими чем другие данные в другом кластере...🌶 Как бы вам попонятнее объяснить? Берем пример из книги:

В таблице указано количество получателей и размер писем.


⭕️ Мы можем сгруппировать их по размеру в три кластера:

🔗 Письма <= 20 кб
🔗 Письма 20 кб <= 40 кб
🔗 Письма >= 40 кб


⭕️ Или можно сгруппировать по количеству получателей подобным образом...

🟰 <= 5 получателей
🟰 >5 получателей


кластеризация — это процесс группировки данных (это вам максимально вкратце)
🔗 Где вообще нужна кластеризация?

▫️Первое — это сегментация рынка, то есть, разделение нас, потребителей, на группы по характеристикам для разработки эффективных стратегий маркетинга и продаж.

▫️Второе — это сегментация изображений, то есть, на основе схожих пикселей наша моделька будет разделять изображения на сегменты

▫️Третье — это рекомендации видео разделение подписичников на группы на основе предпочтений, демографических данных и просмотренных ранее видосов.
👨🏼‍💻 "Основные направления неконтролируемого обучения — это кластеризация, понижение размерности и генеративное обучение"

⛓️‍💥Про кластеризацию поговорили. Дальше будет понижение размерности.

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

У нас есть набор данных:

▫️размер;
▫️количество спален
▫️количество ванных комнат;
▫️уровень преступности в районе;
▫️расстояние до ближайшей школы

⭕️ Суть в чем, в этом наборе данных 5 столбцов, но мы можем его сократить, не теряя при этом смысла и большого количества информации.

📊 Первые три признака похожи и связаны с размером дома:

(размер, количество спален,
количество ванных комнат) = размер дома

Последние два
признака похожи и связаны с благополучием района:

(уровень преступности в районе, расстояние до ближайшей школы) = благополучие района


Всем 😴
🤯2
🧑‍💻 Канал у нас для всех, поэтому, так подумал, почему бы не сделать раздел с решениями задач с ЕГЭ⁉️ Актуально да и, возможно, кому то смогу помочь, поэтому держите новый раздел для Навигации: ЕГЭ

🔗 Введение
__________________________________

🔗 Тип 14 № 26959 (Разбор) 🟰 Продолжение 🟰 и еще продолжение
__________________________________

🔗 Введение к заданию 🔗 Тип 5 № 60247 (Разбор)
👍5
🔗 В целом, во всех вариантах исходный код для решения есть, что-то новое придумывать не стоит, зато можно разобрать коды как можно лучше. Лично я, когда сдавал ЕГЭ, просто запоминал их) Зато сейчаc, смогу с кайфом объяснить вам, что и как работает...
👨‍💻2🤯1
Попадается нам вот такое задание, что же блин делать?

0️⃣ Первое, записываем наше выражение, все как есть. Переменная, пусть будет — result:

result = 16**18 - 4**10 - 4**5 - 16


▫️ a ** b — это возведение в степень, так, на всякий.

1️⃣ Вы, наверное, видели, что вторую строку кода обычно записывают так:

s = ''


⭕️ Объясняю, s = '' это пустая строка, а нам было сказано, что выражение записали в системе счисления с основанием 4. Что это значит⁉️

‼️ Когда мы переводим число в другую систему счисления, мы получаем остатки от деления на основание (в данном случае 4). А эти самые остатки — являются цифрами в новой системе счисления и мы их добавляем в нашу пустую строку, начиная с младшего разряда.

⭕️ Если вы вообще ничего не поняли, то смотрите:

1) Берем 100 из десятичной и переведем его в систему счисления с основанием
4, объясню кратко и вы поймете
:

100 // 4 = 25 — целая часть
100 % 4 = 0 — остаток


Записываем остатки 'с конца' (младшего разряда), поэтому
0 записываем в конец, условно

Продолжение
👍3
2) 25 // 4 — целая часть
25 % 4 = 1 — остаток

1 — будет перед 0 в конце, надеюсь понимаете...

3) 6 // 4 = 1 — целая часть
6 % 4 = 2 — остаток (перед единицей)

⭕️ И последний этап:

4) 1 // 4 = 0 — целая часть
1 % 4 = 1 — остаток (перед двойкой)


‼️ Я говорил, что записываем с конца → таким образом, число 100 в системе счисления с основанием 4 записывается как 1210


2️⃣Нам нужен цикл для перебора, поэтому: 🟰 while result != 0:🟰 — обычный цикл while (пока result не равен нулю)

3️⃣ 🟰s += str(result % 4)🟰 — то, о чем мы с вами и говорили: пока наше выражение с первой строчки кода не будет равно 0 — переменная s будет добавлять остатки деления на 4...

(result % 4)


🔗 Выражение выше — это деление по модулю или нахождения остатка от деления () Зачем это нужно я уже объяснил, чекайте выше ↑

🔗 s += str — это тоже самое, что и s = s + str, просто короче.


4️⃣⭕️ 🟰result //= 4🟰 — это тоже самое, что и 🟰result = result // 4 🟰 То есть, наше выражение (result) делится нацело на 4. Зачем? А затем, что после деления нацело, наше выражение 'уменьшается в 4', по сути, таким образом, обновляем наше выражение.


Продолжу чуть позже гайс...
👍3
Если у вас есть друзья или знакомые, которые собираются сдавать ЕГЭ по информатике 2025 — рекомендуйте https://t.me/pywithCodeLab 🧑‍💻 ( разборы задача с ЕГЭ, курсов, разборы кода на Python, Алгоритмы и Машинное обучение, и что самое главное — все бесплатно)
🤯3
5️⃣ Помните, что записываем мы остатки от деления записываем с конца, следовательно, строку, которая у нас там получилась, нужно развернуть:

s = s[::-1]


🧑‍💻 Теперь, порядок цифр будет правильный. Остался последний этап!

Нас сказали тройки подсчитать, делается это очень просто, достаточно вывести функцию 🟰print()🟰 со встроенной функцией 🟰count()🟰


print(s.count("3"))


🔗 Сам код, хотя ничего нового вы тут не увидите:

result = 16 ** 18 * 4 ** 10 - 4 ** 6 - 16
s = ''

while result != 0:
s += str(result % 4)
result //= 4

s = s[::-1]
print(s.count("3"))
🤯3
👀
👀3
👨‍💻 Жестко устал гайс, но нам нужно идти дальше, думаю, на степике пару задач порешаем.

🔗 Задача Сумма чисел 2 (7.3)

⭕️ https://t.me/pywithCodeLab/555 — Напоминаю вам, здесь продолжение нашей навигации по курсу

Так, делаем по шагам:

0️⃣ Первое, это ввод числа:

n = int(input())


1️⃣ Второе, это создание счетчика для подсчета суммы:

summ = 0

2️⃣ Третье, это цикл для перебора наших чисел от 1 до (n + 1) (включительно)

3️⃣ Четвертое, это условный оператор if для создания условия, логично

⭕️ Нам сказано, что сумма должна быть тех чисел 'квадрат которых оканчивается на 2, 5, 8' Так и запишем →

if i**2 % 10 == 2 or i**2 % 10 == 5 or i**2 % 10 == 8: #Возводим число в степень и делим по модулю на 10, чтобы узнать, на что оно оканчивается. 


Кстати, это вам так, на заметку, но чисел, квадрат которых оканчивается на 2 и 8 не существует 🆘

4️⃣ Пятое, обновляем счетчик

summ += i # Прибавляем i, потому что считаем именно сумму. 


5️⃣ Шестое — print()

print(summ)
👍3
🔗 Код к задаче Сумма чисел 2 (7.3):

n = int(input())
summ = 0

for i in range(1, n + 1):
if i**2 % 10 == 2 or i**2 % 10 == 5 or i**2 % 10 == 8:
summ += i

print(summ)
👍2
🔗 Сумма чисел 2 (7.3)

🧑‍💻 Разберем еще решения с комментов:

🟰 Никаких условных операторов, автор использует цикл от 5 до n + 1 с шагом 10.

‼️ Шаг 10 в этом случае, потому что, прибавляя к 5 каждый раз по 10, мы будем получать 15 (225) → 25 (625) → 35 (1225) и так далее, то есть, квадрат числа оканчивается на 5, если само число оканчивается на 5


summ = 0
for i in range(5, n + 1, 10):
summ += i

print(summ)
👍2👨‍💻1
🔗 Сумма чисел 2 (7.3)

⚙️ Еще одно решение, здесь у нас условие на проверку 'вхождения последней цифры квадрата числа в [5] '


n, summ = int(input()), 0

for i in range(1, n + 1):
if i ** 2 % 10 in [5]:
summ += i

print(summ)
🥰2👨‍💻1
🔗 Четвертое решение Сумма чисел 2 (7.3)

s = 0

for i in range(1, int(input()) + 1):
s += i if i**2 % 10 in (2, 5, 8)else 0

print(s)


Внимательно посмотрели и думаем, че тут происходит 😶

Счетчик и цикл for — это еще ладно, уже знаем, а что насчет третьей строчки?

‼️Насколько я понял (это неточно), это пример тернарного оператора или тернарного условия. Дальше, я обратился к GPT:

🟰result = value_if_true if condition else value_if_false🟰 — Формат тернарного оператора, теперь можете сравнить с нашей строчкой 🟰s += i if i**2 % 10 in (2, 5, 8)else 0🟰

▫️condition в данном случае — условие, которое проверяется (у нас это 🟰if i**2 % 10 in (2, 5, 8)🟰)

▫️value_if_true — значение, которое будет присвоено или использовано, если условие истинно, у нас будет присвоено i

▫️value_if_false — значение, которое будет присвоено или использовано, если условие ложно (у нас это 0).

То есть, если квадрат числа i делённый на 10, даёт остаток 2, 5 или 8 🟰(i ** 2 % 10 in (2, 5, 8))🟰, тогда к переменной s прибавляется число. Если условие ложно, то прибавляется 0
❤‍🔥1🤯1👨‍💻1