• Как сделать, чтобы программа для бота запоминала, на какие кнопки нажал пользователь?

    @twistfire92
    Python backend developer
    Если вы используете обычную клавиатуру, не inline, то советую посмотреть в сторону метода register_next_step_handler() В интернете полно примеров использования, в том числе на этом ресурсе.
    Но мало где описывается, что помимо объекта сообщения и объекта функции этот метод принимает аргументы, которые в эту функцию передает.
    Пример такого использования можете посмотреть тут
    Ответ написан
    Комментировать
  • Ошибка синтаксиса, как исправить?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Может, для разнообразия вы будете читать текст ошибки?
    if player1 == 0:                 #ошибка синтаксиса в этой строке
    IndentationError: expected an indented block after 'while' statement on line 61

    Тут три варианта:
    Вы не в состоянии прочитать/осмыслить ошибку
    Вы не в состоянии перевести ошибку (даже имея под рукой интернет с кучей переводчиков)
    Вам лень систематически изучать даже основы языка, в которых сказано, что python отсупозависимый.
    Для первых двух пунктов, увы, решения нет. Для третьего - взять волю в кулак и не просто тыкайся, в надежде найти полезный кусок знания, а найти нормальный источник (Например книга Марка Лутца) и учится по нему
    Ответ написан
    Комментировать
  • Ошибка в импорте библиотеки telebot. Как ее исправить?

    @mrsalam
    Убедитесь, что вы установили библиотеку pytelegrambotapi, а не просто telebot
    Ответ написан
    Комментировать
  • Как выйти из тупика, как поднять уровень?

    ddv88
    @ddv88
    Binance Futures
    Слабо верится в Освоил %список% в совокупности пока пилю на ноде.
    Может быть ты путаешь «освоил» с «немного пощупал, то что спроектировали другие».

    возможно я уже sinier просто я об этом не знаю.
    заучивать теорию, патерны

    Точно не синьор, пока что расслабься)

    идти в тим лиды и тех лиды

    Это так не работает. Ты можешь конечно попробовать на собесы заскочить, тебя там попустят и ты расслабишься)

    я понимаю что это разные скилы (разработчик и лид)
    есть смысл развиваться в лиды.

    Будешь хорошо учиться и практиковаться, в какой то момент поймешь, что можешь помогать учиться другим, правильно выбирать стратегии при разработке проектов, контролировать работу других разработчиков и отвечать за качество каждого этапа разработки - вот тогда ты (сможешь расслабиться) станешь лидом.

    Хочу развиваться дальше в этой карьере но не знаю как.

    Зависит от того что ты хочешь получить от этого развития.

    Кто-то хочет войти в айти. Я лично из него вышел. Я уперся в денежный потолок на позиции фула/лида и закрутил свое дело, которое мне приносит больший доход и еще позволяет заниматься своими хобби и иметь доп финансы с них. В том числе кодинг остался хобби, но перешел из разряда кодить на контору в кодить для своего бизнеса.
    Ответ написан
    Комментировать
  • Легкий вопрос по Python, но все же не могу понять, как решить задачу?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Прописывайте условия полностью
    У вас не «(a - 1 либо a + 1) равны c», а «(a - 1) или (a+1=c)»

    т. е bool(a-1)

    if (a - 1 == c) or (a + 1 == c):
    Ответ написан
    Комментировать
  • Легкий вопрос по Python, но все же не могу понять, как решить задачу?

    if a - 1 == c or a + 1 == c
    Ответ написан
    Комментировать
  • Как научиться декомпозировать задачи?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Переодически может появиться очень крупная задача вида "нужно то не знай что". Мне приходится с ней разбираться и если с первым этапом - конкретизация требований все более-менее понятно, то с дальнейшими действиями все совсем плохо.

    Ситуация - знакомая. Во первых это - не задача. Это issue типа investigation. Его результатом должен быть не финальный продукт а просто новый сет issues. Оценивать время можно как угодно. Можно писать 1 день для начала. Все равно никто не сможет оспорить вашу оценку.

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

    Это - риски и их просто надо заранее проговорить на митингах. Просто сообщайте заказчику что задача - рисковая и если что-то не так пойдет - то время надо будет сдвинуть.
    Ответ написан
    Комментировать
  • Как научиться декомпозировать задачи?

    Adamos
    @Adamos
    Дробить задачу еще на более мелкие совсем не охота

    Ну и зря. Вообще-то технологиям планирования совместной работы уже не первый век, и важнейший этап - как раз выделение тех участков работы, которые критичны для начала работы на других участках, и подтягивание их на диаграмме Ганта как можно раньше, чтобы уменьшить простой. Потом уже менее критичные задачи ложатся на свободные участки и параллелятся относительно друг друга.
    Так, например, нас учили делать генплан строительства еще 30 лет назад. До популяризации в РФ всяких там Скрамов и Канбанов.
    Ответ написан
    8 комментариев
  • Какое пояснение битовым операциям?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Почему код выводит конкретно 4 и 3, а не 1 и 1?

    Какое пояснение битовым операциям?

    Пояснение простое - потому что это не битовые операции

    Битовые операции это к примеру вот:
    print(bin(0b0110 | 0b0001))
    # 0b111
    print(bin(0b0111 ^ 0b0001))
    # 0b110
    print(bin(0b0101 & 0b0001))
    # 0b1
    Ответ написан
    Комментировать
  • Как из функции вывести данные циклом?

    sswwssww
    @sswwssww
    def cicle_funct():
        i = 0
        while i < 10:
            i += 1
            yield i
    
    
    c = cicle_funct()
    while True:
        print(next(c))


    А "лучше":
    def cicle_funct():
        i = 0
        while i < 10:
            i += 1
            yield i
    
    
    cc = cicle_funct()
    for c in cc:
        print(c)
    Ответ написан
    Комментировать
  • Как выглядит ID сообщения в телеграмме?

    botermain
    @botermain
    ID выглядит правильно, вопрос в том, правильный ли вы подставляете, давайте лучше получим ID отправленного нами сообщения и изменим его по нему, а не тыкая пальцем в небо. Расскажу на примере Telethon(Самая простая библиотека по моему мнению):

    Во первых, отправим сообщение и запишем его в переменную
    message = client.send_message(chat_id, text)

    После чего мы можем достать из переменной ID отправленного нами сообщения:
    message = client.send_message(chat_id, text)
    print("ID сообщения: ", message.id)


    И вот только теперь отредактируем его с помощью ID, который получили, вот пример рабочего кода:
    message = client.send_message(chat_id, text)
    client.edit_message(chat_id,message.id,text)


    Надеюсь, что объяснил понятно
    Ответ написан
    3 комментария
  • Почему могут необрабатываться некоторые ответы для инлайн кнопок в Telegram боте?

    @pr0l
    вы все колбеки пытаетесь обработать 2 раза. оно попадает в первый и дальше уже не обрабатывается.
    @bot.callback_query_handler(func=lambda call: True)
    В первом он не находит вариантов обработки вот и ничего не делает.
    Нужно разделить callback
    @bot.callback_query_handler(func=lambda call: call.data == 'yea1')
    
    @bot.callback_query_handler(func=lambda call: call.data == 'yea2’)
    
    @bot.callback_query_handler(func=lambda call: call.data == 'nope1')
    
    @bot.callback_query_handler(func=lambda call: call.data == 'nope2’)

    и не используйте глобальные переменные, есть классы.

    class Info:
        def __init__(self, phname):
            self.phname = phname
            self.rndnumber = None
            self.tdn = None


    А потом вызывай и присваивай
    Info.tnumber1 = message.text

    создай сначала все кнопки, а потом скопом добавь, лишний код:
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            watch_balance = types.KeyboardButton(' Посмотреть баланс ')
            send_money_button = types.KeyboardButton(' Перевести на кошелек ')
            edit_data = types.KeyboardButton('️ Изменить данные ️')
            markup.add(watch_balance, send_money_button, edit_data) # <------
            bot.send_message(message.chat.id, ' Выберите, что делать ', reply_markup=markup)


    вместо отправки просто сообщения, используй реплай, типа ответ на запрос.
    bot.reply_to(message, ' Выберите, что делать ', reply_markup=markup)
    Ответ написан
    Комментировать
  • Как найти программистов и сделать свой штат программистов?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Очевидно, что проблема в том единственном твоём любимом программисте. Наверное, он не терпит конкуренции более сильных разработчиков и тогда надо гнать его в шею.
    Варианта два: уволить его, либо воспользоваться услугами профессиональных нанимателей, HR
    Ответ написан
  • Есть ли единый сервис синхронизации бронирования отелей?

    @Drno
    Нет общей системы. Каждый отель сам решает с каким сервисом общаться и сколько номеров ему «отдавать»
    Ответ написан
    Комментировать
  • Python: как оставить в текстовом файле строки определенного формата?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    На самом деле этот файл представляет из себя json, который и надо разбирать как json, не занимаясь разбиением на строки и прочей ерундой:

    import json
    
    json_text = '''{"total":20,"rows":[
    {"id":123,"mark":null,"Status":2,"MessageNumber":123456789,"text":"Привет"},
    {"id":1234,"mark":null,"Status":1,"MessageNumber":23456789,"text":"Пока"},
    {"id":12345,"mark":null,"Status":2,"MessageNumber":345678, "text":"Ало"}]
    }'''
    
    data = json.loads(json_text)
    
    numbers = [x["MessageNumber"] for x in data["rows"]]
    print (numbers)
    with open("output.txt", "w") as f:
       print (", ".join(str(x) for x in numbers), file=f)
    Ответ написан
    Комментировать
  • Пишу код для Telegram Бота, как не делать тупые ошибки?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Сначала надо изучить язык программирования, потом освоить нужную библиотеку и уже тогда писать бота. А то это как выехать на трассу, купив водительсике права, но не изучив азы вождения.
    Ответ написан
    Комментировать
  • Бот не сохраняет заданные переменные Telebot. Как сохранить переменные telebot?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    1. Код следует оформлять специальной кнопкой в редакторе
    2. Вы никакие переменные не передавали в функцию, поэтому они и остались где-то там
    3. bot.register_next_step_handler(sent, answer) и bot.register_next_step_handler(sent, deanswer) не нужны, насколько я понимаю Вашу логику

    Ключи вы получили в этой же функции, поэтому передаем их дальше
    bot.register_next_step_handler(sent, get_text, keys)


    Функцию get_text нужно будет доработать, чтобы она принимала ключи
    def get_text(message, keys):

    и так же их нужно будет передать дальше:
    bot.register_next_step_handler(sent, crypto, keys )# с encrypto по аналогии

    + конечно
    def crypto(message, keys): # с encrypto по аналогии


    Злесь уже есть ключи из первого шага в переменной keys, и зашифрованный текст в crypted_text. Что-то делаем с ним, и печатаем пользователю. Без дальнейших register_next_step_handler
    def crypto(message, keys):
        crypted_text = message.text.upper
        result = magic(crypted_text, keys)
        bot.send_message(message.chat.id, f'ваш код {result}')
    Ответ написан
    Комментировать
  • Как обновить записи в sql?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    В SQL записи обновляются запросом UPDATE.
    Ответ написан
    6 комментариев
  • Почему не выходит таблица умножения в 1С?

    @zibinskyY Автор вопроса
    Сам разобрался ))) В сообщении вместо Шаг нужно было указать Число2
    Ответ написан
    Комментировать
  • Как уменьшить количество таблиц-справочников с тремя-четырьмя строками?

    @rPman
    тут несколько подходов, я трогал каждый из них и все они имеют право на существования
    1. оставь как есть, я рекомендую, пусть будет 100500 таблиц справочников (если проблем с именами нет ну и отлично), fk-индексы все это свяжут а инструменты анализа базы данных помогут с этим работать (автоматические query builder с мышевозекательным интерфейсом) и база будет сама следить за тем что идентификаторы справочников не противоречивы
    недостатков я не могу придумать, кроме может быть сильно разросшейся структуры, когда то давно я слышал что некоторые базы данных при увеличении количества таблиц начинают хуже работать но как я понимаю это если их будет десятки тысяч а не десятки и сотни.. может быть резервное копирование такой базы или ее репликация будет проходить чуть медленнее или еще хуже, организационно репликация может быть настроена на не рассылку ddl модификаций, в этом случае создание нового справочника будет задавать работу еще и админам, что нежелательно.

    2. противоположный, использование одной таблицы key-value для нескольких разнородных справочников (id, value, table_name), в 99% случаев можно использовать один сиквенс (одну последовательность идентификаторов), вам же не обязательно чтобы разные справочники начинали счет своих строк с одного и того же числа 1.
    Недостаток - база данных теперь не сможет контролировать что вы используете непротиворечивый идентификатор (можно в запись одного справочника указать номер из другого), хотя несуществующий так же нельзя будет указать (и будут работать delete cascade), так же удобной автогенерации sql не будет. Структура будет проще, так же интерфейс редактирования таких справочников может быть один вместо кучи форм и добавлять новые справочники будет сильно проще (хотя с точки зрения разработки нет особой разницы, один insert ты написал или create table перед этим)

    3. не хранить справочники в базе данных вообще, т.е. за значение справочников отвечает бакэнд (хранятся в статичных файлах или в коде) самый дибильный подход, редактировать такие справочники скорее всего только руками в конфигах/исходниках. Недостатки - база данных совсем не будет знать ничего о значениях и не сможет ни проконтролировать ни помочь с запросами
    Но это позволит снять немного нагрузки с базы данных, сделает структуру проще и позволит перенести управление значениями справочников на откуп ide редактора (если хранить значения справочников в коде, можно дать значениям имена переменных, так как в коде часто их так или иначе заводить придется)

    Лично я третьим подходом в чистом виде не пользовался, но у меня был набор скриптов, которые из справочников в базе данных формировали код с инициализацией констант и их именами для приложения (сами справочники приложением редактироваться не могли) и был соблазн перевести эту часть базы из 'оперативной' в 'для разработчика', так как справочник это что то - отвечающее за отображение информации, но не за бизнеспроцессы (ну примерно как языковые файлы для приложения, не хранить же переводы строк интерфейса тоже в базе, ну так и справочники смогут работать как часть этого интерйфейса и тоже может требовать перевода).
    Ответ написан
    4 комментария