Python для начинающих
1.1K subscribers
305 photos
3 videos
232 files
62 links
Python для начинающих
Download Telegram
Как использовать списочные выражения для упрощения кода
### Как использовать списочные выражения для упрощения кода

Привет, друзья! Сегодня мы погрузимся в загадочный и увлекательный мир Python, а именно—в списочные выражения. Эти маленькие джедаи помогают нам писать код, который не только выглядит лучше, но и работает эффективнее!

#### Что такое списочные выражения?

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

Например, представьте, что вам нужно создать список квадратов чисел от 0 до 9. В традиционном подходе вам бы пришлось использовать цикл for:

squares = []
for num in range(10):
squares.append(num ** 2)


Списочные выражения упрощают эту задачу:

squares = [num ** 2 for num in range(10)]


Чище, правда?

#### Фильтрация

Но на этом магия не заканчивается! Списочные выражения позволяют встроить условные конструкции. Хотите, чтобы в список попадали только четные числа? Пожалуйста:

even_squares = [num ** 2 for num in range(10) if num % 2 == 0]


Таким образом, мы не только создаем список, но и фильтруем его в процессе.

#### Работать с данными — легко!

Рассмотрим пример с данными. Допустим, у нас есть список имён, и мы хотим создать новый список, содержащий только имена, которые начинаются с буквы "А":

names = ['Alice', 'Bob', 'Annie', 'Michael', 'Ann']
a_names = [name for name in names if name.startswith('A')]


Вот и всё! Код не только изящен и читабелен, но и прозрачен в своём намерении.

#### Вложенные списки

Звучит невероятно, но списочные выражения поддерживают вложенность. Хотите создать двумерную матрицу 3x3? Легко:

matrix = [[row * col for col in range(3)] for row in range(3)]


Элегантность и краткость в действии!

#### Заключение

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

Итак, друзья, если вы ещё не использовали списочные выражения в вашем коде, самое время начать! Ведь, как говорил великий учитель Йода: "Делай или не делай, нет тут пробовать". Вперед за красивым и эффективным кодом!
👍4🔥1
Основы объектно-ориентированного программирования на Python
Привет, друзья! Сегодня мы погрузимся в волшебный мир объектно-ориентированного программирования (ООП) на Python. ООП — это не просто подход к написанию кода, это целая философия, которая позволяет упорядочивать ваш код и делает его более читаемым и модульным. Если вы когда-либо задумывались о том, как создать собственный мир внутри вашего кода, то добро пожаловать в ООП!

### Путешествие начинается: Классы и Объекты

Представьте, что вы — божественный создатель. И у вас есть волшебная возможность создавать собственные объекты на основе абстрактных чертежей. Эти чертежи называются классами. Класс описывает, какие свойства и методы будут у объектов, созданных на его основе.

class Wizard:
def __init__(self, name, power):
self.name = name
self.power = power

def cast_spell(self):
print(f"{self.name} casts a spell with power of {self.power}!")


__init__ — это конструктор, с помощью которого мы инициализируем наши объекты. Такие объекты — это конкретные реализации класса, в некотором смысле «живые» сущности вашего кода.

### Магия, заключенная в Инкапсуляции

Инкапсуляция — это концепция, которая позволяет скрыть внутреннюю реализацию классов. Мы можем защитить данные внутри класса и позволить взаимодействие только через методы. Это как если бы вы дарили миру гладко отполированный магический камень, не раскрывая, как он сделан.

### Полиморфизм: Многообразие форм

Теперь представьте, что у вас есть школа магии с различными типами волшебников: одни взымают огонь, другие — воду. Полиморфизм позволяет использовать методы с одинаковыми именами для разных объектов, и каждый объект будет вести себя по-своему. Это как универсальный заклинательный жезл, который работает для всех.

class FireWizard(Wizard):
def cast_spell(self):
print(f"{self.name} summons blazing flames!")

class WaterWizard(Wizard):
def cast_spell(self):
print(f"{self.name} calls forth a tidal wave!")


### Наследование: Передай свои навыки!

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

Мы лишь поверхностно коснулись магии, заключенной в ООП, но надеюсь, эти примеры увлекли вас и вызвали желание изучать дальше. Объектно-ориентированное программирование — это мощный инструмент, и освоив его, вы сможете создавать поистине удивительные структуры в вашем коде. До встречи в следующем посте, где мы продолжим наши исследования в мире Python!
👍3🔥2🥰1
Что такое исключения и как обрабатывать ошибки в коде
Итак, представьте, что вы путешественник в мире Python, и на вашем пути вам предстоит встретить невидимых врагов — исключения. Это те незаметные препятствия, которые поджидают в вашем коде и могут сорвать всё путешествие. Но не волнуйтесь, я расскажу вам, как превратить этих противников в союзников!

