Ответы пользователя по тегу Python
  • Где найти задачи по питону?

    danila763
    @danila763
    Учу python, sql
    https://stepik.org/course/67
    Вообще это курс по питону, но можно не смотреть а просто решать задачи, там и деление по разделам, и автопроверка правильности решения
    Ответ написан
    Комментировать
  • Всех приветствую. Я не могу запустить бота для телеграмма в cmd(делаю бота на Python).) Выдаёт ошибку, что делать?

    danila763
    @danila763
    Учу python, sql
    у вас ошибка aiogram.utils.exceptions.ValidationError: Token is invalid! - не правильный токен
    проверьте полностью ли вы скопировали токен
    Ответ написан
    2 комментария
  • Как заставить кнопку tkinter оставаться нажатой, пока другая не будет нажата?

    danila763
    @danila763
    Учу python, sql
    у вас кнопки привязаны к функциям main и bye, начните эти функции так:
    def main():
        but1['relief'] = 'sunken'
        but2['relief'] = 'raised'
    
    def bye():
        but1['relief'] = 'raised'
        but2['relief'] = 'sunken'
    Ответ написан
    Комментировать
  • Как создать систему модов для игры на Python?

    danila763
    @danila763
    Учу python, sql
    Ну если игра на питоне, то функции надо импортировать как
    from mod_file import *
    И чтобы человек выбирал из какого файла импортировать
    Так же импортируются переменные
    Ответ написан
  • Почему не работает телеграмм бот?

    danila763
    @danila763
    Учу python, sql
    Вы не правильно указали декаратор
    Надо @bot.message_handler()
    А не @bot.message.haner()
    Не точка, а нижнее подчеркивание
    Ответ написан
    3 комментария
  • Проблемы с питоном. Что делать?

    danila763
    @danila763
    Учу python, sql
    У вас не прописан питон в системную переменную path, при установке вы должны отметить галочкой пункт add to path, если вы это не сделали, переустановил питон, отметив этот пункт
    Ответ написан
    1 комментарий
  • Как сделать ограниченное количество выполнения цикла?

    danila763
    @danila763
    Учу python, sql
    Почитай про основы питона!

    for i in range(3):
    print(i)

    Цикл while проверяет условие на истинность, а любое число кроме 0 считается верным, while 3: это бесконечный цикл
    Ответ написан
    Комментировать
  • Как считать ID для статей?

    danila763
    @danila763
    Учу python, sql
    Тут проблема в том, что когда вы запускаете скрипт повторно, он создаёт у старых новостей id по их дате и проверяет по нему есть ли новость в словаре. Конечно можно каждый раз при запуске скрипта продолжать id по порядку (как вы и хотите), но тогда как проверить, есть ли новость уже в словаре?

    Мой вариант вашего кода, упрощенный

    import requests
    from bs4 import BeautifulSoup
    import json
    
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
    }
    
    def get_news_info(card):
        """
        Функция для получения информации об одной новости
        """
    
        # Получаем заголовки новости
        article_title = card.find("a").text.strip()
    
        # Получаем описание новости
        article_desc = card.find("p").text.strip()
    
        # Получаем url новости
        article_url = f'https://www.irk.ru{card.find("a").get("href")}'
    
        # Получаем время новости
        article_date_time = card.find("time").get("datetime")
    
        id = article_date_time.replace(' ', '').replace('-', '').replace(':', '')
    
        news = {
                "article_date_timestamp": article_date_time,
                "article_title": article_title,
                "article_url": article_url,
                "article_desc": article_desc
            }
    
        return (id, news)
    
    
    def get_site_news(file_news_dict, articles_cards):
        """
        Функция для добавления новых новостей в словарь,
        возвращает словари со всеми новостями и с новыми новостями
        """
    
        new_news_dict = dict()
    
        for article in articles_cards:
    
            id, news = get_news_info(article)
    
            if id not in file_news_dict.keys():
    
                file_news_dict[id] = news
    
                new_news_dict[id] = news
    
        return (file_news_dict, new_news_dict)
    
    
    
    def main():
        url = "https://www.irk.ru/news/"
        r = requests.get(url=url, headers=headers)
        soup = BeautifulSoup(r.text, "lxml")
        articles_cards = soup.find_all("li", class_="b-news-article-list-item")
    
        # Открываем файл с новостями
        with open("src/test_dict.json", "r+") as news_file:
    
            # Получаем словарь новостей из файла
            try:
                file_news_dict = json.load(news_file)
            except:
                # Если в файле не словарь, создаем пустой словарь
                file_news_dict = dict()
    
            # Обновляем новости
            file_news_dict, new_news_dict = get_site_news(file_news_dict, articles_cards)
    
            # Сохраняем новости
            json.dump(file_news_dict, news_file, indent=4, ensure_ascii=False)
    
            print(new_news_dict)
    
    
    if __name__ == '__main__':
        main()

    Ответ написан
    Комментировать
  • Как сделать чс пользователей, которые не смогут использовать команду discord py?

    danila763
    @danila763
    Учу python, sql
    Я не знаю точно как это работает именно в Discord, но в телеграмме например можно проверять id пользователя от которого пришло сообщение через if id in black_list и отвечать всем пользователям из чс что-то свое
    Ответ написан
    Комментировать
  • Есть ли отличия в асинхронном и многопоточном коде в контексте Python?

    danila763
    @danila763
    Учу python, sql
    Поржал над комментариямя (без обид), хотя в принципе первый прав, в общем - как мы помним, у современных процессоров несколько ядер, плюс каждое ядро может выполнять несколько задач сразу и вот многопоточность - это когда несколько частей кода выполняются независимо, например два у вас работает программа, можно нажимать кнопки, она будет реагировать, но в отдельном потоке у неё будет идти цикл, который будет что-то считать.

    Асинхронность тоже позволяет выполнять два цикла, но суть её в том, что куски циклов выполняются по очереди, в одном потоке - первый цикл на половину, потом второй на половину, опять первый - с середины до конца, опять второй, тоже с середины до конца, и так по порядку.

    Но если использовать sleep() в Асинхронность, прервется выполнение всей программы, а в многопоточность прервется только тот поток где вызван sleep()

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

    Вообще-то что использовать, зависит от задачи, но асинхронность все таки проще несмотря на некоторые минусы, и занимает меньше ресурсов компьютера, плюс некоторые известные библиотеки, например aiogram, используют именно асинхронность, так что стоит с ней разбираться (хотя и многопоточность тоже полезна)
    Ответ написан
    4 комментария
  • Выдает ошибку Tkinter: AttributeError?

    danila763
    @danila763
    Учу python, sql
    Не существует переменной coldenet (в функции chet)
    Ответ написан
  • Не запускается бот. как запустить?

    danila763
    @danila763
    Учу python, sql
    Замените client.send_message на bot.send_message и проверьте токен, у меня работает
    мой бот @danila763_bot, на нем сейчас ваш код, подержу минут 15 запущенным, проверьте

    Ваш код, но рабочий

    import telebot
    # import configure
    from telebot import types
    
    bot = telebot.TeleBot(token)
    
    @bot.message_handler(commands=['get_info', 'info'])
    def get_user_id(message):
        markup_inline = types.InlineKeyboardMarkup()
        but_yes = types.InlineKeyboardButton(text='Да', callback_data='yes')
        but_no = types.InlineKeyboardButton(text='Нет', callback_data='no')
    
        markup_inline.add(but_yes, but_no)
        bot.send_message(message.chat.id, 'Желаете узнать небольшую информацию о вас', reply_markup=markup_inline)
    
    @bot.callback_query_handler(func = lambda call: True)
    def answer(call):
        if call.data == 'yes':
            markup_reply = types.ReplyKeyboardMarkup(resize_keyboard=True)
            but_ID = types.KeyboardButton('МОЙ ID')
            but_username = types.KeyboardButton('МОЙ НИК')
    
            markup_reply.add(but_ID, but_username)
            bot.send_message(call.message.chat.id, 'Нажмите на одну из кнопок', reply_markup=markup_reply)
        elif call.data == 'no':
            pass
    
    @bot.message_handler(content_types=['text'])
    def get_text(message):
        if message.text.lower() == 'привет':
            bot.send_message(message.chat.id, 'Привет, неизвестный юзер!')
        elif message.text.lower() == 'как дела?':
            bot.send_message(message.chat.id, 'Все хорошо, как у тебя?')
    
    
    @bot.message_handler(content_types=['text'])
    def get_text(message):
        if message.text() == 'МОЙ ID':
            bot.send_message(message.chat.id, f'Your ID: {message.from_user.id}')
        elif message.text() == 'МОЙ НИК':
            bot.send_message(message.chat.id, f'Your ID: {message.from_user.first_name}, {message.from_user.last_name}')
    
    bot.polling()

    Ответ написан
  • Как обработать нажатие кнопки во время работы цикла?

    danila763
    @danila763
    Учу python, sql
    Писать асинхронный код
    Ответ написан
    Комментировать
  • Последовательный запуск команд в cmd python?

    danila763
    @danila763
    Учу python, sql
    может надо начать с
    cmd /k
    тогда после команд терминал не закроется
    Ответ написан
  • Pyinstaller как собрать в один файл, без консоли?

    danila763
    @danila763
    Учу python, sql
    Просто свой файл main.py переименуйте в main.pyw (не обязательно main, главный исполняемый файл)
    Ответ написан
    4 комментария
  • Как зациклить проверку времени?

    danila763
    @danila763
    Учу python, sql
    у вас код выполняется последовательно, и если вы делаете цикл, пока он не закончится код после него не выполнится. Скорее всего надо смотреть в сторону асинхронности или многопоточности.
    Скиньте код, может смогу помочь
    Ответ написан
    Комментировать
  • Не выводятся сообщения в боте телеграм?

    danila763
    @danila763
    Учу python, sql
    У вас стоит только обработка команды rate.
    в обработке вы отправляете запрос, какую валюту использовать, но не обрабатываете ответ.
    Вы должны создать отдельный обработчик, который ловит весь текст

    примерно так:
    @my_bot.message_handler(text='bitcoin')
    Точно не знаю, я с aiogram сейчас разбираюсь а не с telebot
    Ответ написан
    Комментировать
  • Как внести в базу данных ответ inline-клавиатуры?

    danila763
    @danila763
    Учу python, sql
    Сразу скажу что с aiogram познакомился буквально вчера, так что не судите строго

    Вообщем, думаю надо создать хендлер для кнопки:
    @dp.callback_query_handler(text="Normal")  # text сопоставляется с callback_data
    async def send_random_value(call: types.CallbackQuery):
        
        # Тут ваш код добавляющий Normal в бд
    
        await call.answer()  # Нужно чтобы на кнопке не было иконки часов
        await call.message.delete_reply_markup()  # Убирает клавиатуру


    ну и так для всех 3-х кнопок
    Ответ написан
    Комментировать
  • Как зайти в аккаунт на сайте через requests?

    danila763
    @danila763
    Учу python, sql
    О, как раз недавно этим занимался.
    Рассмотрим код формы на сайте dobro.ru (который вы используете)
    Вот он:

    <form action="https://dobro.ru/login?d=1" method="post">
            <input type="hidden" name="_csrf_token" value="avtoskx3IEw4OpCPeHN5g94SceriuwMB4AgyeLLR9h8"/>
            <div class="row mb-3 mb-md-4">
                <div class="col-12">
                    <div class="form__group">
                        <input type="email" value="" name="email"
                               placeholder=" " required class="form__input form__input_text"/>
                        <span class="form__input_label">Электронная почта</span>
                    </div>
                </div>
            </div>
            <div class="row mb-3">
                <div class="col-12">
                    <div class="form__group">
                        <input type="password" name="password"
                               placeholder=" " required class="form__input form__input_text"/>
                        <span class="form__input_label">Пароль</span>
                    </div>
                </div>
            </div>
            <div class="row mb-3 mb-md-5">
                <div class="col-6 text-left">
                    <div class="custom-control custom-checkbox">
                        <input type="checkbox" name="_remember_me" id="_remember_me"
                               class="form__input_checkbox custom-control-input"/>
                        <label class="custom-control-label required"
                               for="_remember_me">
                            Запомнить меня
                        </label>
                    </div>
                </div>
                <div class="col-6 text-right">
                    <a href="/password/reset/request">Забыли пароль?</a>
                </div>
            </div>
                    <div class="row mb-3">
                <div class="col-12">
                    <button type="submit" class="button button--pink button--height-48 js-login-form-submit"
                            style="border-radius: 4px;">Войти
                    </button>
                </div>
            </div>
            <div class="row mb-4 mb-md-5">
                <div class="col-12 text-center">
                    <p class="d-inline-block ml-4">Нет аккаунта?&nbsp;</p>
                    <a
                            href="/register"
                            onclick="ym(58966471,'reachGoal','clickregister')"                >Зарегистрируйтесь</a>
                </div>
            </div>
                </form>



    все строки вида
    <input type="password" name="password"

    Это то, что надо передать сайту для входа

    Вы не передаете 2 вещи - checkbox и token
    и если у checkbox вы знаете значение по умолчанию, то токен каждый раз будет меняться и вам надо каждый раз парсить его перед входом. В свое время я писал функцию для получения data
    def get_data(html, link):
        """
        Поиск формы с указанной ссылкой post
        """
        # Если html просто текст, превращаем его в объект BeautifulSoup
        if str(type(html)) != "<class 'bs4.BeautifulSoup'>":
            html = bs(html, 'lxml')
        # Собираем и возвращаем словарь
        return dict((i.get('name'), i.get('value')) for i in html.find('form', action=link).find_all('input'))

    Как использовать:
    html = r.get("https://dobro.ru/login?d=1", headers=headers)
    data = get_data(html. "https://dobro.ru/login?d=1")
    # Второй параметр это ссылка указанная тут: <form action="https://dobro.ru/login?d=1" method="post">
    data['login'] = login
    data['password'] = password
    # Ваши логин и пароль
    r = s.post('https://dobro.ru/login?d=1', data = data, headers = {'User-Agent' : ua})


    Естественно я показал не весь код, а ту часть где получаем data
    Если у вас что - то не получится, напишите - помогу
    Ответ написан
    5 комментариев
  • Как узнать из скольки цифр состоит число (без перевода в строку )?

    danila763
    @danila763
    Учу python, sql
    с ходу в голову приходит только:
    num = 456
    counter = 0
    while num > 0:
    num //= 10
    counter += 1
    print(counter)
    Ответ написан