Python Hub - сборище Питонистов
1.71K subscribers
657 photos
1 video
37 files
276 links
Уголок счастья для любого питониста.

Сотрудничество или заказы: @leshunist

https://shcoder.dev - студия разработки ShcoderDevelopment

https://t.me/pythonhub_chat - чат
Download Telegram
Python Hub - сборище Питонистов
🤔 Охота лисы за уткой Ещё одна задачка с собеседований Microsoft. Лиса охотится за уткой, и последняя приземляется в центр идеально круглого пруда. Лиса не может плавать, а утка не может взлететь с воды. Чтобы утка могла сбежать, ей нужно добраться до берега…
💡 Куча решений, есть над чем подумать

1️⃣
Поскольку скорость лисы в четыре раза выше скорости утки, очевидно, что утка не может просто доплыть до противоположного от лисы берега, чтобы спастись.

За время, которое утка преодолеет радиус пруда r, лиса может пробежать 4r. При этом для того, чтобы оказаться на противоположном берегу, лисе нужно пройти всего половину окружности Pi*r, что меньше 4r, ведь Pi = 3.14…

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

Утка может начать двигаться на расстоянии r/4 от центра пруда. Тогда время, за которое утка и лиса совершают полный круг движения, будет равным. После этого утке стоит уменьшить радиус круга, по которому она движется, на малую величину (допустим, дельта). Тогда лиса будет отставать.

Когда утка обгонит лису на 180 градусов, ей придется преодолеть расстояние 3r/(4 + дельта), чтобы достичь края пруда. За это время лиса должна пройти половину окружности пруда.

Лисе потребуется больше времени, чтобы достичь противоположного края пруда, чем утке. Утка сможет доплыть до берега и улететь.


2️⃣
Утка наматывает спираль держа лису всё время в диаметрально противоположной точке. Учитывая разность в линейных скоростях — наступит момент когда их угловые скорости сравняются. При этом утка будет уже довольно близко к берегу, а лиса всё ещё в диаметрально противоположной точке. Вот в этот момент утке надо рвать к берегу

3️⃣
Утка сдвигается в сторону противоположную лисе. Теперь лиса должна начать двигаться, иначе она гарантированно проиграет. Поскольку картинка симметрична, то лисе все равно в какую сторону двигаться. Предположим, что она решила двигаться против часовой стрелки. Как только лиса сдвигается, утка поворачивается, так чтобы быть всегда хвостом к лисе и тем самым двигаться от нее с максимальной скоростью. Лиса продолжает движение по окружности, Утка все время поворачивается от нее. В итоге — Лиса проходит дугу окружности, Утка движется по спирали из центра к окружности.

Ключевой вопрос, на который надо ответить — действительно ли длина дуги Лисы более чем в 4 раза превышает длину спирали Утки.

Лиса движется с постоянной максимальной скоростью вокруг озера.

Длина дуги = 4ut, где u — скорость Утки, t — прошедшее время

Угол в радианах, на который она сместилась = lambda=4ut/pi

Получается треугольник со сторонами r (радиус пруда), ut (смещение утки) и углом pi-lambda.

Угол alpha (между вертикальной линией и направлением от Утки к Лисе) = arcsos[(ut+rcos lambda) / sqrt (r^2 + u^2t^2+2utcos lambda)]

Отсюда можно подсчитать радиальную скорость Утки по направлению к краю пруда

ur=(ut+r cos (4t/pi)) / sqrt (r^2+u^2t^2 + 2t cos (4t/pi))

Понятно, что радиально Утка должна проплыть расстояние r, таким образом интеграл по t от ur = r.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
⬇️ Скачать файл при помощи requests в Python


➡️ Установка модуля requests

Первым шагом является установка модуля requests, если он еще не установлен. Он является одним из основных модулей Python, которые используются для отправки HTTP-запросов. Вы можете установить его, используя pip: pip install requests.

➡️ Скачивание файла

Скачивание файла с помощью requests довольно прямолинейно. Вам просто нужно сделать запрос к URL-адресу файла, который вы хотите скачать, а затем записать ответ в файл. Вот пример кода, который скачивает изображение с интернета:

import requests
url = '<https://example.com/image.jpg>'
response = requests.get(url)
with open('image.jpg', 'wb') as f:
f.write(response.content)


➡️ Работа с ошибками

Важно обрабатывать возможные ошибки при скачивании файла. Если файл не найден или произошла другая ошибка, requests вернет код ответа, отличный от 200. В этом случае вы должны проверять статус ответа перед записью файла.

