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

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

m = 1
num = int(input())
for count in range(1, num + 1):
m *= count
print(m)
🙏Сессия началась, а значит пора плакать.
Так что сегодня разберем не так много, но что есть 🧑‍💻
🔗 Начнем с этой задачки (Серединное число 4.2), достаточно хорошая #Серединное_число
Вводим условный оператор if и прописываем условие проверки каждого из трех чисел относительно двух оставшихся, выводим как раз таки серединное число, задача решена

🔗Код:

a, b, c = int(input()), int(input()), int(input())

if a < b < c or a > b > c:
print(b)
elif b < c < a or b > c > a:
print(c)
else:
print(a)
Задача Количество дней (4.3)

⭕️ Итак, вводим порядковый номер месяца, а код должен вывести количество дней в месяце #Количество_дней
Для начала вспомним февраль, в нем 28 дней,

⭕️ В остальных: 1, 3, 5, 7, 8, 10, 12 месяцы - 31 день

⭕️ 4, 6, 9, 11 месяцы - 30 дней.

🧑‍💻Итак, как я у же и сказал, сначала февраль
🔗 Задачу можно решить как условием, где мы перечислим все месяца, где дней 30, а их всего 4 (4, 6, 9, 11), так и другим способом
⭕️ Допустим, у нас 5 месяц, по второму условию, если m <= 7, то 30 + m%2.

Остаток от деления 5 на 2 получаем 1, прибавляем к 30 и получаем 31 день.

🔗 Если бы вышел 4 -й месяц, то остаток от деления будет равен 0, значит и дней у нас 30

🔗Код:

m = int(input())

if m == 2:
print('28')
elif m <= 7:
print(30 + m%2 )
else:
print(31 - m%2 )


🔗 Другой вариант решения:

x = int(input())

if x == 2:
print(28)
elif (x < 8 and x % 2 == 0) or (x > 7 and x % 2 != 0):
print(30)
else:
print(31)


Из за того, что в июле и августе по 31 дню, такие решения и получаются
А если m > 7, допустим 9 месяц (сентябрь если че), делим на 2 получаем 1, вычитаем из 31 единицу, значит и дней 30 (Кстати ауеть в сентябре 30 дней)
Итак, задание описывать совершенно нет смысла, просто прописываем, за что отвечает каждое введенное значение #Самописный_калькулятор
🔗 Код:

num1 = int(input())
num2 = int(input())
sign = (input())

if num2 == 0 and sign == '/':
print ('На ноль делить нельзя!')
else:
if sign == ('/'):
print (num1 / num2)
elif sign == ('*'):
print (num1 * num2)
elif sign == ('+'):
print (num1 + num2)
elif sign == ('-'):
print (num1 - num2)
else:
print('Неверная операция')
Теперь, я думаю, можно немного отвлечься и поговорить об алгоритмах, не так давно начал читать супер базовую книгу, которые мне рекомендовали абсолютно везде #Книги
Книжонка абсолютно ахуенно сделана и расписана так, что поймет чел с абсолютно любым мышлением, но в идеале иметь какие-то знания по программированию
Хотелось бы продолжить вести этот канал для 1 одного зрителя как мой собственный дневник больного, поэтому разберу с самого начала, что же я там начитал. Если периодически писать про прочитанные штуки, то , возможно, что-нибудь да запомню
🧑‍💻Итак, че это такое ваше Big(O)⁉️

0️⃣ Вообще, O это типо производительность нашего с вами алгоритма, скорость его выполнения (по мере увеличения входных данных), ‼️так как некоторые алгоритмы показывают свое превосходство именно при увеличении данных, которые мы подаем. ‼️

1️⃣🔗 В общем, есть некоторые разновидности этого самого Big(O).

Возьмем первые два вида и ахуеный пример из книги.

3️⃣ Первый вид это конечно O(n). Это у нас линейное время, а используется для простого поиска (это вы запомните).

4️⃣ Второй вид это O(log n) - это как раз логарифмическое время (используется для бинарного поиска). Даже нашел вам первую попавшуюся картинку, кстати показано все
максимально наглядно. #Алгоритмы
5️⃣ Как мы можем заметить, O(1) и O(log n) работает одинаково хорошо. Давайте разберем каждый из них.

🖇 Первый это O(1), время выполнения не зависит от количества входных данных, алгоритм выполняет фиксированное количество операций независимо от того, насколько большими или малыми могут быть входные данные, а это значит что он супер эффективный.

🔗 К примеру:

У нас есть, значит, массив, допустим, набор цифр от 1 до 10. Выполнение алгоритма будет таким быстрым, потому что мы сразу имеем доступ к элементу этого массива.

⭕️ Хотим мы вывести 5 элемент массива и выводим.

6️⃣ Теперь O(log n)
. Как я уже сказал в прошлом посте, ‼️ такому алгоритму присущ бинарный поиск, ща мы его и рассмотрим, тут же рассмотрим O(n), также из прошлого поста (Просто их проще сравнивать). #Бинарный_поиск
7️⃣ Берем пример из книги, есть у вас 128 имен (отсортированных ес че). Хотите вы найти определенное имя, пусть оно будет под номером 🟰12🟰. Что же бя делать?

8️⃣ Первое, что можно сделать, это тупо перебрать, как раз это у нас и есть O(n) - простой поиск.❗️ Но обычный перебор 128 имен это как-то слишком скучно, давайте быстрее. Тут выходит ферзь O(log n),‼️ Именно это Big(O) отвечает за бинарный поиск. 🔝Скорость этого алгоритма растет логарифмически с ростом размером данных (Типа чем больше данных, тем круче он будет по сравнению с O(n), ща объясню).

🔗Вернемся к 128 именам. Вместо того, чтобы как дауничи перебирать сидеть, разделяем 128 на 2 и спрашиваем, находится ли число, которое мы ищем, посередине??

9️⃣⭕️ Если нет, то сравниваем 12 и 64. Оказывается, что 12 меньше 64 (ахеть), а значит перемещаемся в диапазон от 1 до 64, теперь у нас 64 имени, та половина нам больше не нужна.

1️⃣0️⃣ Дальше делим 64 на 2 и смотрим, посередине ли находится наше искомое имя? Если нет, то снова сравниваем, 12 < 32, значит идем в диапазон от 1 до 32.

1️⃣1️⃣ Тоже самое делаем при последующем делении на 2, сначала получаем 16, потом 8. попадаем в диапазон от 8 до 16. Мы почти близко... ИИ того у нас получается каких то 5 шагов вместо 128!!!!!
(Это мы разницу разобрали между простым и бинарным поиском) #Бинарный_поиск
ну и двумя видами Big(O) ‼️
Итак, подается 4 числа, нам нужно понять, имеют ли две клетки одинаковый цвет, или нет? #Шахматная_доска