Сообщество - Программирование на python

Программирование на python

929 постов 11 940 подписчиков

Популярные теги в сообществе:

6

100 программ в одну строчку кода на Python

100 программ в одну строчку кода на Python

«100 программ в одну строчку кода, Python» — это не просто сборник мини-скриптов, это билет в удивительный мир лаконичного и мощного программирования. Здесь каждая строка — как выстрел из лука в яблочко: точна, эффективна и удивляет своей простотой.

Книга идеально подойдёт:

- новичкам, желающим быстро увидеть реальные результаты,

- опытным разработчикам, ищущим вдохновение и нестандартные решения,

- преподавателям и менторам — как практичный и яркий материал для объяснения концепций,

- всем, кто любит красоту минимализма в коде.

Вы узнаете, как всего одной строкой:

- рассчитать физические формулы,

- сгенерировать случайные данные,

- создать визуализацию,

- преобразовать текст,

- и даже автоматизировать повседневные задачи.

Эта книга вдохновит, удивит и заставит по-новому взглянуть на программирование. Готовы прокачать мышление одной строкой? Тогда — поехали!

Показать полностью 1
9

ИИ-ассистент Void

БЕСПЛАТНЫЙ аналог Cursor — ИИ-ассистент Void, который способен работать даже с локальными моделями:

- Выбираем ЛЮБУЮ модель для работы — поддерживает всё: ChatGPT, Grok, DeepSeek, Claude, Mistral, Llama, Qwen и тд;

- Есть 3 режима для общения: Chat в обычном режиме, Gather для работы с файлами и Agent для кода и расширений;

- IDE работает как VSCode — устанавливаем всевозможные плагины и расширения;

- Главное: БЕЗЛИМИТНО

Ссылка

Источник

Показать полностью
10

Как обойти ошибку SSLCertVerificationError при использовании requests в Python и работать с сертификатами

Ошибка SSLCertVerificationError часто возникает при попытке установить соединение с HTTPS-сервером. Это происходит, когда Python не может проверить подлинность SSL-сертификата сайта. Причины могут быть разными: отсутствующие корневые сертификаты, проблемы с сертификатом на сервере или неправильная настройка клиента.

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

🔍 Что такое SSL-сертификат и зачем он нужен?

SSL (Secure Sockets Layer) — это протокол безопасности, который обеспечивает защищённую передачу данных между клиентом и сервером. Он используется для шифрования данных и подтверждения подлинности сервера.

💡 Пример: Алиса и Борис

Представьте, что Алиса хочет отправить Борису важное сообщение, но боится, что кто-то может перехватить его. Для того чтобы удостовериться, что сообщение дошло именно до Бориса, она решает использовать шифрование с сертификатами.

  • Алиса: она знает, что только Борис может расшифровать сообщение, потому что у него есть приватный ключ.

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

SSL-сертификат — это как удостоверение личности для веб-сайта, которое помогает избежать MITM-атак (атака «человек посередине») и обеспечивает безопасность передачи данных.

🛠 Способы решения ошибки SSLCertVerificationError

✅ Способ 1: Отключение проверки SSL (не рекомендуется для продакшн-среды)

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

⚠️ Важно: Использовать verify=False стоит только для доверенных источников и в локальной разработке. В продакшн-средах лучше избегать этого метода.

✅ Способ 2: Установка корневых сертификатов (перманентное решение для Windows)

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

Инструкция для Windows:

  1. Перейдите в папку установки Python. Например:C:\Users\<твой_пользователь>\AppData\Local\Programs\Python\Python312\

  2. Запустите файл Install Certificates.command (или install_certificates.bat, в зависимости от версии Python).

Это действие установит необходимые корневые сертификаты для вашего Python.

✅ Способ 3: Использование библиотеки certifi

Для того чтобы гарантировать корректную проверку SSL-сертификатов, можно использовать библиотеку certifi, которая поставляется с актуальными корневыми сертификатами.

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

🛠 Как создать SSL-сертификат на Windows?

Для тестирования и локальной разработки можно использовать самоподписанные сертификаты. Мы рассмотрим два способа их создания: через PowerShell и через командную строку (CMD).