Исключения в Python — это особые события, которые возникают во время исполнения программы и сигнализируют о нештатной ситуации. Например, вы пытаетесь разделить число на ноль, но вместо катастрофы программа генерирует исключение, указывающее на ошибку.

Но как же справиться с этими пакостниками? Тут приходит на помощь конструкция try-except. Она — ваш верный компас, который поможет обойти ловушки. Давайте посмотрим на небольшой пример:

try:
result = 10 / 0
except ZeroDivisionError:
print("Oops! Division by zero is not allowed.")


Что здесь происходит? Мы вставляем потенциально опасный код в блок try. Если возникает исключение, Python ищет блок except, соответствующий типу исключения. В нашем случае это ZeroDivisionError, и программа выводит дружественное сообщение, вместо того чтобы упасть с громким стуком.

Но это ещё не всё! Исключений бывает множество, и иногда вам нужно отловить их всех разом. Используйте простое except, чтобы поймать любую неожиданность:

try:
int_value = int("not_a_number")
except:
print("An error occurred!")


Однако будьте осторожны! Такой подход может скрыть важные детали об ошибке. Лучше обрабатывать исключения более конкретно и добавлять несколько блоков except при необходимости.

Ещё одна мощная техника — блоки finally и else. Они помогут завершить вашу одиссею на высокой ноте. Блок finally исполняется после всех остальных, независимо от исхода. Это идеальное место, чтобы освободить ресурсы или закрыть файлы.

try:
file = open("data.txt")
content = file.read()
except FileNotFoundError:
print("File not found!")
else:
print("File successfully read.")
finally:
file.close()


Этот пример демонстрирует использование всех четырёх блоков. else выполняется, если ошибок не произошло, и finally закрывает файл, гарантируя отсутствие утечек ресурсов.

Теперь, когда вы знаете, что исключения — это не враги, а предупреждающие сигналы, вы вооружены знанием и готовы к любым неожиданностям на вашем пути. Впереди вас ждет ещё много удивительных открытий в мире Python!
👍1🔥1
Как парсить веб-страницы и извлекать данные с BeautifulSoup
Привет, друзья! Сегодня я хочу рассказать вам о магии, которая позволяет извлекать данные из веб-страниц, и имя этой магии — BeautifulSoup. Мы окунёмся в увлекательный мир парсинга и узнаем, как легко можно с помощью Python достать нужную информацию с любого сайта.

Начнем с того, что такое BeautifulSoup. Это библиотека на Python, которая позволяет парсить HTML и XML документы, создавая объектное представление документа. Это означает, что она преобразует код в красивую, организованную структуру, с которой легко работать. Давайте рассмотрим, как же это происходит на практике.

Первое, что нам нужно, это установить библиотеку. Если её у вас еще нет, быстро устанавливаем с помощью команды:

pip install beautifulsoup4


Также, для получения HTML-кода страниц, нам понадобится библиотека requests. Установить её можно аналогичным образом:

pip install requests


Теперь, когда всё готово, давайте напишем небольшой код, который извлечет заголовки статей с какой-нибудь интересной страницы. Например, возьмем "https://example.com".

import requests
from bs4 import BeautifulSoup

# Отправляем GET-запрос к странице
response = requests.get("https://example.com")

# Проверяем, что страница загрузилась успешно
if response.status_code == 200:
page_content = response.text
soup = BeautifulSoup(page_content, 'html.parser')

# Ищем все заголовки на странице
titles = soup.find_all('h2') # предположим, наши заголовки — это теги <h2>

# Печатаем все найденные заголовки
for title in titles:
print(title.get_text())

else:
print("Не удалось загрузить страницу")


Что здесь происходит? Мы отправляем запрос на веб-страницу и проверяем, что она была загружена успешно. Затем передаем содержимое страницы в BeautifulSoup. После чего начинаем извлекать информацию. В нашем случае, это все теги <h2>, которые содержат заголовки статей.

