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

Обсуждение, новости, материал и сплетни — все здесь https://t.me/CodeLabMLChat
Download Telegram
Сори гайс, день был очень загруженный, завтра напишу полноценный пост

А пока, держите:


def get_name_and_decades(name, age):
print(f"My name is {name} and I'm {age / 10:.5f} decades old.")

get_name_and_decades("Leo", 31)
3❤‍🔥2🥰1
Всем Доброе утро!

🧑‍💻Ща мы быстренько разберем конец программы, вчера совсем забегался, но зато сегодня - завтра опубликую несколько хороших постов 😋

0️⃣ Последнее, на чем мы остановились, это создание словаря, где ключ-значение — это Имя студента и рассчитанный по формуле средний балл.

1️⃣ Теперь выведем средние баллы студентов (пока что без порога)

print("\nСредний балл студентов:")
for name, average_rating in student_averages.items():
print(f"{name}: {average_rating:.2f}") #округление среднего балла до двух знаков после запятой


2️⃣ Нам нужно как то найти тех самых отличившихся студентов, поэтому пусть программа спросит порог для оценивания (для последующего вывода студентов с баллами выше порога)

threshold = float(input("\nВведите порог для вывода студентов с баллом выше: "))
top_students = get_top_students(student_averages, threshold)


‼️ Касаемо функции 🟰get_top_students()🟰, о ней мы писали тут (Если что, она возвращает студентов с баллами выше порога. который мы ставим сами)

3️⃣‼️ На данном этапе функция get_top_students выбирает из словаря student_averages только тех студентов, чей средний балл выше указанного порога (у нас это переменная threshold), и сохраняет их в новый словарь top_students. Этот наш новый словарь содержит только тех студентов, которые прошли этот фильтр, то есть у которых средний балл больше порога.

3️⃣🔗 Теперь проверим, если у нас в словаре есть ключ - значение для студентов с их оценками (выше порога, конечно)

if top_students: # Если тут есть данные, то:
print("\nСтуденты с баллом выше порога:")
for name, average_rating in top_students.items():
print(f"{name}: {avg:.2f}") #Выводим данные по студентам на экран (ключ - значение)
else:
print("Нет студентов с баллом выше порога.")


4️⃣🔗 Теперь выведем студента с наивысшим средним баллом:

print_top_student(student_averages)


5️⃣🔗 Пишем повтор программы (вдруг мы что-то не ввели), иначе программа останавливается

repeat = input("\nХотите ввести данные заново? (да/нет): ").lower()
if repeat != 'да':
print("Программа завершена.")
break


🧑‍💻 Итак, мы это все дописали, постараюсь днем выложить пару тестиков, чтобы вы не расслаблялись особо, а вечером мы скомпонуем весь код и посмотрим что как работает.
17🤓3❤‍🔥21🥰1
🗂Необходимо собрать и вывести все уникальные слова из строки рекламного текста. Какой из перечисленных типов данных🐍 Python подходит лучше всего?
Anonymous Quiz
10%
кортеж (tuple)
67%
множество (set)
10%
словарь (dict)
14%
список (list)
❤‍🔥21👍1🥰1
🧑‍💻 Вот и готов наш код, завтра допишу навигацию, чтобы вы с кайфом могли с этим всем разобраться:

def student_data():
students = {}
while True:
name = input("Введите имя студента, или 'стоп' для завершения ввода: ")
if name.lower() == 'стоп':
break
try:
grades = list(map(float, input(f"Введите оценки для {name} через пробел: ").split()))
students[name] = grades
except ValueError:
print("ERROR")
return students

def calculate_average(grades):
return sum(grades) / len(grades) if grades else 0

def get_top_students(students, threshold):
return {name: average_rating for name, average_rating in students.items() if average_rating > threshold}


def print_top_student(students):

if not students:
print("Нет данных о студентах.")
return
top_student = max(students, key=students.get)
print(f"Студент с наивысшим средним баллом: {top_student} ({students[top_student]:.2f})")


def main():

while True:
students = student_data()

if not students:
print("Нет данных для анализа.")
continue


student_averages = {name: calculate_average(grades) for name, grades in students.items()}


print("\nСредний балл студентов:")
for name, average_rating in student_averages.items():
print(f"{name}: {average_rating:.2f}")


threshold = float(input("\nВведите порог для вывода студентов с баллом выше: "))
top_students = get_top_students(student_averages, threshold)

if top_students:
print("\nСтуденты с баллом выше порога:")
for name, average_rating in top_students.items():
print(f"{name}: {average_rating:.2f}")
else:
print("Нет студентов с баллом выше порога.")


print_top_student(student_averages)


repeat = input("\nХотите ввести данные заново? (да/нет): ").lower()
if repeat != 'да':
print("Программа завершена.")
break


main()
14❤‍🔥2🤯2👍1🤓1👨‍💻1
Как то пару дней назад я делал тест с такой функцией, давайте быстренько ее разберем:

def func_1(n):
def multiply(x):
return x * x
return multiply(n) + multiply(n - 1)

result = func_1(4)
print(result)


0️⃣ Для начала объявим функцию 🟰def func_1(n):🟰‼️ Как раз туда мы и передадим аргумент 4

1️⃣ Внутри 'внешней функции' будет находиться 🟰def multiply(x):🟰, она будет возвращать квадрат числа (x * x).

2️⃣ После того, как мы объявили функцию 🟰def multiply(x):🟰, во 'внешнюю' функцию 🟰def func_1(n):🟰 возвращается сумма двух вызовов multiply

return multiply(n) + multiply(n - 1)


3️⃣ Кароч, чтобы было понятно: мы передаем аргумент n = 4 в 🟰func_1🟰 → затем, в функции 🟰func_1🟰 определена функция 🟰multiply(x)🟰, при ее вызове мы как раз передаем аргумент x → воот, внутри функции multiply, x = 4 (‼️Потому что n — это просто переменная func_1, которую мы передаем в multiply как аргумент x, когда вызываем multiply(n)‼️), x * x даст 4 * 4 = 16multiply(n - 1) — это вызов multiply(3).

Тройка передается в multiply и становится значением x. Ну, тут точно также как с четверкой, 3 * 3 = 9. Два результата складываются и получаем 25
19❤‍🔥31🥰1
CodeLab
⚙️ Итак, здарова работяги, ща рассмотрим пример из книги: 👨‍💻Сам пример посложнее, мы можем близко предсказать, но вот с точностью могут быть проблемы. 🔗 Таблица показывает данные о домах с разным количеством комнат и их ценах. ⭕️ Цена дома напрямую зависит…
🧑‍💻 Так, продолжаем машинку, завтра мб выложу тесты)

Помните мы написали формулу цена=100+50×количество комнат+небольшое расхождение.

⭕️ Когда мы говорим, что наклон
прямой равен 50, это означает, что каждый раз, добавляя в дом одну комнату, мы вычисляем, что цена дома вырастет на 50 долларов. Когда говорим, что y-пересечение прямой равно 100, это означает, что стоимость гипотетического
дома с нулевым количеством комнат базовая — 100 долларов.
4❤‍🔥2🥰1
🟰Алгоритм линейной регрессии🟰

Немного теории, которая нам пригодится:

🔗 Входные данные — набор точек на плоскости.

🔗 Результат — прямая, проходящая близко к точкам

🔗 Процедура — выбираем случайную прямую → выбираем случайную точку данных → перемещаем прямую немного ближе к ней ( повторяем это )

🔗 Возврат — полученная прямая

p — цена дома в наборе данных;
Y — прогнозируемая цена дома;
r — количество комнат;
m — цена за комнату;
b — базовая цена за дом.


Теперь формула:

🟰Y = mr + b🟰 прогнозируемая цена = цена за комнату × количество комнат + базовая цена дома

⭕️ Допустим, цена за комнату — 50000, у нас 3 комнаты в доме, а базовая цена 200000, как мог бы выглядеть код:


def predict_price(m, r, b):

return m * r + b

price_per_room = 50000
number_of_rooms = 3
base_price = 200000

predicted_price = predict_price(price_per_room, number_of_rooms, base_price)
print(f"Прогнозируемая цена дома: ${predicted_price}")
5❤‍🔥2👍1🤓1👨‍💻1
def multiply(a = 2, b=7):
return a * b
result = multiply(3) print(result)
Anonymous Quiz
19%
3
0%
6
6%
7
0%
24
56%
21
19%
14
❤‍🔥2🤓2
Опрос будет внизу под постом 👇🏻

def func(x):
return x + 5

def main():
return func(5) + func(10)

print(main())
3❤‍🔥2👨‍💻1
Каким будет ответ?
Anonymous Quiz
87%
25
0%
14
13%
18
0%
35
0%
40
👀3❤‍🔥2
🧑‍💻 Всем ку, разберем небольшой код с утра:

📈 Итак, в чем суть, у нас есть строка "aaabbvvvvccd", а мы будем должны ее сократить как то так -- a3b2v4c2d1

0️⃣ Объявим функцию для начала def compress_string(s): и проверим строку на наличие символов. Типо если строка s пустая, функция возвращает пустую строку.

def compress_string(s):    
if not s:
return " "


1️⃣ Создадим список (туда будем заносить измененные строчки) и счетчик (для подсчета повторяющихся букв):

    listt = []
count = 1


2️⃣🔗 Теперь основной цикл:

    for i in range(1, len(s)): # Мы начинаем с индекса 1 (у нас это второй символ) и проходим по всей строке до конца
if s[i] == s[i - 1]: # Если текущий равен предыдущему:
count += 1 # Увеличиваем счетчик на 1


3️⃣⚙️ Иначе:

        else:
