• Необходимо решить задачу для курса и понять в чем ошибка моего кода и мышления?

    trapwalker
    @trapwalker Куратор тега Python
    markus1578,
    О это прикольна ярегулярка.
    Для начала, если простыми словами, регулярное выражение - это некий шаблон, записанный специальным синтаксисом. Причем возможности яза шаблоно втаковы, что это, фактически, полный по Тьюрингу язык программирования, но не суть.
    Шаблон в регулярке можно раделить на группы круглыми скобочками. Группы нумеруются по номеру открывающей скобки. В регулярном выражении можно ссылаться на текст, который соответствует той или иной группе (по номеру) в текущем состоянии поиска.
    В данном примере группы три: первая соответствует тому, что совпало полным регекспом, вторая - это одна буква (первая для группы одинаковых). Потом идёт квантификатор "плюс", который требует, чтобы буква была один или более число раз.
    А вот третья группа особенная. Она требует, чтобы впереди был фрагмент, не совпадающе со значением второй группы, но этот фрагмент не будет захвачен регуляркой.
    Если русским языком это сказать, то ищутся все последовательности букв, в которых повторяются одинаковые (такие как первая) буквы, пока не встретится отличающаяся.
    Фактически выбираются все повторяющиеся наборы одинаковых букв, но на выходе findall выдаются значения групп, соответствующих скобочкам.
    То есть на каждый набор одинаковых букв мы получим пару: буква и весь набор.
    По длине набора можно понять сколько букв.

    Как-то сумбурно объяснил, простите. Но в этом и есть проблема регулярных выражений. Они придуманы чужими для хищников. Их сложно объяснить, их без опыта порой сложно читать, их без опыта и навыка сложно писать, но они чертовски удобо порой заменяют довольно громоздкие алгоритмы.
  • Необходимо решить задачу для курса и понять в чем ошибка моего кода и мышления?

    trapwalker
    @trapwalker Куратор тега Python
    У вас не работает случай, когда на входе одна единственная буква.
    Добавил ваше решение в свой ответ с указанием авторства. Попробуйте его запустить целиком, там удобные тесты.
    Вы, похоже, запутались с индексами и так называемой "проблемой +-1".
    Если вам нужно перебирать объекты и получить их индексы. то лучше использовать enumerate питоне.
    Ваш код стал бы более прозрачным и понятным. если бы вы использовали форматные строки для сборки кусочков. Тогда и лишние приведения типов не станут пестрить. Видимо язык вам "не родной"=).
  • Необходимо решить задачу для курса и понять в чем ошибка моего кода и мышления?

    trapwalker
    @trapwalker Куратор тега Python
    О. с регекспом решение тоже довольно элегантное.
    А почему вы не пользуетесь форматными строками?
    Вот это ваше решение можно записать понятным однострочником:
    def encode_by_regexp(s: str) -> str:
        import re
        return ''.join(
            f'{w}{len(l)}' 
            for l, w in 
            re.findall(r"((\w)+?(?!\2))", s)
        )


    А предыдущий вариант тоже можно спати небольшим костыликом. В таком виде работает и выглядит не громоздко, но решение запутанное и мудрёное.
    Легко наделать ошибок.
    def encode_elegant(s: str) -> str:
        d = {}
        g = 1
        for c in s:
            g = d.get((c, g), 0) and g or g + 1
            d[c, g] = d.get((c, g), 0) + 1
    
        return ''.join([f'{k[0]}{v}' for k, v in d.items()])


    Добавлю ваши варианты в свой ответ, с вашего позволения. Упомяну авторство.
  • Необходимо решить задачу для курса и понять в чем ошибка моего кода и мышления?

    trapwalker
    @trapwalker Куратор тега Python
    Увы, но ваше решение не позволяет буквам повторяться в разных местах строки, а такой пример есть среди предложенных.
    Добавьте в ваш пример "dd" в конце и всё сломается.
  • Как вступать в чаты telegram по всем видам ссылок?

    trapwalker
    @trapwalker Куратор тега Python
    wirflve, я человек простой: в вопросе сказано чтобы "бот вступал" - объясняю, что сам вступать не сможет.
    Нужно делать своего телеграм-клиента, который будет и сам вступать и бота добавлять.
  • Как роботам видеть друг друга?

    trapwalker
    @trapwalker
    у меня лапки, это называется разрешающая способность. Зависит она в данном случае только от точности измерения угла энкодером.
    главный вопрос = какой датчик и маячок использовать

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

    Вообще в интересное время, конечно, живём. Куча всего доступна с алиэкспресса сравнительно недорого, а остальное можно напечатать на 3д-принтере или вырезать из оргстекла на станке с ЧПУ, причем даже эти средства производства дома иметь уже не обязательно, есть fab-лабы и конторы, которые сделают любые печатные платы и даже smd-компонентырасставят и припаяют.

    Да. в качестве оптического примёника подойдёт инфракрасный фото-примник, а маячок - инфракрасный сетодиод, как в пульте Д\У.
  • Почему при вводе input() выдается ошибка?

    trapwalker
    @trapwalker Куратор тега Python
    Lord_of_Rings, вижу. Терминал передаёт /r/n в качестве абзаца, а питон читает их как два отдельных разделителя.
    Пусть попробует без пичарма запустить в командной строке
  • Попадает время в промежуток между двумя time или нет?

    trapwalker
    @trapwalker
    nApoBo3, можно без вычислений, но условие будет с ИЛИ.
    Интереснее когда график работы магазина разный в выходные и будни, причем, скажем, на выходных магазин открыт в полночь.
    Ну, к примеру, пн-пт - 10:00-23:00 а сб-вс - 10:00-01:00.
    Тут вообще интересно. Фактически магазин не работает в суботу с полуночи до часу ночи. но работает в понедельник с полуночи до часу ночи.
    В таких случаях расписание лучше задавать набором интервалов часах, минутах или обычно в секундах от полуночи понедельника.
    В часах проще показывать на примере.
    0-1, 10-23 - понедельник
    34-47 - вторник
    и т.д.
  • Попадает время в промежуток между двумя time или нет?

    trapwalker
    @trapwalker
    Я понял. Обновил ответ. Нужно всего лишь поменять местами время открытия и закрытия и инвертировать условие вхождения, когда полночь попадает на время работы учреждения.
  • Как реализовать колоду карт через классы на python?

    trapwalker
    @trapwalker Куратор тега Python
    DrMorro, если б мне такое принесли в качестве лабораторной работы по одной из тем ООП, тоя бы поставил троечку с минусом.
    - не стандартный интерфейс добавления элемента "add_card". Нужно append, если в колоду нельзя добавить что-то кроме карты.
    - нестандартный велосипед для получения размера колоды (get_amount). Есть же len(). Нужно использовать стандартные протоколы.
    - объект не умеет итерироваться. не работают срезы.
    Ну и в целом код оформден не по pep8.
  • Как реализовать колоду карт через классы на python?

    trapwalker
    @trapwalker Куратор тега Python
    DrMorro, на самом деле это далеко не все магические методы, которые стоило бы реализовать.
    Я не знаю для какой игры у вас задумана эта структура, но я бы делал колоду карт неизменяемой.
    Это довольно логично, если считать, что колода - это не нечто вещественное, а просто некий набор карт в определенном порядке. Если его перетасовать, то это останется та же самая колода? Для большинства игр нет.
    Таким образом я бы выкинул из колоды название и дату, ведь в реальном мире у колоды нет таких атрибутов.
    Я бы унаследовал колоду от обычного кортежа, но снабдил бы его дополнительными методами для работы с колодой:
    shuffle(self) -> Deck - перемешать
    shift(x: int = None) -> Deck - двинуть x карт и подложить снизу. Если x не указан, сдвинется рандомное число карт, если больше размера колоды. то сдвинется по модулю размера колоды.
    pop(idx) -> Deck - вытащить из колоды карту номер idx по модулю размера колоды idx=-1 вытащит последнюю
    insert(idx, card: Card or Deck, double='error') -> Deck - вставляет в колоду карту или другую колоду. При этом параметр double определяет реакцию на появление 2 одинаковых карт в одной колоде и принимает значения 'error' (ошибка), 'drop_new' (не добавлять дубли карты), 'drop_old' (отбрасывать старые дубли), 'ok' (допускать дубли в колоде).
    При этом можно переопределить магические методы суммирования у колоды и у карт. Сумма колод будет вставлять колоду левого операнда над колодой правого. В таком случае можно объявлять контекст обработки дублей, как это сделано в параметрах работы сточностью модуля decimal.
    Ещё можно. чтобы сумма двух карт формировала колоду из двух карт.

    При этом каждый из перечисенных выше методов формирует новую неизменяемую колоду. Старую можно запомнить, или забыть - это не важно.
    Такие иммутабельные типы данных очень удобно использовать в алгоритмах поиска решений при разработке ИИ.
  • Как реализовать колоду карт через классы на python?

    trapwalker
    @trapwalker Куратор тега Python
    А зачем, если вы не для денди пасьянс пиште, а на питоне. Зачем биты экономить в ущерб простоте и читабельности?
    Там речь, конечно, не о тех картах, но да не суть.
    Сортировать можно и кортежи, а работать с ними куда удобнее, чем с битовыми масками.
  • Ошибка при запуске программы, можете помочь?

    trapwalker
    @trapwalker Куратор тега Python
    atex Для начала отформатируйте нормально код и отвечайте на вопросы в комментариях к посту.
    Во-вторых, нужно более подробную инфу по ошибке: полный стек-трейс, условия и способ запуска, как получили сообщение об ошибке и т.д.
  • Порядковый генератор фразы?

    trapwalker
    @trapwalker Куратор тега Python
    nishe, понятия не имею. Спросите у автора.
  • Порядковый генератор фразы?

    trapwalker
    @trapwalker Куратор тега Python
    Можно ещё рекурсивно вот:
    def r(w=words, n=5): 
        if n > 1: 
            yield from ([i] + rr for i in w for rr in r(w=w, n=n-1)) 
        else: 
            yield from ([i] for i in w)
  • Как расчитать координаты точек для шестиугольника вписанного в круг?

    trapwalker
    @trapwalker
    TheSnegok, c - это координаты центра в комплексной форме. Например если X=30, Y=40, то c=30+40j.
    Про fi0 описал в статью. Это общий угол, на который хотим повернуть весь многоугольник.
    А ещё надо помнить, что Y у вас, наверно, сверху вниз направлен, а не как все привыкли в математике рисовать. Но это не важно.
  • Почему не работает?

    trapwalker
    @trapwalker Куратор тега Python
    bombalor, делайте логгирование принятой информации, чтобы разобраться подобнее. Из того, что вы тут привели следует, что поиск по регекспу не находит соответствий.
  • Есть ли такой бот?

    trapwalker
    @trapwalker
    Hemul GM, да, клиента написать конечно можно, но это будет не бот.
    Да и пределсть телеграмма в том, что он одинаково доступен на разных устройствах. Либо придётся под все платформы писать клиент, либо на каких-то не будет журнал вестись, а это уже как-то не консистентно.
  • Резервное питание для видеонаблюдения?

    trapwalker
    @trapwalker
    hint000,
    Ну мы же не знаем, какой проект у автора, а вы уверенно говорите, что резервировать питание монитора не нужно.

    Нет, прочитайте внимательно. Я сказал "не обязательно". Это, согласитесь, звучит уже не так категорчино, правда?
    И много он разглядит на смартфоне? Даже если будет переключать 75 камер

    С каких пор стало нельзя отсортировать камеры по времени последней регистрации движения?
    А еще правильно настроенная система наблюдения умеет классифицировать обьекты по размеру и положению в кадре. Участки, где шныряют собаки или колышутся ветки можно маскировать от срабатывания детектора движения камеры, а зоны детекции настроить так, чтобы на идущего человека реагировала однозначно.
    Да и на большом мониторе никто 75 камер о кругу глазами не оглядывает. Система подсветит ракурсы, в которых было движение.
    На шаг отступить от предложенного мной сценария нельзя? Если они ничего не видели до отключения (а после отключения тем более), то какова должна быть логика охраны? "Алё, ГБР?

    Я исходил из ваших предпосылок. Если никого не видели, то зачем ГБР?
    Не поверите, именно такая схема практиковалась и практикуется на нескольких последних местах моей работы

    Ну мы же не знаем, какой проект у автора

    Именно. А вы то как будто бы знаете, то как будто бы нет... Очень убеждённо говорите.
    Логичный подход - это сигнализация по движению для детектирования проникновения, а камеры для прояснения подробностей. Может там собака, действительно. в неожиданном месте пробежала, а может ветка с дерева упала. И тут вполне сгодится и мобильный терминал.
    А основная цель камер - обнаружить активность и задокументировать происходящее для последующих следственных мероприятий.
    Да и много ли пользы от датчиков движения, когда типично по территории гуляют собаки.

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

    Самые ненадежные. Собака, способная устоять против палки колбасы будет очень дорого стоить предриятию.