Ответы пользователя по тегу Python
  • Как от имени бота телеграм написать в чат?

    @Alexa2007
    Чтобы писать от имени бота необходимо использовать токен бота. Более точно без кода вашего бота Вам никто не поможет
    Ответ написан
  • Как сайт может отследить/определить что используется Selenium?

    @Alexa2007
    --disable-blink-features=AutomationControlled

    options.add_argument("--disable-blink-features=AutomationControlled")
    
    driver = webdriver.Chrome(
        executable_path="chromedriver",
        options=options
    Ответ написан
    1 комментарий
  • Кто знает простое построение Алгоритм Дейкстры в Скретч?Питон?

    @Alexa2007
    Пояснение
    Код:
    import math
    
    
    def arg_min(T, S):
        amin = -1
        m = math.inf  # максимальное значение
        for i, t in enumerate(T):
            if t < m and i not in S:
                m = t
                amin = i
    
        return amin
    
    
    D = ((0, 3, 1, 3, math.inf, math.inf),
         (3, 0, 4, math.inf, math.inf, math.inf),
         (1, 4, 0, math.inf, 7, 5),
         (3, math.inf, math.inf, 0, math.inf, 2),
         (math.inf, math.inf, 7, math.inf, 0, 4),
         (math.inf, math.inf, 5, 2, 4, 0))
    
    N = len(D)  # число вершин в графе
    T = [math.inf]*N   # последняя строка таблицы
    
    v = 0       # стартовая вершина (нумерация с нуля)
    S = {v}     # просмотренные вершины
    T[v] = 0    # нулевой вес для стартовой вершины
    M = [0]*N   # оптимальные связи между вершинами
    
    while v != -1:          # цикл, пока не просмотрим все вершины
        for j, dw in enumerate(D[v]):   # перебираем все связанные вершины с вершиной v
            if j not in S:           # если вершина еще не просмотрена
                w = T[v] + dw
                if w < T[j]:
                    T[j] = w
                    M[j] = v        # связываем вершину j с вершиной v
    
        v = arg_min(T, S)            # выбираем следующий узел с наименьшим весом
        if v >= 0:                    # выбрана очередная вершина
            S.add(v)                 # добавляем новую вершину в рассмотрение
    
    #print(T, M, sep="\n")
    
    # формирование оптимального маршрута:
    start = 0
    end = 4
    P = [end]
    while end != start:
        end = M[P[-1]]
        P.append(end)
    
    print(P)
    Ответ написан
  • Как сделать таймер?

    @Alexa2007
    import telebot
    import time
    import threading
    API_TOKEN = '11111111111111111111111111111111'
    class my_bot(telebot.TeleBot):
        def loop_poop(self):
            while True:
                print(time.ctime())
                time.sleep(1)
    
        def start_action(self):
            thread = threading.Thread(target=self.loop_poop)
            thread.start()
    
    bot = my_bot(token = API_TOKEN, threaded=False)
    
    @bot.message_handler(commands=['start'])
    def wellcome(message):
        if message.chat.type == 'private':
            bot.send_message(message.chat.id,'Hello')
    bot.start_action()
    bot.polling()
    Ответ написан
    Комментировать
  • Как в python turtle tkinter создать цикл?

    @Alexa2007
    from tkinter import *
    import turtle as t
    import time
    import threading
    
    class cat():
        def __init__(self, кольор, прикраси_набор, прикраси):
            global root
            root = Tk()
            root.iconbitmap(r"C:\\cat.ico")
            root.resizable(0, 0)
            root.title("cat home")
            root.geometry("600x470")
            print(root.winfo_rooty()+(270-root.winfo_rooty()))
            w = Canvas(root, width=root.winfo_rootx()+(600-root.winfo_rootx()), \
               height=root.winfo_rooty()+(470-root.winfo_rooty()))
            w.grid()
            self.windows = w
            self.red = t.TurtleScreen(self.windows)
            світ_image = r"C:\\спрайти\\кіт\\світ2.gif"
            self.red.addshape(світ_image)
            self.світ = t.RawTurtle(self.red)
            self.світ.shape(світ_image)
            self.світ.up()
            self.color = кольор
            self.прикраси = прикраси
            self.image = (r"C:\\спрайти\\кіт\\кіт %s.gif" % кольор)
            print(self.image)
            self.id = t.RawTurtle(self.red)
            self.red.addshape(self.image)
            self.id.shape(self.image)
            self.id.up()
            self.id.speed(2)
            print(str(len(self.прикраси)+1) + str(self.прикраси))
            for r in range(0, len(self.прикраси)):
                self.прикраси[r] = t.RawTurtle(self.red)
                self.прикраси[r].speed(100)
                self.image_прикраса = (r"C:\\спрайти\\кіт\\прикраса %s.gif" % прикраси_набор[r])
                self.red.addshape(self.image_прикраса)
                self.прикраси[r].shape(self.image_прикраса)
                self.прикраси[r].up()
                if прикраси_набор[r] == "бант":
                    self.прикраси[r].left(-90)
                    self.прикраси[r].forward(10)
                    self.прикраси[r].left(90)
                    self.прикраси[r].forward(13)
                self.прикраси[r].speed(2)
            self.id.setheading(90)
            self.id.forward(-10)
            self.id.setheading(-90)
            self.прикраси[r].setheading(-90)
            self.x = 0
            self.y = 0
            self.start_action()
    
        def loop_poop(self):
            while True:
                print(time.ctime())
                time.sleep(1)
    
        def start_action(self):
            thread = threading.Thread(target=self.loop_poop)
            thread.start()
            
    
    
        def Left(self, evt):
            try:
                up = -35
                self.x -= 35
                self.світ.forward(up)
            except RecursionError:
                pass
    
        def right(self, evt):
            try:
                up = 35
                self.x += up
                self.світ.forward(up)
            except RecursionError:
                pass
    
    
        def jump(self, evt):
            up = 18
            self.y += up
            self.id.forward(0-up)
            for r in range(0, len(self.прикраси)):
                self.прикраси[r].forward(0-up)
            time.sleep(0.6)
            self.id.forward(up)
            for r in range(0, len(self.прикраси)):
                self.прикраси[r].forward(up)
            self.y -= up
    
    
    
    red = cat("рудий", ["бант"], [1])
    global root
    
    root.bind('<Right>', red.Left)
    root.bind('<Left>', red.right)
    root.bind('<Up>', red.jump)
    
    root.mainloop()
    Ответ написан
    Комментировать
  • Как оптимизировать моего телеграм-бота, написанного на Python?

    @Alexa2007
    Ну на первый взгляд можно просто раскидать минимум на три файла:
    1.py
    import telebot
    from telebot import types
    token = bottoken
    bot = telebot.TeleBot(token)
    bot.polling()


    2.py
    #Все хендлеры
    
    @bot.message_handler(commands=['start'])
    def welcome(message):


    2.py
    #Все коллбеки без elif а нормально читаемые
    
    @bot.callback_query_handler(func=lambda call: call.data == '7')
    def seven(call):
        bot.send_message(call.message.chat.id,text = 'seven')
    
    @bot.callback_query_handler(func=lambda call: call.data == '1')
    def one(call):
        bot.send_message(call.message.chat.id,text = 'one')
    Ответ написан
    3 комментария
  • Что нужно сделать чтобы процедура password_generator выводилась в самом телеграме, а не в той проге где я её запустил?

    @Alexa2007
    print(password) замени на return password

    А это тоже в телеге надо вводить?
    type_of_choice = int(input('Type: '))
    
    num = int(input("Quantity of passwords: "))
    
    length = int(input("Length of password: "))

    Если да :Пошагово задавать вопросы
    Ответ написан
  • Как забирать присланные фото?

    @Alexa2007
    Начинать думаю стоит отсюда
    Пошаговые вопросы
    Ответ написан
    Комментировать
  • Как вывести все записи из столбца на кнопки бота?

    @Alexa2007
    def buttons_create(buttons=[]):
    	keyboard = types.ReplyKeyboardMarkup(one_time_keyboard=True,resize_keyboard=True)
    	for _ in buttons:
    		keyboard.add(_)
    	return keyboard
    Ответ написан
    Комментировать
  • Как спарсить все артикулы со страницы с бесконечным скроллом на Beautifulsoup + Selenium?

    @Alexa2007
    #
    # Оооооочень удобно использовать jupyter notebook
    # 
    # Beautifulsoup я не использую
    #
    # Selenium тоже многое умеет
    # но это твой выбор
    #
    #
    
    def find_all_links():
        time.sleep(2)
        posts=[]
        links = driver.find_elements_by_tag_name('a')
        for link in links:
            post = link.get_attribute('href')
            if '/p/' in post:
                posts.append( post )
        
        return posts
    
    posts = []#Для хранения результата
    def scroll_end():#Перемотка до конца страницы
        lenOfPage = driver.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;")
        match=False
        global posts
        while(match==False):
            lastCount = lenOfPage
            time.sleep(3)
            lenOfPage = driver.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;")
            print(lenOfPage)
            if lastCount==lenOfPage:#Если доскролили до конца
                match=True
            psts = find_all_links()#Выполняю поиск того что мне надо
            posts += psts#Результат добавляю
            print(len(posts))#слежу за тем что происходит
    scroll_end()
    Ответ написан
    4 комментария
  • Как поставить на фон окна видео в tkinter?

    @Alexa2007
    Я тоже не нашёл, но как вариант поставить gif-ку:
    from tkinter import *
    import time
    import os
    root = Tk()
    
    frameCnt = 12
    frames = [PhotoImage(file='1.gif',format = 'gif -index %i' %(i)) for i in range(frameCnt)]
    
    def update(ind):
    
        frame = frames[ind]
        ind += 1
        if ind == frameCnt:
            ind = 0
        label.configure(image=frame)
        root.after(100, update, ind)
    label = Label(root)
    label.pack()
    root.after(0, update, 0)
    root.mainloop()


    Проверил, работет
    Ответ написан
  • Каким образом прикрутить и вытянуть данные из БД в боте?

    @Alexa2007
    Это ответ на вопрос
    Python+mysqlite+bot telegarm не могу добавить в базу данных. Как правильно сделать?

    Также, если не ошибаюсь edit_message_text работает с сообщениями которым не более 24 часов
    Еще не пробовал на своём магазине, но есть шанс, что если пользователь нажмет кнопку "далее" бот просто рухнет
    И еще необходимо хранить позицию каждого пользователя, где он находится, то есть:
    нажал кнопку "Куртки"
    бот в базу пишет (раздел куртки позиция 1)
    нажал кнопку "далее"
    бот читает из базы раздел, и позицию, прибавляет или вычитает 1, проверяет чтобы число не было 0 или -1 или больше чем кол-во позиций иначе он опять таки рухнет
    Короче я как-то это сделал, но из-за того что это в результате будет мусорко-переписка, думаю такая реализация магазина не зайдет

    Чтобы голова не лопнула от кучи elif
    Раздели на несколько хендлеров
    @bot.callback_query_handler(func=lambda call: call.data == '7')
    def seven(call):
        bot.send_message(call.message.chat.id,text = 'seven')
    
    @bot.callback_query_handler(func=lambda call: call.data == '1')
    def one(call):
        bot.send_message(call.message.chat.id,text = 'one')
    Ответ написан
    3 комментария
  • Как взять Список из файла?

    @Alexa2007
    import json
    
    user = {}
    for _ in range(10):
        user[str(_)] = [i for i in range(2,6)]
    
    with open('users.json','w',encoding='UTF-8') as json_file:
        json.dump(user,json_file,indent=8)
    
    with open('users.json',encoding='UTF-8') as json_file:
        jsob = json.load(json_file, encoding='UTF-8')
        for _ in range(10):
            print(_,jsob[str(_)])
    Ответ написан
    Комментировать
  • Python+mysqlite+bot telegarm не могу добавить в базу данных. Как правильно сделать?

    @Alexa2007
    #Создай отдельный файл с классом типа этого
    # импортируй from my_baza_class import base as b
    #В своём коде вставляй где хочешь
    #Пример внизу
    #
    import sqlite3
    
    
    class base:
        def __init__(self,table):
            self.table = table
            self.conn = sqlite3.connect("mydatabase.db")
            self.cursor = self.conn.cursor()
            print("Open DB")
    
    
        def __del__(self):
            print("CloseDB")
    
    
        def insert(self, full_name,last_name):
            sql = f"INSERT INTO {self.table} VALUES (null,'{full_name}', '{last_name}') "
            self.cursor.execute(sql)
            self.conn.commit()
            print('INSERT DONE')
    
    
        def select(self):
            res=[]
            sql = f"SELECT * FROM {self.table}"
            for _ in self.cursor.execute(sql):
                res.append(str(_[0]) +' '+ str(_[1])+' '+str(_[2]))
            print('SELECT DONE')
            return res
    
        def create_table(self):
            try:
                self.cursor.execute(f"""CREATE TABLE IF NOT EXISTS {self.table}
                          (id integer primary key AUTOINCREMENT, full_name text, last_name text)
                       """)
                self.conn.commit()
                print('CREATE TABLE DONE')
            except Exception as e:
                print('ERROR')
    
    
    
    
    
    #b = base('users')
    #b.create_table()
    #for x in range(1,4):
    #    b.insert(f'full_name{x}',f'last_name{x}')
    
    #x = b.select()
    #print(x)
    Ответ написан
    1 комментарий