• Почему при вводе числа всегда будет выводиться (доброй ночи)? Как исправить ошибку?

    ForestAndGarden
    @ForestAndGarden
    Совершенствовать среду обитания
    Отрабатывается первое if для wopros.

    Например, вводим 7. 7 >=6? Да. Доброй ночи!

    Проверка вводимых значений должна производиться от бо́льших к меньшим.
    Ответ написан
    Комментировать
  • В чем разница между str и &str?

    Erik_Mironov
    @Erik_Mironov
    Старые вопросы: *Dies from cringe*
    str представляет собой неизменяемую последовательность байтов UTF-8 динамической длины где-то в памяти. Поскольку размер неизвестен, его можно обрабатывать только за указателем. Это означает, что str чаще всего используется как &str — ссылка на некоторые данные UTF-8, обычно называемые «срезом строки» или просто «срезом». Срез — это просто представление данных, и эти данные могут быть где угодно, например:

    - В статическом хранилище: строковый литерал "foo"представляет собой файл &'static str. Данные жестко закодированы в исполняемый файл и загружаются в память при запуске программы.

    - Внутри выделенной кучи: String разыменовывает представление &str в строке.

    - На стеке: Например, в следующем примере создается массив байтов, выделенный стеком, а затем он получает представление этих данных как &str:

    use std::str;
    
    let x: &[u8] = &[b'a', b'b', b'c'];
    let stack_str: &str = str::from_utf8(x).unwrap();


    Используйте String, если вам требуется владение строковыми данными (например, передача строк в другие потоки или их создание во время выполнения), и используйте &str, если вам нужно только представление строки.
    Ответ написан
    1 комментарий
  • Кто подскажет, смогу ли я так сделать?

    Vindicar
    @Vindicar
    RTFM!
    pyinstaller для сборки питон-скрипта в exe файл. Скрипт бота импортировать динамически, через importlib. Ну и продумать интерфейс взаимодействия между ботом и лаунчером - объекты журналов (logging), передача токена, и т.д.
    Ответ написан
    Комментировать
  • Как реализовать?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Прочитайте про концепцию "конечного автомата". В вашем автомате будет столько отдельных курсоров, сколько пользователей общается с ботом. Нужно для каждого пользователя хранить отдельный курсор в графе состояний. В зависимости от пользователя выбираем извлекаем нужный курсор и в зависимости от его положения интерпретируем сообщение.
    Цикл отдельный запускать сожиданием ответа для одного польователя - это не правильно.
    Ответ написан
    2 комментария
  • Глупые вопросы по тостеру, которые меня интересуют?

    @Drno
    1. потому что нафиг ненадо и нагружает сервер. в большинстве случаев вопрошающие и так знают какие теги ставить
    2. потому что сохраняй у себя на ПК, вот почему. место не резиновое
    3. просто они гуглят лучше))

    ПС - это все без наезда следует расценивать ))
    Ответ написан
    Комментировать
  • Быстрый старт в IT с хорошей базой?

    DevMan
    @DevMan
    все описанные скилы на фрилансе вообще не роялят: там в первую очередь важен единственный скилл - продать себя.
    затем следует понимание процессов и задач: клиента вообще не интересует path_finding и прочая заумная хрень, его интересует реализация свои хотелок ещё вчера, даже если она из говнопалок, но работает.
    серьезных/крупных клиентов на фрилансе нет. максимум - развитие стартапа или какого-то локального среднячка.

    ну и отдельно: "старт в it" и "старт в фрилансе" - два разных человека.
    Ответ написан
    1 комментарий
  • Быстрый старт в IT с хорошей базой?

    @vism
    В офис идите опыта сперва набраться.
    В 99% процентах случаев нужно понимание бизнес задач, понимание как сделать удобно для клиента софта, общение с менеджером и командой.
    Ответ написан
    Комментировать
  • Как ораганизовать репозиторий для команды?

    sloboda
    @sloboda
    Java QA Automation
    Всё же лучше отдельные репозитории.
    Или несколько отдельных репозиториев, сгруппированных по функционалу приложения, в которых будут подпапки.
    У вас же каждый сотрудник работает в своем форке.
    При внимательной организации code review и мержа только по результатам code review большой свалки в проектах и подпроектах быть не должно.
    Ответ написан
    Комментировать
  • Как ораганизовать репозиторий для команды?

    sheerluck
    @sheerluck
    Так как приходят новые люди и им нужно показывать только часть кода -- то надо заводить новый отдельный репозиторий. Отслеживать их не сложно. Добавлять и исключать людей не сложно.
    А свалку делать не надо.
    Ответ написан
    Комментировать
  • Как правильно организовать работу с Git для соло-разработки?

    saboteur_kiev
    @saboteur_kiev Куратор тега Git
    software engineer
    Если ты один, сделай флоу какой тебе удобный с нейм конвеншеном какой тебе удобен.

    Сделай две ветки:
    site-ru
    dev-site-ru

    Делай ветки для вставки новых крупных фич типа:
    feature-XXXX

    как ветка готова, мержи ее в dev-site-ru c --squash
    Как протестировал на дев, делай мерж в site-ru

    Для тебя и клиента будет интуитивно понятно что за ветки, и не надо будет запоминать зачем нужен мастер или транк.
    Ответ написан
    3 комментария
  • Почему следующий код может иногда падать с runtime error?

    Код [запускался на Python 3.8, 3.9, 3.10]
    import asyncio
    import datetime
    import random
    import colorama
    
    
    async def main():
        t0 = datetime.datetime.now()
        print(colorama.Fore.WHITE + "App started.", flush=True)
    
        data = asyncio.Queue()
    
        task1 = asyncio.ensure_future(generate_data(20, data))
        task2 = asyncio.ensure_future(generate_data(20, data))
        task3 = asyncio.ensure_future(process_data(40, data))
        # Переименовано из "final_task" в "gather_result" т.к. gather возвращает результат (Список значений объектов)
        # В данном коде ничего не возвращается и можно удалить print и саму переменную
        gather_result = await asyncio.gather(task1, task2, task3)
        print(gather_result)
        dt = datetime.datetime.now() - t0
        print(colorama.Fore.WHITE + f"App exiting, total time: {dt.total_seconds():,.2f} sec.", flush=True)
    
    
    async def generate_data(num: int, data: asyncio.Queue):
        for idx in range(1, num + 1):
            item = idx * idx  # equal idx ** 2 
            await data.put((item, datetime.datetime.now()))
    
            print(colorama.Fore.YELLOW + f" -- generated item {idx}", flush=True)
            await asyncio.sleep(random.random() + 0.5)
    
    
    async def process_data(num: int, data: asyncio.Queue):
        processed = 0
        while processed < num:
            item = await data.get()
    
            processed += 1
            value = item[0]
            t = item[1]
            dt = datetime.datetime.now() - t
    
            print(colorama.Fore.CYAN + f" +++ Processed value {value} after {dt.total_seconds():,.2f} sec.", flush=True)
            await asyncio.sleep(0.5)
    
    
    if __name__ == '__main__':
        asyncio.run(main())

    Asyncio "Running Tasks Concurrently" gather
    asyncio.gather на русском
    Приведенный вами код актуален для Python 3.6 (Пункт 18.5.3.5.1. документации asyncio Python 3.6.15), но не для 3.7+
    Ответ написан
    1 комментарий
  • Почему не работает код?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Потому что результат замены надо записывать. replace() только возвращает результат, а не изменяет исходную строку.
    В целом алгоритм конечно кривой. Чтобы заменить буквы на цифры, не нужно перебирать строку по одной букве. А если уж и делать перебором, как у вас, то тогда собирать новую строку из х.
    Но по уму надо просто сделать в цикле замену по словарю

    Если уж соревноваться в решениях, хотя автор вроде бы не просил, то беглое гугление даёт
    number.translate(''.maketrans("ABCDEFGHIJKLMNOPQRSTUVWXYZ","22233344455566677778889999"))
    Ответ написан
    Комментировать
  • Как практиковаться в программировании?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Обычно с помощью рук и головы :) В полном соответстии с принципом антиэнтропийности - циклический процесс, в котором при каждом следующем заходе все больше порядка и меньше хаоса :)
    Ответ написан
    Комментировать
  • Как ускорить работу Python в разы?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Сменить питон на С/С++/Rust/GO/любой быстрый нативный ЯП. Ну или вообще сразу ассемблер.
    Ответ написан
    5 комментариев
  • Как ускорить работу Python в разы?

    @deliro
    Ну ага мы сейчас такие раз и рецепт тебе сказали, который работает для всех случаев. Если бы он был, его бы логично было запихать прям в интерпретатор, не так ли?

    Может быть, asyncio тебе поможет, может быть threading, может быть, там CPU-bound у тебя что-то и надо multiprocessing, а может и вообще на PyPy заменить интерпретатор или часть кода переписать на Cython

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

    Ну или просто код говно:)

    Нам откуда знать профиль твоей нагрузки? Вариантов тысячи.
    Ответ написан
    1 комментарий
  • Замена MongoDB?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Отличный повод избавиться от этого нелепого недоразумения и начать использовать нормальную БД.
    Если речь идёт о базе данных, то выбор огромный: mysql, postgres, sqlite, sql-server, oracle
    Можно выбрать себе СУБД по вкусу, спланировать структуру БД вместо той оргии с гетерами, которая применяется в Монге и начать пользоваться.
    Если речь идет об in-memory key-value storage то выбор поменьше, о тоже есть - redis или подзабытый уже нынче мемкеш.
    Ответ написан
    Комментировать
  • Можно ли инициализировать базу данных в момент создания докер контейнера?

    Да, в Dockerfile можно прокидывать переменные из .env, и можно отдельным шагом сделать RUN, который заполнит базу какими-то начальными данными.
    Ответ написан
    1 комментарий
  • Как обновить значения всех всех документов у которых значение ключа положительное?

    Примерно так
    db.collection.update_many(
    {"delivery_rub": {"$lt": 0}},
    [
      {
        "$set": {
          "delivery_rub": {
            "$multiply": [
              "$delivery_rub",
              -1
            ]
          }
        }
      }
    ])
    Ответ написан
    1 комментарий
  • Как использовать mongodb в России?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Если речь про атлас, то гарантированно - никак.
    В остальном - разворачиваете на своем сервере и радуетесь. С копией, расположенную вне своих серверов, разрабы монги вряд-ли смогут что-то сделать.
    Если речь про то, не получается установить на сервер:
    Гуглите альтернативные репозитории
    Скачайте установочные пакеты с сайта монги (если нужно - с впн) и установите из них.
    Ответ написан
    Комментировать
  • Как практиковаться в программировании?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Просто берёшь и пишешь.
    Это для таких как ты манифест:
    https://macode.ru/
    Ответ написан
    Комментировать