🧰 Способ 1: Создание самоподписанного сертификата через PowerShell

PowerShell позволяет быстро создать самоподписанный SSL-сертификат. Вот пример команды:

Экспорт сертификата и ключа:

Вы можете использовать эти сертификаты для тестирования локальных серверов.

🧰 Способ 2: Создание сертификата через командную строку (CMD) с помощью openssl

Если у вас установлен OpenSSL, вы можете использовать его для создания сертификатов через командную строку.

  1. Создание самоподписанного сертификата:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.crt -subj "/CN=localhost"

  1. Экспорт сертификата в формат PFX:

openssl pkcs12 -export -out localhost.pfx -inkey localhost.key -in localhost.crt -passout pass:P@ssw0rd123

  1. Если у вас нет OpenSSL, можно использовать makecert.exe:

makecert -r -pe -n "CN=localhost" -b 01/01/2023 -e 01/01/2030 -sky exchange -sv localhost.pvk localhost.cer
pvk2pfx -pvk localhost.pvk -spc localhost.cer -pfx localhost.pfx

Статья на github 👉 https://github.com/hypo69/1001-python-ru/blob/master/articles/ssl_sertifiactes_in_python/ssl_sertifiactes_in_python.md

Удачной разработки, лёгкого кодинга и никаких SSLError! 💻✨🐍

Показать полностью 4
13

Как Python и погода помогают решить, когда менять шины: простое решение без гаданий

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

Знакомая ситуация? Чтобы не гадать, я решил подключить Python и прогноз погоды, чтобы получить точный ответ.

Немного теории

Своевременная смена шин — это не просто забота о резине, а вопрос безопасности. Зимние шины в плюсовую погоду теряют сцепление и быстрее изнашиваются, а летние на холодной дороге могут стать причиной заноса.

Есть простое правило: если ночью температура стабильно выше +5 °C, можно смело переобуваться. Но если по ночам случаются заморозки, даже несмотря на тёплые дни, — лучше повременить. Один неожиданный ледяной утренник может обернуться серьёзными проблемами.

Идея решения

Угадывать по ощущениям — не лучший способ принимать решения. Лучше спросить напрямую у погоды. Я нашёл открытый погодный API, который не требует ни регистрации, ни ключей — всё просто.

<a href="https://pikabu.ru/story/kak_python_i_pogoda_pomogayut_reshit_kogda_menyat_shinyi_prostoe_reshenie_bez_gadaniy_12584322?u=http%3A%2F%2Fapi.open-meteo.com%2Fv1%2Fforecast%3Flatitude%3D58.00927115232101%26longitude%3D56.2228553210843%26daily%3Dtemperature_2m_min%26timezone%3Dauto&t=api.open-meteo.com%2Fv1%2Fforecast%3Flatitude%3D58.00927115232101%26amp%3Blongitude%3D56.2228553210843%26amp%3Bdaily%3Dtemperature_2m_min%26amp%3Btimezone%3Dauto&h=940feb9f420e08af0c63c95a82c57017225d5253" title="http://api.open-meteo.com/v1/forecast?latitude=58.00927115232101&longitude=56.2228553210843&daily=te..." target="_blank" rel="nofollow noopener">api.open-meteo.com/v1/forecast?latitude=58.00927115232101&amp;longitude=56.2228553210843&amp;daily=temperature_2m_min&amp;timezone=auto</a>

api.open-meteo.com/v1/forecast?latitude=58.00927115232101&longitude=56.2228553210843&daily=temperature_2m_min&timezone=auto

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

Как это работает

Сначала я определяю координаты своего города — Перми — и передаю их в API-запрос.

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

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

Код

Вот так выглядит мой скрипт на Python — он простой, понятный и снабжён комментариями на русском. Нужно лишь указать координаты своего города, задать порог температуры (например, +1 °C), и скрипт сам покажет прогноз на ближайшие 7 дней. В выводе вы сразу увидите: стоит ли ещё ждать с переобувкой, или уже можно смело записываться в шиномонтаж.