listt.append(s[i - 1] + str(count)) #Если текущий символ не равен предыдущему, последовательность закончилась. Это значит, что вся строка добавляет в список listt[] строку, состоящую из символа и его количества (как раз то, что нам нужно)

count = 1 # Обновляем счетчик, чтобы начать подсчет для новой буквы


4️⃣🔗 После завершения цикла мы добавляем последний символ и его количество в список (последний символ не будет обработан в цикле)

    listt.append(s[-1] + str(count)) # Мы соединяем все элементы в списке listt в одну строку с помощью ''.join(listt) и возвращаем результат 
return ''.join(listt) # Об этом поговорим еще сегодня

print(compress_string("aaabbvvvvccd"))


🔗Весь код:

def compress_string(s):    
if not s:
return " "
listt = []
count = 1
for i in range(1, len(s)):
if s[i] == s[i - 1]:
count += 1
else:
listt.append(s[i - 1] + str(count))

count = 1

listt.append(s[-1] + str(count))
return ''.join(listt)
print(compress_string("aaabbvvvvccd"))
7❤‍🔥2🥰1🤯1🤡1👨‍💻1
🧑‍💻 #1 Выполним несколько тестов

def func(a, *args, **kwargs):
print(a, args, kwargs)

func(1, 2, 3, x=4, y=5)
1❤‍🔥2👍1🤓1
Да, знаю, что мы это не проходили, завтра разберемся) Хотя, если среди вас есть те, кто шарит, смело объясняйте в коментах
Anonymous Quiz
33%
1 (2, 3) {'x': 4, 'y': 5}
40%
1 [2, 3] {'x': 4, 'y': 5}
27%
1 (2, 3, {'x': 4, 'y': 5})
0%
2 (1, 3, {'x': 4, 'y': 5})
❤‍🔥21👍1🥰1
#2 🌶

def func(x, y=[]):
y.append(x)
return y

list1 = func(1)
list2 = func(2, [])
list3 = func(3)

print(list1, list2, list3)
1❤‍🔥21👍1👀1
Какой будет ответ? (Завтра также разберем)
Anonymous Quiz
43%
[1] [2] [3]
29%
[1, 3] [2] [1, 3]
21%
[1] [2] [1, 3]
7%
[1, 2, 3] [1, 2, 3] [1, 2, 3]
❤‍🔥21👍1🥰1
🧑‍💻 Всем добрый вечер гайс

🔗 Как и говорил, рассмотрим метод join(). Этот метод используется в Python для объединения списка строк в одну строку с использованием указанного разделителя.

words = ["Hello", "Code", "Lab", "is", "awesome"]
result = " ".join(words)
print(result) # Вывод: "Hello Code Lab is awesome"


🔗 Использование другого разделителя (запятая и пробел):

fruits = ["Hello", "Code", "Lab", "is", "awesome"]
result = ", ".join(fruits)
print(result) # Вывод: "Hello, Code, Lab, is, awesome"


🔗 Также есть случаи, когда элементы последовательности не являются строками, в таком случае приводим их к нужному типу данных.

numbers = [1, 2, 3]
result = "-".join(map(str, numbers))
print(result) # Вывод: "1-2-3"
1❤‍🔥2🤯1🤡1🤓1
🧑‍💻Всем ку, сейчас разберем вот такую функцию ↓

🔗 Как раз постараемся понять что такое этот ваш **кваргс и *аргс

def func(a, *args, **kwargs):
print(a, args, kwargs)

func(1, 2, 3, x=4, y=5)


0️⃣ Ну для начала базировано объявляем функцию:

⚙️ Из аргументов у нас есть a (обычный аргумент, мы их обычно и передаем в других примерах)
, *args (Позиционные аргументы) и **kwargs (Именованные аргументы) — сейчас со всем разберемся

def func(a, *args, **kwargs):


Для начала, разберемся с таким оператором как 🟰 * 🟰

⁉️ Че он делает? Он буквально распаковывает элементы из коллекций (у нас это списки, кортежи или множества)

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


💬 — Мысль не моя, но автор статьи пояснил очень неплохо, вот вам пример:

a = [1,2,3]
b = [*a,4,5,6] # мы берем содержимое списка a и распаковываем его в новый список b
print(b) # [1,2,3,4,5,6]


📊 Вот еще пример, но уже с нашей любимой функцией:

def func(x, y, z):
return x + y + z

numbers = [1, 2, 3]
result = func(*numbers) # Распаковываем список в отдельные аргументы
print(result) # Вывод: 6


‼️ Если вы подумали, что на одной звездочке все закончится, как бы не так)

🔗 Ведь существует оператор 🟰 ** 🟰. Нужен он для распаковки словарей, превращая пары ключ-значение в отдельные именованные аргументы:

data = {'name': 'Brovscki', 'age': 21}
def greeting(name, age):
print(f"Hello, {name}! You are {age} years old.")

greeting(**data) # Вывод: Hello, Brovscki! You are 21 years old
7❤‍🔥3👍21🤓1👀1