Вот пример кода, который скачивает реальный pdf файл с сайта:
import requests

headers = {'referer': 'https://nottka.com/4364-yoshinao-nakada-etude-allegro.html'}
response = requests.get('https://nottka.com/index.php?do=download&id=4420', headers=headers)
with open('4420.pdf', 'wb') as file:
file.write(response.content)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Что выдаст код выше?
Anonymous Quiz
26%
True
47%
False
6%
None
16%
Error
6%
Не знаю
👍5
🤟 Счетчик выходных на Python


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

➡️ Использование модуля datetime

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

➡️ Создание функции подсчета выходных

Создадим функцию, которая принимает на вход две даты и возвращает количество выходных дней между ними. В Python выходные дни - это суббота и воскресенье, которым соответствуют числа 5 и 6 в методе weekday(). Ниже представлен код функции:

import datetime

def count_weekends(start_date, end_date):
total_days = (end_date - start_date).days
weekend_days = 0

for day in range(total_days):
temp_date = start_date + datetime.timedelta(days=day)
if temp_date.weekday() >= 5:
weekend_days += 1

return weekend_days


➡️ Применение функции на практике

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

start_date = datetime.date(2022, 1, 1)
end_date = datetime.date(2023, 1, 1)

print(count_weekends(start_date, end_date))
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🔄 Создание автообновления страницы в браузере с помощью Python


➡️ Использование библиотеки Selenium

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

Пример кода:

from selenium import webdriver

driver = webdriver.Firefox() # или любой другой браузер
driver.get('<http://www.example.com>')


➡️ Использование метода refresh

Второй шаг - это использование метода refresh в Selenium. Этот метод позволяет обновить текущую страницу. В комбинации с библиотекой time в Python, мы можем настроить скрипт так, чтобы он автоматически обновлял страницу через определенные интервалы времени.

Пример кода:

import time

while True:
driver.refresh() # обновляем страницу
time.sleep(10) # ждем 10 секунд
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Python Hub - сборище Питонистов
Что выведет код выше?
💻 Разбор 💻

тут много разных фишек используется, разберем по порядку:

1 строка: тут используется распаковка значений. Про это был пост:
https://t.me/pythonhub001/859
в переменную а попадет первый символ, в b - второй, а в с все остальные
В результате будет a = '1', b = '2', c = ('3', '0', '0')