Код можно <a href="https://pikabu.ru/story/kak_python_i_pogoda_pomogayut_reshit_kogda_menyat_shinyi_prostoe_reshenie_bez_gadaniy_12584322?u=https%3A%2F%2Fhabr.com%2Fru%2Farticles%2F898174%2F&t=%D1%81%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%BE%D1%82%D1%81%D1%8E%D0%B4%D0%B0&h=5e231227ac42009ba51fa32a3f58451e56cc3532" title="https://habr.com/ru/articles/898174/" target="_blank" rel="nofollow noopener">скопировать отсюда</a>

Код можно скопировать отсюда

Это не магия, а просто удобный способ принимать бытовые решения на основе данных, а не «на глазок». И кстати — всё open source, так что можно доработать под себя.

Результаты

Скрипт показал, что в ближайшие дни в Перми несколько ночей будут с заморозками: -0.5 °C, -1.0 °C и даже при +0.4 °C ещё рано рисковать. Несмотря на дневное тепло, ночные температуры всё ещё ниже безопасного порога.

Итог: менять зимние шины пока не стоит — подождём более стабильного тепла хотя бы выше +5 °C ночью.

Заключение

Немного кода и открытые данные — и вы уже принимаете решения не «на глаз», а осознанно.

Автор: Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»

8 апреля 2025 г.

Показать полностью 4
13

Простая пинговалка с графиком на Python

<!--noindex--><a href="https://pikabu.ru/story/prostaya_pingovalka_s_grafikom_na_python_12582224?u=https%3A%2F%2Fwww.online-python.com%2FHRuJIQPs3E&t=https%3A%2F%2Fwww.online-python.com%2FHRuJIQPs3E&h=7357a4763ae91722c2488b9227819b54e4895310" title="https://www.online-python.com/HRuJIQPs3E" target="_blank" rel="nofollow noopener">https://www.online-python.com/HRuJIQPs3E</a><!--/noindex-->

https://www.online-python.com/HRuJIQPs3E

import tkinter as tk

from icmplib import ping

from datetime import datetime

from collections import deque

import matplotlib.pyplot as plt

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

import configparser

import matplotlib.dates as mdates

import threading


UPDATETIME = 20

INI_FILE = 'hosts.ini'

COLUMN = 2

GRAHP_WIDTH = 600

GRAHP_HEIGHT = 300

GUI_GEOMETRY = "1220x650"

PING_COUNT = 2

PING_INTERVAL = 2

DATA_LIMIT = 3000

class Host:

def __init__(self, ip, name, width_pixels, height_pixels, log_callback):

self.ip = ip

self.name = name

self.ping_data = deque(maxlen=DATA_LIMIT)

self.time = deque(maxlen=DATA_LIMIT)

self.log_callback = log_callback


dpi = 100

width_inches = width_pixels / dpi

height_inches = height_pixels / dpi


self.fig, self.ax = plt.subplots(figsize=(width_inches, height_inches), dpi=dpi)

self.line, = self.ax.plot([], [], label=f'{ip} {name} ms', color='darkgreen', linestyle='-', linewidth=2)

self.ax.legend()


self.ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))

self.ax.xaxis.set_major_locator(mdates.MinuteLocator(interval=30))


self.fig.autofmt_xdate()


def ping_host(self, ip, count=PING_COUNT, interval=PING_INTERVAL):

return ping(ip, count=count, interval=interval)


def update_ping(self):

try:

response = self.ping_host(self.ip)

current_time = datetime.now()

self.time.append(current_time)


if response.is_alive:

self.ping_data.append(response.avg_rtt)

else:

self.ping_data.append(0)

self.log_callback(f"{current_time.year}.{current_time.month}.{current_time.day} {current_time.hour}:{current_time.minute} : {self.name} ({self.ip}) недоступен\n")


self.line.set_data(self.time, self.ping_data)


self.ax.relim()

self.ax.autoscale_view()

self.fig.tight_layout()

self.canvas.draw()

except Exception as e:

print(f"Error pinging {self.ip}: {e}")


class App:

def __init__(self, GUI, ini_file):

self.gui = GUI

self.gui.title("Монитор Доступности оборудования")

self.gui.geometry(GUI_GEOMETRY)


self.hosts = self.load_hosts_from_ini(ini_file)


self.log_text = tk.Text(self.gui, height=10, width=80, wrap='none', state='disabled')