Конечно, это всего лишь верхушка айсберга. BeautifulSoup обладает множеством функций для поиска и навигации по HTML-документу. Например, можно использовать метод find, чтобы найти первый элемент с заданным тегом, или метод find_all для поиска всех элементов с таким тегом. Можно также использовать CSS-селекторы для более сложных запросов.

Хотите выделить текстовое содержимое всех параграфов с классом intro? Нет ничего проще:

intro_paragraphs = soup.select('p.intro')

for paragraph in intro_paragraphs:
print(paragraph.get_text())


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

Удачного парсинга, друзья!
👍6🔥1
Интерактивные графики и визуализация данных с Plotly
Сегодня мы погрузимся в удивительный мир интерактивной визуализации данных с помощью библиотеки Plotly. Если вы когда-нибудь хотели оживить свои графики и сделать их более впечатляющими, то Plotly — это именно то, что вам нужно!

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

Начнем с простого примера. Допустим, у вас есть данные о продажах разных продуктов, и вы хотите визуализировать их в виде столбчатой диаграммы:

import plotly.graph_objects as go

categories = ['Продукт A', 'Продукт B', 'Продукт C']
values = [150, 200, 250]

fig = go.Figure([go.Bar(x=categories, y=values)])
fig.show()


Этот код создаст простую и понятную столбчатую диаграмму, которую можно будет масштабировать, наводить на элементы и даже выгрузить в различных форматах. С Plotly вы увидите, как ваши данные оживают на экране!

Но это только начало! Допустим, вы хотите создать линейный график, чтобы лучше понять динамику продаж за год:

import plotly.express as px
import pandas as pd

data = pd.DataFrame({
'month': ['Январь', 'Февраль', 'Март', 'Апрель'],
'sales': [2000, 3000, 4000, 3500]
})

fig = px.line(data, x='month', y='sales', title='Динамика продаж')
fig.show()


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

Plotly в полной мере раскрывает свой потенциал при работе с картами и 3D-графиками, что делает его незаменимым в мире больших данных и геовизуализаций.

Теперь, вооружившись этими знаниями, вы можете создавать прекрасные интерактивные графики для любого случая. Начните использовать Plotly в своих проектах, и увидите, насколько обогащается ваш опыт работы с данными. В следующий раз мы поговорим о других полезных библиотеках для Python-программистов. Оставайтесь с нами!
👍2🔥1
Создание GUI приложений с использованием Tkinter
Привет, начинающие маги Python! Сегодня у нас захватывающее приключение в мир создания графических приложений. Если вы когда-либо мечтали сделать свое собственное приложение с кнопками и вводом данных, то вы попали по адресу. Знакомьтесь, это Tkinter – ваш верный спутник на пути к созданию GUI-программ.

Что же такое Tkinter? Это библиотека, которая позволяет нам создавать окна, кнопки, поля ввода и массу других графических элементов на языке Python. Tkinter входит в стандартную библиотеку Python, что делает его доступным прямо "из коробки".

Начнем с создания простого окна. Это как раз тот момент, когда мы открываем "волшебную книгу" и делаем первый шаг в мир GUI.

import tkinter as tk

root = tk.Tk()
root.title("Мое первое приложение")
root.geometry("300x200")

root.mainloop()


В этом небольшом кусочке кода мы импортировали библиотеку tkinter и создали главное окно. Метод mainloop() заставляет наше приложение работать и реагировать на события.

Теперь добавим в наше окно немного интерактивности с помощью кнопки:

def on_button_click():
print("Кнопка нажата!")

button = tk.Button(root, text="Нажми меня", command=on_button_click)
button.pack()


Сначала мы создали функцию, которая будет выполняться при нажатии кнопки. Затем, с помощью функции Button, добавили кнопку в наше окно. Метод pack() заботится о расстановке элементов. Вуаля, у нас уже есть интерактивное приложение!

Tkinter также позволяет работать с полями ввода. Давайте добавим поле, в которое пользователь сможет вводить текст:

entry = tk.Entry(root)
entry.pack()

def show_entry_data():
user_input = entry.get()
print(f"Вы ввели: {user_input}")

show_button = tk.Button(root, text="Показать текст", command=show_entry_data)
show_button.pack()


Здесь мы создаем объект Entry, представляющий поле ввода, и добавляем кнопку, которая выводит введенный текст в консоль.

Можно продолжать бесконечно, добавляя новые элементы и функциональность: списки, выпадающие меню, и даже сложные интерфейсы с помощью библиотеки Tkinter. Это мощный инструмент, который при должном старании поможет создать приложение мечты.

