Что выведет код с изображения ниже? №25
Anonymous Quiz
15%
[1, 3, 1, 0, 4, 2, 2, 4, 1, 3, 1, 0]
0%
[1, 3, 1, 0, 4, 2, 2, 4, 1, 3, 1, 0, 1, 0, 1, 0]
10%
[1, 3, 1.0, 0.3, 4, 2, 2.0, 4.0, 1, 3, 1.0, 0.3]
10%
[1, 3, 1.0, 0.3, 4, 2, 2.0, 4.0, 1, 3, 1.0, 0.3, 1.0, 0.3, 1.0, 3.3 ]
25%
ZeroDivisionError
40%
Нет правильного ответа
🔥3👍1
Вчера мы опубликовали весьма хитрую задачу. Правильно ответили 33%, но удивительно не это, а то, что ожидаемый нами вариант "верного ответа" никто не выбрал...
Код задачи:
Разбор задачи
Вы, наверное, задаётесь вопросом, почему верный ответ заключался в том, что правильного варианта не было в списке? Всё дело в устройстве задачи и в том, как работают списки в цикле
У нас уже были подобные задачи: №6 и №9, но они немного другие.
Создаём функцию
Внутри функции проходимся циклом
После цикла возвращаем список.
После описания функции вызываем
Правильный ответ
И кто-то из вас наверняка спросит: "Но как же так? Я посчитал, всё сопоставил, и верный ответ -
Дело в том, что правильного ответа нет в списке, потому что вывода не будет. Программа запустится, начнёт работу, но никогда не дойдёт до вывода результата.
Главный подвох
Главный подвох заключается в том, что при первом вызове
Когда в первый раз вызывается
- Сначала список
- На первой итерации цикла
- На второй итерации,
Так как новые элементы постоянно добавляются в список, цикл
Итог
Всё остальное в задаче служит для отвлечения внимания. Вот такая вот хитрая задача была вчера.
Код задачи:
def my_func(num, lst=[1, 3]):
for i in lst:
lst.append(round(num / i, 1))
return lst
print(my_func(1) + my_func(8, [4, 2]) + my_func(1))
Разбор задачи
Вы, наверное, задаётесь вопросом, почему верный ответ заключался в том, что правильного варианта не было в списке? Всё дело в устройстве задачи и в том, как работают списки в цикле
for в Python.У нас уже были подобные задачи: №6 и №9, но они немного другие.
Создаём функцию
my_func, принимающую два аргумента: num и lst. Для аргумента lst устанавливаем значение по умолчанию [1, 3].Внутри функции проходимся циклом
for по списку lst. В теле цикла добавляем в список новый элемент - округлённый функцией round() до одного символа после запятой результат деления числа num на текущее число i из списка.После цикла возвращаем список.
После описания функции вызываем
print(), в котором складываем три списка, полученных в результате вызова функции my_func с разными аргументами.Правильный ответ
И кто-то из вас наверняка спросит: "Но как же так? Я посчитал, всё сопоставил, и верный ответ -
[1, 3, 1.0, 0.3, 4, 2, 2.0, 4.0, 1, 3, 1.0, 0.3, 1.0, 0.3, 1.0, 3.3]!"Дело в том, что правильного ответа нет в списке, потому что вывода не будет. Программа запустится, начнёт работу, но никогда не дойдёт до вывода результата.
Главный подвох
Главный подвох заключается в том, что при первом вызове
my_func(1) запускается цикл с дефолтным значением lst=[1, 3]. Особенность цикла for заключается в том, что итерация идёт по списку "от начала и до конца", пока есть элементы - цикл будет продолжаться. А так как мы каждый раз добавляем в конец списка новый элемент, цикл будет длиться, пока не переполнится память или выполнение кода не будет остановлено.Когда в первый раз вызывается
my_func(1), происходит следующее:- Сначала список
lst содержит [1, 3].- На первой итерации цикла
for, i равно 1, и в конец списка добавляется round(1 / 1, 1) или 1.0. Теперь список lst равен [1, 3, 1.0].- На второй итерации,
i равно 3, и добавляется round(1 / 3, 1) или 0.3. Теперь список равен [1, 3, 1.0, 0.3].Так как новые элементы постоянно добавляются в список, цикл
for никогда не завершится. Это приводит к бесконечному циклу.Итог
Всё остальное в задаче служит для отвлечения внимания. Вот такая вот хитрая задача была вчера.
🔥3👍1👎1🤔1🤯1😱1
Tips & Tricks. №1
Полезные горячие клавиши в PyCharm.
Горячие клавиши в PyCharm значительно ускоряют процесс разработки, делая его более эффективным и приятным. Вот подборка полезных горячих клавиш, которые пригодятся при повседневной работе:
-
-
-
-
-
Указанные горячие клавиши позволяют управлять процессом разработки и ускоряют взаимодействие с кодом.
P.S. Данные горячие клавиши также работают и в других продуктах JetBrains, например, в Intellij Idea, Android Studio или WebStorm.
Полезные горячие клавиши в PyCharm.
Горячие клавиши в PyCharm значительно ускоряют процесс разработки, делая его более эффективным и приятным. Вот подборка полезных горячих клавиш, которые пригодятся при повседневной работе:
-
CTRL + D - Создаёт дубликат строки на которой находится курсор или нескольких выделенных строк. Пригодится при создании однотипных команд с разными данными.-
SHIFT + SHIFT - Двойное нажатие клавиши SHIFT вызывает диалоговое окно быстрого поиска по содержимому в файлах проекта. Полезно, когда надо найти кусочек кода в проекте, но не помнишь, в каком файле он находится.-
CTRL + SPACE - Подсветка доступных методов и функций, автодоплнение названия и другие действия с объектом (функцией, переменной, классом).-
ALT + ENTER - Вызов контекстного меню, например, для быстрого импорта или других действий, указываемых в желтой лампочке. Полезно при написании без использования курсора мыши. Повышает скорость печати и действий.-
SHIFT + F10 - Запуск текущего открытого .py-файла или указанной конфигурации.Указанные горячие клавиши позволяют управлять процессом разработки и ускоряют взаимодействие с кодом.
P.S. Данные горячие клавиши также работают и в других продуктах JetBrains, например, в Intellij Idea, Android Studio или WebStorm.
🔥6❤1👍1
Найдите ошибку в коде ниже и исчерпывающим образом объясните ее в комментариях.
#python #код_на_салфетке #найди_ошибку
#python #код_на_салфетке #найди_ошибку
🤔1
Вторая задача получилась совсем коротенькой, но интересной. В задаче была не одна, а целых две ошибки.
Код задачи:
Первая ошибка.
Самая очевидная и бросающаяся в глаза – пробел между
Объяснения тут, пожалуй, излишни. Python хоть и славится своим простым синтаксисом, но это не значит, что его стоит нарушать. Лишние отступы, разделители – всё это ему не понравится, и он будет ругаться в терминале трейсбэками.
Вторая ошибка.
Вторая ошибка куда серьезнее и не такая очевидная. Её нашёл Elshad, не без помощи GPT🤫.
Находится она в определении
Однако в случае с
Как это обойти?
Самый простой способ – воспользоваться методом
P.S. В разборе намеренно допущена одна ошибка, которая вовсе и не ошибка... Найдёте её?)
#python #код_на_салфетке #найди_ошибку #разбор_ошибки
Код задачи:
text = "идёт", "по", "плану"
print (f"Всё {*text}")
Первая ошибка.
Самая очевидная и бросающаяся в глаза – пробел между
print и (). Указал на ошибку в комментариях - Александр Бабичев. Объяснения тут, пожалуй, излишни. Python хоть и славится своим простым синтаксисом, но это не значит, что его стоит нарушать. Лишние отступы, разделители – всё это ему не понравится, и он будет ругаться в терминале трейсбэками.
Вторая ошибка.
Вторая ошибка куда серьезнее и не такая очевидная. Её нашёл Elshad, не без помощи GPT🤫.
Находится она в определении
f-строки: f"Всё {*text}". Дело в том, что в переменную text записана коллекция, а точнее – кортеж. Кортежи, списки и прочие коллекции можно "распаковывать", получая элементы оттуда, например:lst = [1, 'a', '23']
print(*lst)
>>>1 a 23
Однако в случае с
f-строками такое не пройдёт. Там попросту запрещены любые "звёздные выражения" (starred expression). f-строки предназначены для встроенной интерполяции. Внутрь {} можно передать только один аргумент, который будет преобразован к строке, в то время как *-выражения, или попросту распаковка списка, возвращает каждый элемент списка как отдельный аргумент. Как это обойти?
Самый простой способ – воспользоваться методом
.join у объекта строки. Метод получает в качестве аргумента объект коллекции, затем проходит по нему циклом и возвращает сконкатенированную строку. В ней разделителем будет объект строки, у которого и вызывался метод. Например:text = "идёт", "по", "плану"
print(f"Всё {" ".join(text)}")
P.S. В разборе намеренно допущена одна ошибка, которая вовсе и не ошибка... Найдёте её?)
#python #код_на_салфетке #найди_ошибку #разбор_ошибки
👍4🤔1
Telegram
Бот на салфетке
Бот-помощник для Telegram-канала "Код на салфетке"
Канал: https://t.iss.one/press_any_button
Вопросы и предложения @proDreams
Канал: https://t.iss.one/press_any_button
Вопросы и предложения @proDreams
Приветствуем!
Для всех, кто давно хотел нас поддержать, но стеснялся или не знал, как, сегодня прекрасные новости! Сделать пожертвование теперь можно через нашего бота, используя новый способ оплаты Telegram Stars. А завтра расскажем, как мы осуществили это технически.
Ссылка на бота: https://t.iss.one/press_any_button_bot?start=donate
Открыть меню поддержки можно вызвав команду:
Для всех, кто давно хотел нас поддержать, но стеснялся или не знал, как, сегодня прекрасные новости! Сделать пожертвование теперь можно через нашего бота, используя новый способ оплаты Telegram Stars. А завтра расскажем, как мы осуществили это технически.
Ссылка на бота: https://t.iss.one/press_any_button_bot?start=donate
Открыть меню поддержки можно вызвав команду:
/donate🔥5❤2
AIOgram3 18. Подключаем оплату Telegram Stars
Автор: Иван Ашихмин
6 июня Павел Дуров сообщил, что в Telegram вводится новая валюта — Stars. Stars позволят производить покупку цифровых товаров и услуг, проще говоря, оплачивать покупки внутри Telegram, например, в ботах или в MiniApps. Однако не всё так радужно. Введение нового способа оплаты влечёт за собой отключение всех остальных платёжных средств. Если ваш бот принимал оплату через ЮКассу, то теперь только "Звёзды". Причины таких изменений оставим за скобками и сосредоточимся на более важных вещах, а именно на том, как внедрить в Telegram-бота новый способ оплаты — Telegram Stars.
Приобрести звёзды можно, открыв настройки Telegram и найдя пункт "Звёзды Telegram".
Стоит отметить.
Автор: Иван Ашихмин
6 июня Павел Дуров сообщил, что в Telegram вводится новая валюта — Stars. Stars позволят производить покупку цифровых товаров и услуг, проще говоря, оплачивать покупки внутри Telegram, например, в ботах или в MiniApps. Однако не всё так радужно. Введение нового способа оплаты влечёт за собой отключение всех остальных платёжных средств. Если ваш бот принимал оплату через ЮКассу, то теперь только "Звёзды". Причины таких изменений оставим за скобками и сосредоточимся на более важных вещах, а именно на том, как внедрить в Telegram-бота новый способ оплаты — Telegram Stars.
Приобрести звёзды можно, открыв настройки Telegram и найдя пункт "Звёзды Telegram".
Стоит отметить.
1🔥9
На момент написания не было актуальной информаций по тому, как и где использовать полученные от пользователей звёзды. Статья будет дополняться по мере обновления информации от Telegram. Если вам что-то известно, сообщите нам!
Обновление зависимостей.
Для полноценной поддержки нового способа оплаты требуется версия AIOgram 3.7.0. Для обновления библиотеки достаточно выполнить команду:
После этого обновите версию в файле
Кнопка оплаты.
Перед тем, как мы начнём писать обработчик команды, выставляющей счёт на оплату, необходимо создать кнопку для оплаты, нажатие на которую откроет окно для оплаты.
В пакете
Пропишем функцию
В теле функции создадим переменную
В него можно передать список списков с объектами класса кнопки, но это не совсем удобно, проще пользоваться методами класса. На следующей строке вызываем у объекта класса метод
-
-
Далее делаем возврат переменной
Код файла:
Создание клавиатуры не обязательно, отправлять счёт можно и без неё. Однако, она позволяет настроить текст кнопки, а также добавить дополнительные функциональные кнопки, такие, как отмена платежа, выбор другого товара и т.д.
Обработчик выставления счёта.
Приступим к написанию обработчика команды.
В пакете
В этом файле пропишем асинхронную функцию
Создадим переменную
-
-
Далее у переменной
-
-
-
-
-
-
-
Код обработчика:
Обновление зависимостей.
Для полноценной поддержки нового способа оплаты требуется версия AIOgram 3.7.0. Для обновления библиотеки достаточно выполнить команду:
pip install -U aiogram
После этого обновите версию в файле
requirements.txt.aiogram3.7.0
Кнопка оплаты.
Перед тем, как мы начнём писать обработчик команды, выставляющей счёт на оплату, необходимо создать кнопку для оплаты, нажатие на которую откроет окно для оплаты.
В пакете
botlogic создадим новый пакет keyboards, а в нём файл payment_keyboard.py.Пропишем функцию
payment_keyboard, которая ничего не принимает.В теле функции создадим переменную
builder, в которой определим экземпляр класса InlineKeyboardBuilder.В него можно передать список списков с объектами класса кнопки, но это не совсем удобно, проще пользоваться методами класса. На следующей строке вызываем у объекта класса метод
.button, добавляющий кнопку в сборщик клавиатуры. Передаём два аргумента:-
text — Определяет текст на кнопке. Если в тексте будет XTR или эмодзи звезды ⭐️, оно автоматически заменится на иконку Telegram Stars.-
pay — Определяет тип кнопки как кнопку для оплаты.Далее делаем возврат переменной
builder, применив к ней метод .as_markup, чтобы получить объект готовой к размещению в сообщении клавиатуры.Код файла:
from aiogram.utils.keyboard import InlineKeyboardBuilder
def payment_keyboard():
builder = InlineKeyboardBuilder()
builder.button(text=f"Оплатить 20 ⭐️", pay=True)
return builder.as_markup()
Создание клавиатуры не обязательно, отправлять счёт можно и без неё. Однако, она позволяет настроить текст кнопки, а также добавить дополнительные функциональные кнопки, такие, как отмена платежа, выбор другого товара и т.д.
Обработчик выставления счёта.
Приступим к написанию обработчика команды.
В пакете
handlers создадим файл payment.py.В этом файле пропишем асинхронную функцию
send_invoice_handler, принимающую message — объект класса Message.Создадим переменную
prices, в которую поместим список с объектами класса LabeledPrice, вернее, с одним объектом, так как для оплаты через Telegram Stars этот список должен состоять из одного элемента. В объект класса передаём следующие аргументы:-
label — Определение валюты. В нашем случае это XTR.-
amount — Стоимость в звёздах.Далее у переменной
message вызываем метод .answer_invoice, чтобы бот ответил на сообщение пользователя кнопкой со счётом на оплату. В метод передаём следующие аргументы:-
title — Название платежа, товара или услуги.-
description — Описание платежа, товара или услуги.-
prices — Список объектов LabeledPrice, определённый ранее в одноимённой переменной.-
provider_token — Токен платёжной системы, для Telegram Stars просто отправляем пустую строку.-
payload — Маркировка платежа. Она не отображается пользователю, а может использоваться для разделения платежей по их типам и так далее. Максимум 128 байт данных (в Python один символ занимает один байт, но стоит учитывать, что специальные символы или эмодзи могут занимать больше места).-
currency — Валюта платежа, для Telegram Stars это XTR.-
reply_markup — Объект клавиатуры.Код обработчика:
🔥6
from aiogram.types import LabeledPrice, Message
from botlogic.keyboards.payment_keyboard import payment_keyboard
async def send_invoice_handler(message: Message):
prices = [LabeledPrice(label="XTR", amount=20)]
await message.answer_invoice(
title="Поддержка канала",
description="Поддержать канал на 20 звёзд!",
prices=prices,
provider_token="",
payload="channel_support",
currency="XTR",
reply_markup=payment_keyboard(),
)
Предпродажная проверка.
Счёт выставлен, пользователь нажимает "Оплатить". Если у него не хватает звёзд, система предложит их приобрести. Если звёзд у него хватает, он произведёт оплату, и в этот момент Telegram пришлёт в бота запрос "точно ли всё хорошо?". На ответ у нас будет ровно 10 секунд. Если мы по каким-то причинам не хотим принимать оплаты у данного пользователя или логика бота настроена на отмену платежа, в таком случае необходимо дать ответ, сигнализирующий об отмене платежа, сопроводив его причиной отмены. В противном же случае, подтверждаем, что всё "Ок".
В этом же файле создадим асинхронную функцию
pre_checkout_handler, принимающую аргумент pre_checkout_query — объект класса PreCheckoutQuery.В теле функции у переменной
pre_checkout_query вызываем метод .answer, передавая в него аргумент ok со значением True.Код функции:
from aiogram.types import PreCheckoutQuery
async def pre_checkout_handler(pre_checkout_query: PreCheckoutQuery):
await pre_checkout_query.answer(ok=True)
Информирование о покупке.
Бюрократия позади, осталось только поздравить пользователя с покупкой!
В этом же файле создадим асинхронную функцию
success_payment_handler, принимающую аргумент message — объект класса Message.В объекте класса
Message хранится различная информация о текущем сообщении, а в поле successful_payment находится информация о платеже, такая, как идентификатор платежа, сумма, валюта, информация, полученная от пользователя. По-хорошему, это всё необходимо сохранить во избежание возможных вопросов по платежам в будущем.В теле функции делаем обычный ответ, сообщая, что покупка прошла успешно.
Код функции:
async def success_payment_handler(message: Message):
await message.answer(text="🥳Спасибо за вашу поддержку!🤗")
Команда paysupport и немного про возврат средств.
Telegram также предъявляет условия к возврату средств пользователям. Не за все товары и услуги подразумевается возврат средств, однако у пользователя всё равно должна быть возможность запросить возврат средств, либо быть проинформированным касательно этого.
Для информирования пользователя обязательно должна быть команда
/paysupport. В ней можно указать условия возврата, контактные данные и др. Давайте сделаем эту команду.Создадим асинхронную функцию
pay_support_handler, принимающую message — объект класса Message. В теле функции пропишем ответ на сообщение с текстом, описывающим условия для возврата средств.Код функции:
async def pay_support_handler(message: Message):
await message.answer(
text="Добровольные пожертвования не подразумевают возврат средств, "
"однако, если вы очень хотите вернуть средства - свяжитесь с нами." )
Непосредственно возврат средств можно сделать доступным пользователю. Для этого необходимо создать обработчик команды возврата, в котором, обращаясь к методу
.refund_star_payment у объекта Bot, передать в него user_id и telegram_payment_charge_id.🔥4
-
-
Регистрация обработчиков.
Всё готово, осталось зарегистрировать обработчики в
Откроем файл
-
-
-
-
Тестирование.
Запустим бота и выполним команду
Получим сообщение с информацией о платеже и кнопкой-счётом. Нажмём на кнопку.
Откроется окно с подтверждением оплаты (если у вас нет звёзд — откроется окно приобретения, как на первом скриншоте в начале поста). Нажимаем "Подтвердить и заплатить".
В чате выстрелит конфетти, и мы увидим сообщение об успешном платеже.
Заключение.
Нововведение, конечно, всех удивило и немного застало врасплох. На переход дали мало времени, и наверняка не все даже узнали об этом. Интересно будет посмотреть, к чему всё это приведёт.
Файлы к посту, можно получить в боте по коду: 236204
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#Python #AIOgram #Telegram_бот #Код_на_салфетке #Telegram_Stars #Оплата_в_Telegram
user_id — Telegram-ID пользователя, запрашивающего возврат средств.-
telegram_payment_charge_id — Идентификатор платежа, совершённого пользователем.Регистрация обработчиков.
Всё готово, осталось зарегистрировать обработчики в
main.py.Откроем файл
main.py и в функции start добавим четыре регистрации:-
send_invoice_handler — Регистрируем как обычное сообщение, указав фильтр команды donate.-
pre_checkout_handler — Регистрируем как событие pre_checkout_query.-
success_payment_handler — Регистрируем как обычное сообщение. В качестве фильтра используем так называемый "Магический фильтр F", представляющий собой объект Message. В фильтре обращаемся к полю successful_payment. Если оно не пустое (успешная оплата), будет вызван обработчик.-
pay_support_handler — Регистрируем как обычное сообщение с фильтром на команду paysupport.from aiogram import F
dp.message.register(payment.send_invoice_handler, Command(commands="donate"))
dp.pre_checkout_query.register(payment.pre_checkout_handler)
dp.message.register(payment.success_payment_handler, F.successful_payment)
dp.message.register(payment.pay_support_handler, Command(commands="paysupport"))
Тестирование.
Запустим бота и выполним команду
/donate.Получим сообщение с информацией о платеже и кнопкой-счётом. Нажмём на кнопку.
Откроется окно с подтверждением оплаты (если у вас нет звёзд — откроется окно приобретения, как на первом скриншоте в начале поста). Нажимаем "Подтвердить и заплатить".
В чате выстрелит конфетти, и мы увидим сообщение об успешном платеже.
Заключение.
Нововведение, конечно, всех удивило и немного застало врасплох. На переход дали мало времени, и наверняка не все даже узнали об этом. Интересно будет посмотреть, к чему всё это приведёт.
Файлы к посту, можно получить в боте по коду: 236204
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#Python #AIOgram #Telegram_бот #Код_на_салфетке #Telegram_Stars #Оплата_в_Telegram
🔥6
Приветствуем.
В прошлую пятницу мы опубликовали пост, в котором попросили вас задавать нам вопросы.
Было всего три вопроса: Первый в комментариях к посту, второй в нашем чате, а третий прилетел в личные сообщения.
Чтож, давайте на них ответим!
Ревью бота.
Ссылка на сообщение: https://t.iss.one/press_any_button/685?comment=95471
Начнём с того, что сразу бросилось в глаза:
-
-
-
-
- Миграции - Для управления БД удобнее использовать инструменты миграции, такие как
В целом интересный бот. Хотелось бы запустить и протестировать некоторые улучшения для него, но он не запустился😂. Отправил автору сообщения свои мысли по улучшению некоторых моментов.
Статистика.
На канале 516 подписчиков и около 100 просмотров за сутки. Что, вполне себе неплохо (а хотелось бы больше!). По сайту тоже всё хорошо, дошли уже примерно до 100-120 ежедневных уникальных посетителей. Вот наверное всё, что можно ответить по этому поводу.
Где начинать разработку?
Не совсем понятно, что значит "начинать разработку сразу на сервере". Начинать её в любом случае проще локально, так как это позволит быстрее написать основу, продумать структуру и всё отладить, запуская проект. Потом, когда придёт пора деплоя, уже можно перебираться в разработку на сервере. Сделать это можно используя VS Code или, если у вас мощный сервер PyCharm, подключаясь по SSH и ведя удалённую разработку с доступом к консоли, докеру и прочему. Однако, лично мне удобнее всё ещё работу вести локально, затем просто по SFTP подкидывать изменённые файлы и в терминале перезапускать.
В прошлую пятницу мы опубликовали пост, в котором попросили вас задавать нам вопросы.
Было всего три вопроса: Первый в комментариях к посту, второй в нашем чате, а третий прилетел в личные сообщения.
Чтож, давайте на них ответим!
Ревью бота.
Ссылка на сообщение: https://t.iss.one/press_any_button/685?comment=95471
Начнём с того, что сразу бросилось в глаза:
-
README.md - Это же лицо проекта в репозитории, а такое скудненькое. Опиши, что делает, какие технологии используются, какие планы по реализации и оформи инструкцию по запуску.-
.env - Где он? Без примера .env не понятно какие переменные нужны.-
requirements.txt - По всей видимости собран используя pip freeze? Много лишнего в нём, что так и так установится с нужными пакетами + это может привести к проблемам, условно, обновишь ты версию AIOgram, а всё остальное оставишь как прежде, айограм установится, обновит зависимости, а они потом обратно откатятся, т.к. прописаны более старые версии. При этом в нём есть не всё, что нужно для работы бота.-
load_dotenv - Вместо получения сырых данных из .env, как по мне, лучше использовать pydantic для валидации, а именно pydantic-settings, но это больше вкусовщина.- Миграции - Для управления БД удобнее использовать инструменты миграции, такие как
Alembic. Можно контролировать изменения и откатываться при необходимости.В целом интересный бот. Хотелось бы запустить и протестировать некоторые улучшения для него, но он не запустился😂. Отправил автору сообщения свои мысли по улучшению некоторых моментов.
Статистика.
Ты давно статистикой не делился. Не помню, где это было в последний раз и когда. Есть рост? Положительный ))
На канале 516 подписчиков и около 100 просмотров за сутки. Что, вполне себе неплохо (а хотелось бы больше!). По сайту тоже всё хорошо, дошли уже примерно до 100-120 ежедневных уникальных посетителей. Вот наверное всё, что можно ответить по этому поводу.
Где начинать разработку?
Лучше начать разработку на локальном компе или на реал серваке?
Не совсем понятно, что значит "начинать разработку сразу на сервере". Начинать её в любом случае проще локально, так как это позволит быстрее написать основу, продумать структуру и всё отладить, запуская проект. Потом, когда придёт пора деплоя, уже можно перебираться в разработку на сервере. Сделать это можно используя VS Code или, если у вас мощный сервер PyCharm, подключаясь по SSH и ведя удалённую разработку с доступом к консоли, докеру и прочему. Однако, лично мне удобнее всё ещё работу вести локально, затем просто по SFTP подкидывать изменённые файлы и в терминале перезапускать.
🔥3👍2
Приветствую, дорогие друзья!
Наконец-то пятница! Скажут те, у кого пятидневная рабочая неделя)). Настало время, когда мы можем позволить себе расслабиться, забыть о повседневных заботах и просто наслаждаться просмотром кино.
Фильм: Атлас
Год: 2024
События фильма разворачиваются в не столь отдалённом будущем, в котором искусственный интеллект захватил власть над людьми и развязал войну на уничтожение всего человечества. Женщина присоединяется к миссии по поимке робота-отступника, с которым её связывает загадочное прошлое. Но всё идёт не по плану, и чтобы не потерять единственный шанс спасти мир от искусственного интеллекта, Атлас должна довериться ему.
https://www.sspoisk.ru/film/4477073/
Приятного просмотра!
Наконец-то пятница! Скажут те, у кого пятидневная рабочая неделя)). Настало время, когда мы можем позволить себе расслабиться, забыть о повседневных заботах и просто наслаждаться просмотром кино.
Фильм: Атлас
Год: 2024
События фильма разворачиваются в не столь отдалённом будущем, в котором искусственный интеллект захватил власть над людьми и развязал войну на уничтожение всего человечества. Женщина присоединяется к миссии по поимке робота-отступника, с которым её связывает загадочное прошлое. Но всё идёт не по плану, и чтобы не потерять единственный шанс спасти мир от искусственного интеллекта, Атлас должна довериться ему.
https://www.sspoisk.ru/film/4477073/
Приятного просмотра!
🔥3
Приветствуем!
Мы продолжаем попытки завоевать медиа-пространство. Сперва это были три стрима (к которым хорошо бы вернуться, но пока нет идей), а теперь это короткие видео YouTube Shorts.
Посмотреть первое видео можно по ссылке: https://www.youtube.com/shorts/AcBJriDXwQo
Будем очень благодарны, если вы поставите лайк и оставите комментарий. Это позволит алгоритмам ютуба понять, что видео интересно и будет предлагать его другим зрителям.
Оставляйте ваши отзывы, мы всё прочтём и учтём в следующем видео! Так может и до больших гайдов не далеко?😉
Мы продолжаем попытки завоевать медиа-пространство. Сперва это были три стрима (к которым хорошо бы вернуться, но пока нет идей), а теперь это короткие видео YouTube Shorts.
Посмотреть первое видео можно по ссылке: https://www.youtube.com/shorts/AcBJriDXwQo
Будем очень благодарны, если вы поставите лайк и оставите комментарий. Это позволит алгоритмам ютуба понять, что видео интересно и будет предлагать его другим зрителям.
Оставляйте ваши отзывы, мы всё прочтём и учтём в следующем видео! Так может и до больших гайдов не далеко?😉
🔥5
Что выведет код с изображения? №26
Anonymous Quiz
2%
b'2011'
43%
b'10011010'
32%
b'10011'
23%
Нет верного ответа
🔥3🤔2
Вчера мы опубликовали коротенькую, но интересную задачу. Верно ответили 43% из 37-ми человек.
Код задачи:
Разбор задачи
Задача короткая и разбор будет таким же.
Создаём две переменные
Далее в функции
Думаю, на этом моменте уже стало понятно, почему правильный ответ
Про строки байт.
Байтовые строки - это последовательность необработанных байт от 0 до 255, интерполируемая Python как строка, но со специальным литералом
Такие строки позволяют оперировать различными данными, которые не предназначены для чтения человеком, например, бинарные файлы, изображения. Даже пересылаемый по интернету JSON, без обработки и сериализации - является байтовой строкой.
Превратить обычную строку в байтовую можно двумя способами:
1. Добавив перед кавычками литерал
2. Использовав метод строки
Байтовые строки, практически ничем не отличаются от обычных. Им доступны всё те же методы и функции. Такие как: доступ к элементам по индексу, конкатенация,
Понимание работы байтовых строк особенно полезно при веб-разработке, поскольку все данные пересылаемые через интернет - являются набором байт. Данные кодируются в байты, пересылаются, затем декодируются, согласно требуемому формату данных.
Код задачи:
x = b'1001'
y = b'1010'
print(x + y)
Разбор задачи
Задача короткая и разбор будет таким же.
Создаём две переменные
x и y, в которые помещаем две байтовые строки (byte string).Далее в функции
print() выводим результат конкатенации строк.Думаю, на этом моменте уже стало понятно, почему правильный ответ
b'10011010'.Про строки байт.
Байтовые строки - это последовательность необработанных байт от 0 до 255, интерполируемая Python как строка, но со специальным литералом
b"", в то время как обычные строки, это набор символов в определённой кодировке (обычно это UTF-8).Такие строки позволяют оперировать различными данными, которые не предназначены для чтения человеком, например, бинарные файлы, изображения. Даже пересылаемый по интернету JSON, без обработки и сериализации - является байтовой строкой.
Превратить обычную строку в байтовую можно двумя способами:
1. Добавив перед кавычками литерал
b - b"строка_текста".2. Использовав метод строки
.encode("кодировка") с указанием желаемой кодировки - "строка_текста".encode("utf8"). Преобразовать байтовую строку с текстом обратно можно использовав метод строки .decode("utf8").Байтовые строки, практически ничем не отличаются от обычных. Им доступны всё те же методы и функции. Такие как: доступ к элементам по индексу, конкатенация,
.split(), "".join() и другие.Понимание работы байтовых строк особенно полезно при веб-разработке, поскольку все данные пересылаемые через интернет - являются набором байт. Данные кодируются в байты, пересылаются, затем декодируются, согласно требуемому формату данных.
🔥3❤1
Приветствуем.
Сделали Shorts к задаче:
https://youtube.com/shorts/sSLH46uESzQ?feature=share
Будем благодарны за лайк и комментарий!
Сделали Shorts к задаче:
https://youtube.com/shorts/sSLH46uESzQ?feature=share
Будем благодарны за лайк и комментарий!
🔥3
Как вы боретесь с прокрастинацией?
Anonymous Poll
17%
Составляю список задач
2%
Использую таймеры
2%
Пробую различные техники мотивации
29%
Делаю перерывы и отдыхаю
50%
Борюсь?🫠
🤪3🔥2
Приветствую!
Быстро же летит время. Ровно год назад я создал этот канал и начал писать статьи про Django и AIOgram. В процессе появился сайт и чат. Я тогда и не подозревал, что вас будет больше 500 человек, а на сайте больше 100 посетителей ежедневно.
Практически сразу ко мне присоединились единомышленники. Без их помощи и поддержки всего этого бы не было. Мы, конечно, бывает, ворчим друг на друга (в основном я на всех или все на меня), но останавливаться не собираемся.
Мы постоянно учимся и не только программированию, о котором рассказываем, но и ведению канала, взаимодействию с вами, организации процессов - это всё сложно для непосвящённых вроде нас.
Благодарю команду за участие в этом авантюрном проекте. Авторов, пишущих для вас у нас. Вас - аудиторию, кто ставит реакции, пишет комментарии. Бустеров, а теперь ещё и тех, кто задонатил в боте - без вас, было бы нечем оплачивать сервер для сайта.
Передаю слово команде:
Большакова Кристина:
Год! Уже год! И правда быстро!
Данному каналу невероятно повезло! Здесь прекрасная команда администраторов, замечательные и интересные люди. Подписчики - удивительные и душевные люди!
Пусть канал продолжает расти и развиваться. А душевность остается навсегда!
С Днем Рождения, милый канал!
Лебедев Андрей:
Большое спасибо Ване и Кристине, которым этот канал обязан своим появлением. Первому - за целеустремленность и любопытство, а второй - за упорство и терпение.
То, что канал оказался востребованным, объясняется тем, что мы никак не отделяем себя от наших подписчиков: мы просто пытаемся разобраться в программировании и делимся с вами промежуточными результатами. Иногда получаем от вас замечания, дополнения и конструктивную критику. Обратная связь очень важна, потому что помогает нам становиться лучше.
Поздравляю всех нас с днём рождения канала!
Мурзыев Артур:
Не передать словами, каково это быть свидетелем того, как идея претворяется в жизнь. Как мысль материализуется упорством, бессонными ночами, трудом и потом. Видеть вживую, как общие интересы обьединяют людей со всей страны и не только.
Огромная благодарность всем подписчикам и подписчицам. Благодаря вам канал живёт, растёт и совершенствуется.
Быстро же летит время. Ровно год назад я создал этот канал и начал писать статьи про Django и AIOgram. В процессе появился сайт и чат. Я тогда и не подозревал, что вас будет больше 500 человек, а на сайте больше 100 посетителей ежедневно.
Практически сразу ко мне присоединились единомышленники. Без их помощи и поддержки всего этого бы не было. Мы, конечно, бывает, ворчим друг на друга (в основном я на всех или все на меня), но останавливаться не собираемся.
Мы постоянно учимся и не только программированию, о котором рассказываем, но и ведению канала, взаимодействию с вами, организации процессов - это всё сложно для непосвящённых вроде нас.
Благодарю команду за участие в этом авантюрном проекте. Авторов, пишущих для вас у нас. Вас - аудиторию, кто ставит реакции, пишет комментарии. Бустеров, а теперь ещё и тех, кто задонатил в боте - без вас, было бы нечем оплачивать сервер для сайта.
Передаю слово команде:
Большакова Кристина:
Год! Уже год! И правда быстро!
Данному каналу невероятно повезло! Здесь прекрасная команда администраторов, замечательные и интересные люди. Подписчики - удивительные и душевные люди!
Пусть канал продолжает расти и развиваться. А душевность остается навсегда!
С Днем Рождения, милый канал!
Лебедев Андрей:
Большое спасибо Ване и Кристине, которым этот канал обязан своим появлением. Первому - за целеустремленность и любопытство, а второй - за упорство и терпение.
То, что канал оказался востребованным, объясняется тем, что мы никак не отделяем себя от наших подписчиков: мы просто пытаемся разобраться в программировании и делимся с вами промежуточными результатами. Иногда получаем от вас замечания, дополнения и конструктивную критику. Обратная связь очень важна, потому что помогает нам становиться лучше.
Поздравляю всех нас с днём рождения канала!
Мурзыев Артур:
Не передать словами, каково это быть свидетелем того, как идея претворяется в жизнь. Как мысль материализуется упорством, бессонными ночами, трудом и потом. Видеть вживую, как общие интересы обьединяют людей со всей страны и не только.
Огромная благодарность всем подписчикам и подписчицам. Благодаря вам канал живёт, растёт и совершенствуется.
🎉18🔥3⚡2👍1
Найдите ошибку в коде ниже и исчерпывающим образом объясните ее в комментариях.
#python #код_на_салфетке #найди_ошибку
#python #код_на_салфетке #найди_ошибку
🤔4🔥1