self.log_text.grid(row=0, column=0, padx=10, pady=10, sticky="nsew")


self.log_scrollbar = tk.Scrollbar(self.gui, orient="vertical", command=self.log_text.yview)

self.log_scrollbar.grid(row=0, column=1, sticky="ns")

self.log_text['yscrollcommand'] = self.log_scrollbar.set


self.canvas = tk.Canvas(self.gui)

self.scrollbar = tk.Scrollbar(self.gui, orient="vertical", command=self.canvas.yview)

self.scrollable_frame = tk.Frame(self.canvas)


self.scrollable_frame.bind(

"<Configure>",

lambda e: self.canvas.configure(scrollregion=self.canvas.bbox("all"))

)


self.canvas.create_window((0, 0), window=self.scrollable_frame, anchor="nw")

self.canvas.configure(yscrollcommand=self.scrollbar.set)


for i, host in enumerate(self.hosts):

canvas = FigureCanvasTkAgg(host.fig, master=self.scrollable_frame)

canvas.get_tk_widget().grid(row=i//COLUMN, column=i%COLUMN, padx=5, pady=5)

host.canvas = canvas


self.canvas.grid(row=1, column=0, sticky="nsew")

self.scrollbar.grid(row=1, column=1, sticky="ns")


self.gui.grid_rowconfigure(1, weight=1)

self.gui.grid_columnconfigure(0, weight=1)


self.start_ping()


def load_hosts_from_ini(self, ini_file):

config = configparser.ConfigParser()

config.read(ini_file)

return [Host(ip, hostname, width_pixels=GRAHP_WIDTH, height_pixels=GRAHP_HEIGHT, log_callback=self.log_message) for section in config.sections() for hostname, ip in config.items(section)]


def log_message(self, message):

self.log_text.config(state='normal')

self.log_text.insert("1.0", message)

self.log_text.config(state='disabled')


def start_ping(self):

for host in self.hosts:

thread = threading.Thread(target=host.update_ping)

thread.start()

self.gui.after(UPDATETIME * 1000, self.start_ping)


GUI = tk.Tk()

app = App(GUI, INI_FILE)

GUI.mainloop()

https://www.online-python.com/HRuJIQPs3E

формат ини-файла

[DNS]

google1 = 8.8.8.8

google2 = 8.8.4.4

cloudflare1 = 1.1.1.1

Quad9 = 9.9.9.9

Показать полностью
14

10 принципов использования try-except в Python

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

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

2. Не подавляй ошибки без необходимости
Никогда не оставляй пустой блок except. Если ты перехватываешь ошибку, её нужно либо обработать, либо хотя бы залогировать, иначе баги останутся незамеченными.

3. Используй else, если код не должен выбрасывать исключения
Если в блоке try выполняется действие, которое не должно вызвать ошибку, его лучше вынести в else. Это улучшает читаемость и предотвращает случайное подавление исключений.

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

5. Минимизируй зону try
Чем больше кода находится в блоке try, тем сложнее определить, где именно произошла ошибка. Оставляй в try только потенциально проблемный код, а остальные операции выполняй отдельно.

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

7. Будь осторожен с except: pass
Полностью игнорировать ошибки, используя pass, нельзя. Это может привести к незаметным сбоям, которые будет сложно отладить. Если ошибка ожидаемая, лучше логировать её или обработать корректно.

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

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

10. Логируй ошибки
При обработке исключений записывай информацию о них в лог. Это помогает в диагностике проблем и упрощает отладку. Можно использовать стандартный модуль logging.

Следуя этим принципам, код будет чище, понятнее и надёжнее. Делай код безопасным!

Чтобы не пропустить другие полезные разборы, заглядывай в мой Telegram-канал — там ещё больше интересных материалов по Python!

Показать полностью

Способ изучать программирование с интересом

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

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

Таких примеров масса. Кто-то автоматизирует домашние дела, кто-то создаёт сервисы для работы, а кто-то – просто игры для души. Если подходить к обучению с практическим интересом, оно становится увлекательным и даёт реальные результаты.

Я делюсь своим опытом становления айтишником в Telegram – если вам интересны такие вещи, заглядывайте!

Отличная работа, все прочитано!