2 строка: Тут используется оператор match-case. Пост по нему тоже был:
https://t.me/pythonhub001/751
в матч мы передаем содержимое переменных а, b и все елементы (!) из c. (
https://t.me/pythonhub001/166)

3 строка: тут вся перлесть конструкции match-case: первый аргумент - это переменная '_', то есть мы получаем первый аргумент без проверки. Потом мы проверяем второй аргумент чтобы был равен 2. А третий - чтобы был равен "300". Данный кейс не выполнится по ряду причин:
1. вторая проверка на 2 не пройдет - в переменной у нас строка с символом "2", а не число (int).
2. следующая проверка тоже не пройдет, логично что там не будет "300"
3. Кол-во передаваемых аргументов не совпадает с кол-во проверок.

5 строка: тут все проще - мы ничего не проверяем, а просто получаем все аргументы в переменную default. Именно этот кейс и сработает.

6 строка: Вывод переменной default.


Вывод: ('1', '2', '3', '0', '0')
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Использование библиотеки Pyppeteer в Python


Pyppeteer - это библиотека Python для автоматизации браузера Chromium с помощью Puppeteer JavaScript API. Это мощный инструмент для веб-скрейпинга, тестирования и автоматизации веб-браузера.

➡️ Инсталляция библиотеки Pyppeteer

Установка Pyppeteer проста и прямолинейна. Все, что вам нужно, это Python 3.6 или выше. Установите Pyppeteer, используя pip: pip install pyppeteer. В процессе установки Pyppeteer скачает последнюю версию Chromium.

➡️ Функциональные возможности Pyppeteer

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

➡️ Примеры использования Pyppeteer

Одним из самых распространенных применений Pyppeteer является создание снимков веб-страниц. Все, что вам нужно сделать, это создать экземпляр браузера, открыть новую страницу, перейти на URL и сделать снимок.

import asyncio
from pyppeteer import launch

async def take_screenshot(url, save_path):
browser = await launch()
page = await browser.newPage()
await page.goto(url)
await page.screenshot({'path': save_path})
await browser.close()

url = '<https://www.example.com>'
save_path = 'example.png'
asyncio.get_event_loop().run_until_complete(take_screenshot(url, save_path))


Pyppeteer также может быть использован для автоматического тестирования веб-приложений, включая взаимодействие с JavaScript и AJAX.

import asyncio
from pyppeteer import launch

async def test_website(url):
browser = await launch()
page = await browser.newPage()
await page.goto(url)
await page.click('#myButton')
await page.waitForSelector('#myResult')
result = await page.evaluate('document.querySelector("#myResult").innerText')
await browser.close()
return result

url = '<https://www.example.com>'
asyncio.get_event_loop().run_until_complete(test_website(url))

Ссылка на либу
https://pypi.org/project/pyppeteer/
https://pypi.org/project/pyppeteer/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Python Hub - сборище Питонистов
Photo
Разбор 👨‍💻

В принте сначала выводим b — 3, а потом через запятую выводим *a.
* рядом с итерируемым объектом как бы распаковывает его в выводе. Поэтому список [1, 2] превратится просто в 1 2.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
😊 Понимание оператора звездочка (*) в выводе итерируемых объектов в Python

➡️ Основы оператора звездочка

Оператор звездочка (*) в Python часто используется для умножения или повторения чисел и строк соответственно. Однако у него есть уникальная функциональность, когда речь идет об итерируемых объектах.

numbers = [1, 2, 3]
print(*numbers) # Вывод: 1 2 3


💫Настоящая магия оператора звездочка проявляется с итерируемыми объектами. Итерируемые объекты в Python включают списки, кортежи, словари, множества и строки. Когда оператор звездочка используется с этими объектами в функции print, он расширяет или распаковывает итерируемый объект. Например, если у нас есть список [1,2,3] и мы используем print(*[1,2,3]), он выведет 1 2 3, а не [1, 2, 3]. Элементы выводятся распакованными, а не в виде единого списка.

words = ["Hello", "World"]
print(*words) # Вывод: Hello World
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
👍 Упрости конструкцию

x = int(input ('Введите число:'))
if x :
pass
else:
print('Число равно нулю')


Нужно упростить конструкцию if в python

Ответы пищите в комменты! 💬
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
⌨️ Использование Keyboard.add_hotkey в Python


➡️ Понимание Keyboard.add_hotkey

Функция keyboard.add_hotkey() в Python позволяет вам назначить определенную функцию на клавиатурный ярлык, известный как горячая клавиша. Эта функция принимает два основных аргумента: комбинацию клавиш и функцию, которая будет выполнена при нажатии горячей клавиши. Синтаксис следующий: keyboard.add_hotkey(hotkey, callback, args=(), suppress=False, timeout=3, trigger_on_release=False). Горячей клавишей может быть одна клавиша, комбинация клавиш или даже последовательность клавиш.

## Примеры использования Keyboard.add_hotkey

Функция keyboard.add_hotkey() очень удобна для автоматизации задач и увеличения интерактивности ваших скриптов на Python. Например, вы можете использовать ее, чтобы создать простой кейлоггер, автоматизировать создание скриншотов или даже создать пользовательский ярлык для определенной задачи в вашем приложении на Python. Однако очень важно использовать эту функцию ответственно и этично, учитывая ее возможное злоупотребление.

➡️ Практические примеры использования Keyboard.add_hotkey

Для иллюстрации рассмотрим пример, в котором мы хотим напечатать "Привет, Мир!" при нажатии клавиш 'Ctrl + H'. Сначала нам нужно импортировать модуль keyboard. Если он не установлен, используйте pip для его установки. Затем мы определяем нашу функцию и добавляем горячую клавишу следующим образом:

import keyboard

def hello_world():
print("Привет, Мир!")

keyboard.add_hotkey('ctrl + h', hello_world)
keyboard.wait()


В приведенном выше коде, каждый раз при нажатии 'Ctrl + H', вызывается функция hello_world, и "Привет, Мир!" выводится на консоль.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
🆕 Новый видос, где будет изложена вся суть про пайтон, и показаны приемы и фишки, о которых вы не слышали ранее!

Советую посмотреть!


YouTube
Python in 100 Seconds

Python is arguably the world's most popular programming language. It is easy to learn, yet suitable in professional software like web applications, data science, and server-side scripts.


https://www.youtube.com/watch?v=2JCZRG1ZuQs
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3👍1🤔1