Теперь у вас есть все необходимое для начала работы с Tkinter! Исследуйте, экспериментируйте и создавайте. Помните, в программировании, как и в магии, возможности ограничены лишь вашим воображением. Удачи в создании ваших первых графических приложений!
👍5🔥2
Основы многопоточности и асинхронного программирования
В мире программирования Python многопоточность и асинхронное программирование — это словно две параллельные вселенные, которые могут сделать ваш код не только эффективнее, но и значительно сложнее для восприятия. Тем не менее, освоение этих техник — шаг к вашему росту как программиста. Что ж, давайте разбираться!

Многопоточность — это когда ваша программа может выполнять несколько задач одновременно. Например, представьте, что вы готовите ужин: вы можете одновременно резать овощи и варить пасту вместо того, чтобы сначала сделать одно, а потом другое. В Python для многопоточности часто используют модуль threading, который позволяет создавать и управлять потоками.

Пример кода с использованием модуля threading:

import threading

def print_numbers():
for i in range(5):
print(f"Number: {i}")

def print_letters():
for letter in 'abcde':
print(f"Letter: {letter}")

thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_letters)

thread1.start()
thread2.start()

thread1.join()
thread2.join()


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

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

Пример кода с использованием asyncio:

import asyncio

async def print_numbers():
for i in range(5):
print(f"Number: {i}")
await asyncio.sleep(1)

async def print_letters():
for letter in 'abcde':
print(f"Letter: {letter}")
await asyncio.sleep(1)

async def main():
task1 = asyncio.create_task(print_numbers())
task2 = asyncio.create_task(print_letters())

await task1
await task2

asyncio.run(main())


В этом примере задачи выполняются асинхронно: программа поочередно переключается между ними.

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

Надеюсь, этот краткий экскурс в параллельные миры многопоточности и асинхронности зажег ваш интерес к изучению этих мощных инструментов. Ведь с их помощью ваш Python-код станет еще более эффективным и мощным!
👍6🔥2
Основы тестирования кода: Юнит-тестирование в Python
Загляните в мир программирования, и вы неизбежно столкнетесь с понятием тестирования. Это одна из тех тем, о которой все говорят, но мало кто уделяет ей должное внимание, пока не окажется слишком поздно. Сегодня мы окунемся в мир юнит-тестирования в Python, и, поверьте, это путешествие будет увлекательнее, чем кажется.

Итак, представьте, что ваш код — это замок из песка. Он может выглядеть внушительно, пока не придет первое напряжение или ошибка, которая рушит всю конструкцию. Юнит-тестирование — это ваша защита, способ убедиться, что ваш замок не развалится даже от сильного ветра.

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

Начнем с простого примера. Представьте, что у нас есть функция, которая возвращает квадрат числа:

def square(x):
return x * x


Первая реакция: "Эта функция проста, ей тесты не нужны!" Но представьте, что в один момент функция изменилась, и вместо умножения она начала использовать сложение. Запомните: тесты — это ваши преданные друзья, которые не дадут вам оступиться.

Напишем для неё тест:

import unittest

class TestMathFunctions(unittest.TestCase):
def test_square(self):
self.assertEqual(square(2), 4)
self.assertEqual(square(-3), 9)
self.assertEqual(square(0), 0)

if __name__ == '__main__':
unittest.main()


Здесь мы создали класс TestMathFunctions, который наследует unittest.TestCase. Метод test_square проверяет нашу функцию square с несколькими значениями. Запуская этот файл, мы мгновенно узнаем, если что-то пойдёт не так.

Но что, если вам нужно учитывать больше, чем просто квадратное число? Представьте, у нас есть функция, переводящая градусы Цельсия в Фаренгейты:

def celsius_to_fahrenheit(c):
return (c * 9/5) + 32


И снова тесты приходят на помощь:

class TestConversionFunctions(unittest.TestCase):
def test_celsius_to_fahrenheit(self):
self.assertAlmostEqual(celsius_to_fahrenheit(0), 32)
self.assertAlmostEqual(celsius_to_fahrenheit(100), 212)


Функция assertAlmostEqual позволяет учитывать незначительные погрешности, которые могут возникнуть из-за особенностей вычислений.

Юнит-тестирование — это как раз тот момент, когда вы становитесь героем для будущего себя. Оно не только помогает ловить ошибки на ранних этапах, но и позволяет уверенно вносить изменения в код. И самое главное — это просто и быстро! Откройте для себя тестирование, и пускай ваш код будет устойчив, словно дом кирпичный, а не песочный замок.
🔥3
Настройка виртуального окружения для проектов на Python
Настройка виртуального окружения для проектов на Python: магия изоляции

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

