Задать вопрос
  • Не понимаю суть ошибки, можете объяснить?

    Vindicar
    @Vindicar
    RTFM!
    from sqlite import db_start, create_profile, edit_profile
    from main import balance


    main импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который ...
    Ну ты понял.

    Быстрого волшебного решения тут нет. Разбирайся с областями видимости, избавляйся от глобальных переменных.
    Например, почему у тебя при создании нового профиля используется balance? Т.е. новый пользователь получает столько денег, сколько было у последнего активного?
    Почему вообще у тебя вещи, специфичные для одного пользователя, лежат то в глобальных переменных, то в данных машины состояний (state)? Бери их из БД , когда они потребуются.
    Ответ написан
    6 комментариев
  • Как в Beautiful Soup сделать поиск по атрибутам?

    drygdryg
    @drygdryg
    Python-разработчик
    Просто укажите True в значении нужного атрибута, если ожидаете, что он должен присутствовать у элемента:
    from bs4 import BeautifulSoup
    
    document = """<tag a="1" b="2"/>
    <tag a="2"/>
    <tag a="3" b="4"/>
    <tag a="4"/>
    <tag a="5"/>
    <tag a="6" b="6"/>
    """
    soup = BeautifulSoup(document, 'html.parser')
    for element in soup.find_all('tag', b=True):
        print(element.get('b'))

    Документация: https://www.crummy.com/software/BeautifulSoup/bs4/...
    Ответ написан
    Комментировать
  • Как определить ближайших соседей прямоугольника с заданной стороны на поле с пропусками, без полного перебора?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Эта задача решается алгоритмом "сканирующая прямая".

    Представьте что у есть вертикальная линия, которая двигатеся слева-направо непрерывно. В каждый момент времени на прямой могут появиться какие-то прямоугольники, могут закончиться какие-то прямоугольники или ничего не поменяется - в этот момент прямая какие-то прямоугольники пересекает.

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

    Тут подойдет что-нибудь вроде std::set в C++ - структура хранящая упорядоченное множество объектов, с доступом и изменением за логарифм, умеющая искать ближайший к заданному значению слева и справа (lower_bound, upper_bound). Хранить в ней мы будем вертикальные отрезки, помеченные номерами их прямоугольникв. Не знаю ее аналоги в других языках - нужно что-то реализованное или на binary search tree, или на skip list.

    Когда прямоугольник открывается надо посмотреть, с какими отрезками в set данный отрезок пересекается. Все эти отрезки надо добавить в ответ, удалить полностью покрываемые новым отрезком, а торчащие из него укоротить. Таким образом мы будем поддерживать множество "видимых" отрезков с прямой - ближайших к ней слева.

    В этой задаче можно забить на правые границы прямоугольников и на их ширину (раз нет пересечений). Соседями каждого отрезка - левого края будут ближайшие к нему левые края каких-то прямоугольников.
    Поэтому вам надо получить все отрезки заданные в виде {x, y1, y2, id} и отсортировать их (сначала по x, потом по y). Потом в этом порядке их обходите и применяйте новый отрезок к структуре данных. Все удаляемые отрезки + 2 пересекающихся сверху и снизу пойдут в список соседних для нового отрезка.

    Этот алгоритм за O(n log n) получит всех соседей для всех прямоугольников.
    Это что-то похожее вот на эту задачку с leetcode
    Ответ написан
    2 комментария
  • Почему дублируется слэш и не работают сырые строки?

    Vindicar
    @Vindicar
    RTFM!
    Обрати внимание, как ты выводишь значение.
    В питоне есть два строковых представления: str и repr.
    str - человекочитаемое представление. Его можно увидеть, сделав просто print(path). Сразу станет видно, что ничего не удваивается.
    repr, же, по идее, представляет объект так, что если его записать прямо в коде, как показано - получим обратно этот объект. Если это вообще возможно.
    В случае с числами разницы нет.
    В случае со строками - она будет. У тебя на скриншоте именно repr-представление строки - в кавычках, и с экранированием спецсимволов. При этом, записав такую константу, получишь ту же самую строку, что логично.
    Ведь 'a\\b' - это то же самое, что и r'a\b'.

    Короче, не парься, всё работает как надо. Просто имей ввиду, в каком виде у тебя выводятся значения. Кавычки должны были сразу заставить заподозрить неладное.
    Ответ написан
    Комментировать
  • Почему дублируется слэш и не работают сырые строки?

    drygdryg
    @drygdryg
    Python-разработчик
    Потому что в Python обратная косая черта — это специальный символ, применяемый для экранирования других символов. Поэтому обратная косая черта не может быть сама по себе, и если вы не используете сырые строки (r'\'), то если хотите написать обратную косую черту, вам нужно экранировать её такой же обратной косой чертой ('\\'). И когда вы вводите символ "\" через сырую строку, Python при выводе внутреннего представления этой строки (representation, repr.) экранирует этот символ, что видно на вашем скриншоте.
    В официальной документации можно почитать об этом здесь: https://docs.python.org/3/reference/lexical_analys...
    Ответ написан
    Комментировать
  • Общий поворот клеток, как это реализовать?

    @U235U235
    Координаты частиц и вектора направлений умножаешь на матрицу поворота. Все.
    Ответ написан
    Комментировать
  • Как найти такой определенный интеграл?

    Nizamovoff
    @Nizamovoff Автор вопроса
    Оставлю кринж аккаунт на память)
    Разобрался. tgx имеет точки разрыва при pi/2 и 3pi/2, поэтому надо было разбить на несколько интегралов и для каждого из них отдельно найти предел 63eba110db3d7023894365.png
    Ответ написан
    Комментировать
  • Как сделать случайное имя пользователя?

    iMedved2009
    @iMedved2009
    Не люблю людей
    create table public.profiles (
      id uuid not null,
      username text default concat('Пользователь #', random()*100000),
    
      primary key (id)
    );
    Ответ написан
    2 комментария
  • Как можно изменить код, чтобы он работал быстрее?

    Vindicar
    @Vindicar
    RTFM!
    result = numpy.zeros(mask.shape + (3,), dtype=numpy.uint8)
    result[mask > 0] = (255, 255, 255)

    циклы в питоне - штука медленная. Если есть возможность, лучше использовать индексные операции numpy. Они заметно быстрее, чем тот же цикл в питоне.
    Ответ написан
    Комментировать
  • Как позиция объекта соответствует четырёхмерной матрице?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Матрицы используются для записи преобразований. Надо домножать на них вектор из координат точки - получится новый вектор, который и будет результатом преобразования. Любое линейное преобразование можно записать в виде матрицы.

    Четвертая координата позволяет записывать одной матрицей повороты/растяжения и сдвиги. Если у вас матрица 3x3 (не "трехмерная" - у нее все так же есть только ширина и высота), то точка (0, 0, 0) всегда останется (0, 0, 0). Ведь на что 0 не домножай - останется 0. Поэтому матрицами 3x3 можно записать только повороты и сжатия, но не сдвиги.

    Поэтому вводят фиктивное четвертое измерение w. При этом удобно считать, что координаты точки (x, y, z, w) - Это (x/w, y/w, z/w). Это еще иногда называют однородными координатами. Еще один плюс этого объекта в том, что им можно описать точки на бесконечности (когда w = 0).

    Вот тут уже можно составить линейное преобразование (т.е. взять матрицу), которое оставляет w нетронутым, но использует его для сдвига:
    x' = a11*x + a12*y + a13*z + a14*w
    ...
    w' = w

    Вот в a14 - как раз и находится сдвиг по оси X.
    Ответ написан
    3 комментария
  • Можно ли бесконечное число планет выпрямить в бесконечную плоскость?

    По-детски упростив, вроде бы, просто представить:
    в бесконечной Вселенной уже есть некая бесконечная плоскость.

    Все планеты этой Вселенной пусть отбрасывают "тень" точно перпендикулярно на эту плоскость.
    Задача сводится к вопросу: останутся ли на плоскости места без тени?

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

    Есть ли шанс что на бесконечной прямой не встретится ни одной планеты?
    Если таки не встретится – можно позаимствовать из другой "прямой", где планет «избыток»: более одной.

    Только не просите составить алгоритм «задачи про упаковку» на бесконечном пространстве )
    Ответ написан
    Комментировать
  • Как разбить строку на элементы?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Используйте метод строк .splitlines() либо укажите для метода .split() параметр разделитель ”\n”
    Ответ написан
    1 комментарий
  • При чтении из файла, берет только последнюю строку. Почему?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Ну так все логично:
    for line in lines:
            try:
                q = requests.get(line, headers=headers)
            except requests.ConnectionError as e:
                continue
    
    result = q.content

    Значение q меняется каждую итерацию а получение значения q.content и вся дальнейшая работа происходит после завершения всего цикла и очевидно, что берется значение q, полученное последним.
    Ответ написан
    1 комментарий
  • Как реализовать метод stop()?

    @akonovalov
    Программист на компьютере
    Скорее всего, вам подойдёт реализация с помощью "тредов" (они же "потоки", модуль Threading).
    Это будет действительно "в фоне" и вы сможете послать сообщение (через Queue, например) в этот поток, которое затем обработать внутри бесконечного цикла.
    Ответ написан
    Комментировать
  • Какова вероятность появления последовательности?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Прямая формула что-то не вырисовывается, а вот рекуррентная - вполне.

    Покажу сразу на примере: N бросков, М = 4, т.е. считаем F4(N)
    Неважно, что выпало первым броском, пусть, например, 0. Теперь есть следующие варианты:

    1) Вторым броском выпадает 1 (т.е. не то, что в первом броске). Вероятность такого дела 1/2, и задача сводится к F4(N-1) - первый бросок прошел впустую, но ещё "не всё потеряно".
    2) Вторым и третьим выпадает 0, 1. Вероятность 1/4, задача сводится к F4(N-2)
    3) Вторым, третьим и четвертым выпадает 0, 0 ,1. Вероятность 1/8, задача сводится к F4(N-3)
    4) Вторым, третьим и четвертым выпадает 0, 0 ,0. Ура!!! Вероятность 1/8, дальше смотреть не надо.

    Итого, по полной вероятности, F4(N) = F4(N-1)/2 + F4(N-2)/4 + F4(N-3)/8 + 1/8

    Ну и конечно, база рекурсии: Fm(N) = 0, если N < M

    Как обобщить, думаю, очевидно (в знаменателях - степени двойки). Для маленьких M можно нарисовать формулу, например,
    Для М = 2, будет F2(N) = F2(N-1)/2 + 1/2, тут прямо сразу выскакивает F2(N) = 1 - 1/(2^(N-1))

    Для М = 3, получаем F3(N) = F3(N-1)/2 + F3(N-2)/4 + 1/4, тут кури вот это

    и т.д.

    Программно вычисляется с помощью "динамического программирования". С правильным подходом - за O(N) по времени и O(M) памяти, навскидку тут хорошо зайдет кольцевой буфер. Если надо, могу расписать, но там ничего сложного.
    Ответ написан
    9 комментариев
  • Можно ли заставить нейросеть заставить избегать определенных состояний?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Можно, называется - обучение
    Ответ написан
    Комментировать
  • Для чего нужна Java, что можно на ней конкретно написать и стоит ли вообще ее учить?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    Согласно рейтингам tiobe и renmonk Java стабильно кувыркается где-то на 4 месте в рейтинге популярных языков разработки. Рейтинг Редмонка собирается из двух рейтов популярности (кажется количество вопросов в стековер и количество проектов на гитхабе. Ну или может как-то сложнее ХЗ).

    Первым трем местам в этом анализе я-бы не сильно доверял. Там постоянно идет ротация то JavaScript выскакиевает то C то Swift но ситуация каждый год - новая. Вот сейчас там висит Python... Наверное девопсы подсуетились. И сайентисты.

    В чем сила Java сегодня? Ну во первых в большом объеме легаси кода который уже написан и работает. Java сегодня занимает нишу COBOL в банках и финансовых организациях. И если вы хотите средний достаток, (машина дом, vacation) - то идите спокойно в java и будет кусок хлеба.

    Во вторых в толстом репозитарии бесплатных библиотек на все случаи жизни.
    Например я уже 2 года не пишу на Java ничего ради денег. Но в некоторых скриптах на Scala/Databricks я спокойно подключаю Java-библиотекие (всякие sftp клиенты, json/xml парсеры) и все это нормально интегрируется и работает. И слоган про wrote-once - это не шутка. Это правда работает и в доказательство - целый репозитарий таких либ на mvnrepository.com. Они будут совместимы c Kotlin/Groovy/Scala короче со всеми JVM-based языками.

    Лично я считаю Java как язык слишком многословным. Многие вещи можно короче запрограммировать. Но это просто моё ИМХО. При игры - ничего не скажу. Не знаю. Но вот на Kotlin что-то пишут под Андроид.

    И вообще программист должен больше выбирать род деятельности (фронт или back или железо и микро-контроллеры) а языки учить всю жизнь. Вот так. Вы всю жизнь - студент.
    Ответ написан
    4 комментария
  • Как вычислить количество шагов для вычисления чисел Фибоначчи?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Составьте рекурентное соотношение. Пусть S(k) - сколько шагов надо для вычисления k-ого числа.
    Это будет 1 шаг (сумма в конце), плюс сколько надо шагов, чтобы подсчитать слагаемые. Т.е.:
    S(k) = S(k-1) + S(k-2) + 1
    И известно, что S(1) = S(2) = 0

    Уже можно это все подсчитать, как если бы вы числа фиббоначи считали. Хоть рекурсивно, хоть циклом (что, конечно, быстрее).

    Но можно добавить в обе стороны урванения +1 и сгрупировать слагаемые аккуратно:
    S(k)+1 = S(k-1)+1 + S(k-2)+1

    Тогда, если обозначить G(k) = S(k)+1, то получится:
    G(k) = G(k-1) + G(k-2) и G(1) = G(2) = 1

    Т.е. ответом будет предыдущее число фиббоначи минус один (нам же S(k) = G(k)-1 надо. Плюс, у вас числа с 1,2 начинаются, а тут с 1,1).
    Принципиально от вычислений выше не отличается, но наблюдение интересное.
    Ответ написан
    Комментировать
  • Можно ли подключиться к базе данных sqlite3, которая лежит на сервере?

    Vindicar
    @Vindicar
    RTFM!
    sqlite3 требует доступ к файлу именно как к файлу. Так что тебе придётся подмонтировать каталог с базой к целевой машине, тем или иным способом. Под виндой скорее всего только webdav, под никсами вариантов больше.
    Ну и да, sqlite НЕ рассчитана на одновременный доступ, так что если с этой базой кто-то одновременно работает на сервере и на целевой машине, есть шансы что она поломается.
    Так что от "никакая другая" лучше отказаться при первой возможности.

    А для отладочных целей лучше скопировать базу и гонять скрипт на копии, чтобы не угробить "боевую".
    Ответ написан
    Комментировать
  • Возможно ли в Python сгенерировать сразу 4 цифры, от 1 до 9, чтобы они не повторялись, и записались в разные переменные?

    @Sozdavan
    Да, в Python можно сгенерировать сразу 4 цифры от 1 до 9 без повторения и присвоить их разным переменным. Один из способов сделать это — использовать функцию random.sample из модуля random. Вот пример:

    import random
    
    # generate 4 random digits from 1 to 9 without repetition
    random_digits = random.sample(range(1, 10), 4)
    
    # assign them to different variables
    a, b, c, d = random_digits
    
    print(a, b, c, d)

    Это сгенерирует 4 случайных цифры от 1 до 9 и назначит их 4 различным переменным a, b, c, d соответственно
    Ответ написан
    1 комментарий