Представьте себе ситуацию: у вас есть два проекта, и для одного требуется библиотека pandas версии 1.2.4, а для другого — свежая версия 1.3.0. Если вы начнёте устанавливать их глобально, очень скоро вы рискуете окунуться в море ошибок. Виртуальные окружения позволяют изолировать зависимости каждого проекта, как будто они каждый живут в своем маленьком пузыре.

Начнём с самого начала. Имея на своём устройстве установленный Python (если ещё не установлено, то в интернете масса инструкций по установке), мы уже готовы к созданию виртуальных окружений. Для этого существует встроенный модуль venv. Чтобы создать виртуальное окружение, достаточно выполнить команду:

python -m venv myproject_env


Здесь myproject_env — это название вашего виртуального окружения. Придумайте любое имя, которое позволит вам быстро понять, для какого проекта это окружение.

После создания, виртуальное окружение необходимо активировать. Это всё равно, что разбудить его ото сна. На Windows это делается так:

myproject_env\Scripts\activate


На macOS и Linux всё немного иначе:

source myproject_env/bin/activate


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

pip install pandas==1.2.4


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

deactivate


Вот и всё! Теперь вы знаете, как удержать хаос в узде и сделать так, чтобы каждый ваш проект жил своей жизнью, не мешая остальным. Настройка виртуального окружения — это один из ключевых элементов профессиональной разработки. Используйте эту магию изоляции в своих проектах и продолжайте прогрессировать в мире Python!
👍5🔥2
Работа с базами данных: Введение в SQLite в Python
Приветствую тебя, дорогой читатель! Сегодня мы с тобой отправимся в невероятное путешествие в мир баз данных. И в качестве нашего верного спутника выступит язык программирования Python. Готов? Тогда заваривай чай, устраивайся поудобнее — мы погружаемся в дебри SQLite!

Начнем с самого главного — почему SQLite? Это простейшая в настройке и использовании база данных. Она встроена в сам Python, не требует установки дополнительных серверов и идеально подходит для небольших проектов или локальных приложений. Представь себе карманный нож швейцарской армии — маленький, компактный и невероятно полезный. Именно таким инструментом является SQLite в мире баз данных.

Теперь давай разберемся, как можно работать с этой базой данных в Python. Для этого нам потребуется модуль sqlite3. Он уже входит в стандартную библиотеку, так что добавлять ничего не нужно. Начнем с создания простой базы данных и одной таблицы в ней.

import sqlite3

# Создание подключения
connection = sqlite3.connect('mydatabase.db')

# Создание курсора
cursor = connection.cursor()

# Создание таблицы
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER NOT NULL
)
''')

# Подтверждение изменений
connection.commit()

# Закрытие подключения
connection.close()


Что мы здесь видим? Мы создаем подключение к файлу базы данных mydatabase.db. Если файла не существует, он будет создан автоматически! Далее с помощью курсора (нет, не компьютерного, а специального объекта для работы с запросами) мы создаем таблицу users.

Хорошо, таблицу мы создали. А как насчет добавления данных? Давай научимся добавлять нового пользователя в нашу таблицу.

def add_user(name, age):
connection = sqlite3.connect('mydatabase.db')
cursor = connection.cursor()

cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', (name, age))

connection.commit()
connection.close()

add_user('Alice', 30)
add_user('Bob', 25)


Вот так просто мы добавили двух пользователей — Алису и Боба — в нашу базу данных. Обрати внимание на использование ? внутри SQL-запроса. Это позволяет защититься от SQL-инъекций, доверяя вводимые данные SQLite.

А как же извлечение данных? Давай достанем всех пользователей и выведем их на экран.

def fetch_users():
connection = sqlite3.connect('mydatabase.db')
cursor = connection.cursor()

cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()

for row in rows:
print(row)

connection.close()

fetch_users()


И voilà! Мы видим весь список наших пользователей. Здесь, в светлом будущем работы с базами данных, твои навыки в Python помогут создавать мощные и эффективные решения. Надеюсь, этот небольшой экскурс вдохновил тебя покорить новые горизонты!

Спасибо за внимание, надеюсь, ты узнал что-то новое. Если так, то мы уже достигли цели этого поста!
🔥2👍1