• Не работает split?

    citizentwo
    @citizentwo
    Укажи символ по которому хочешь разделить строку.
    str = 'Python'
    print (str.split('t'))

    >>> ['Py', 'hon']
    Ответ написан
    3 комментария
  • Какие есть современные книги для начинающих изучать Python?

    adugin
    @adugin Куратор тега Python
    Скажите, а вот если бы Вы, скажем, начинали заниматься каратэ - Вы бы тоже искали обязательно единственного в мире шаолиньского мастера с 20-м даном? Читайте любую книгу и не парьте мозг. Вам ещё много книг предстоит прочитать, в каждой что-то будете открывать для себя.

    P.S. Основная "книга" - это Python 3.6.3 documentation.
    Ответ написан
    Комментировать
  • Как наиболее точно сравнить две строки?

    adugin
    @adugin Куратор тега Python
    Пример решения с использованием стандартной библиотеки difflib:
    from difflib import get_close_matches as gcm
    
    model = 'A 170 Classic - 7/2004 - 85Kw'.upper()
    model_list = map(str.upper, [
        'A 170 CDI CAT ELEGANCE',
        'A 170 CDI CAT CLASSIC',
        'A 170 CDI CAT AVANTGARDE',
    ])
    
    result = gcm(model, model_list, n=1, cutoff=0.5)[0]
    
    print(result)  # => 'A 170 CDI CAT CLASSIC'

    Также посмотрите в сторону difflib.SequenceMatcher().ratio(), это имеет прямое отношение к cutoff в примере выше:
    from difflib import SequenceMatcher as SM
    
    s1 = 'A 170 Classic - 7/2004 - 85Kw'.upper()
    s2 = 'A 170 CDI CAT CLASSIC'.upper()
    
    SM(isjunk=None, a=s1, b=s2, autojunk=True).ratio()  # => 0.52

    Теория: Расстояние Левенштейна
    Ответ написан
    3 комментария
  • ДДос атака на nginx пакетами 1 байт?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    500 строк в секунду - это не мощно и, вероятно, даже не DDoS. Если адрес один, то просто закройте ему доступ брандмауэром, а если адреса разные, то настройте лимит запросов в Nginx.

    nginx.conf
    http {
        ...
        limit_req_zone $binary_remote_addr zone=reqlimit:10m rate=30r/s;
        ...
    }

    some_site.conf
    server {
        ...
        location / {
            ...
            limit_req zone=reqlimit burst=10 nodelay;
        }
    }

    После этого запросы с одного ip-адреса начиная с 31-го в секунду будут отбрасываться.

    Как вишенку на торт, можно добавить ещё фильтр для fail2ban:

    nginx-req-limit.conf
    [Definition]
    
    failregex = limiting requests, excess: .* by zone .*, client: <HOST>
    ignoreregex =

    и правило в jail.local
    [nginx-req-limit]
    enabled = true
    port = http,https
    filter = nginx-req-limit
    logpath = /var/www/*/*/logs/error.log # Здесь укажите свой путь к логам виртуального хоста
    findtime = 600
    maxretry = 10
    bantime = 7200

    После этого адреса DoS'еров будут автоматически блокироваться брандмауэром на два часа. Что разгрузит Nginx от обработки паразитного трафика.
    Ответ написан
    11 комментариев
  • Как при помощи @property получить @property.property?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Метод, реализующий свойство size, должен возвращать что-то (объект другого класса, например), в свою очередь реализующее через свои свойства нужные вам фичи.
    Ответ написан
    4 комментария
  • Есть ли поле у класса?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Если брать ваш код и сравнивать Base2.value и MyClass.a, то в первом случае - это атрибут класса, во втором случае - атрибут экземпляра класса

    Вопрос (self.a = значение ) означает что у класса MyClass ТЕПЕРЬ есть поле а

    Не совсем. Если вы хотите сделать a атрибутом класса, нужно объявлять его так же, как Base2.value
    Ответ написан
    3 комментария
  • Есть ли в свободном доступе системы распознавания обьектов?

    Есть опенсорсный проект YOLO, который работает очень даже неплохо. https://pjreddie.com/darknet/yolo/
    Классифицирует объекты в кадре за 20ms при использовании видеокарты или спец. железок от Nvidia.
    На процессоре около 6-9 секунд.
    Ответ написан
    1 комментарий
  • На чем в 50 лет можно зарабатывать?

    Если Ваш отец считает, что в 50 он уже старик и ни на что не годен, ну что же, пусть ищет место сторожа.
    Если же нет - почему Вы упоминаете возраст? Создается впечатление, что Вы считаете его неполноценным.

    Поставьте вопрос иначе: на чем зарабатывать человеку, которому только-только минуло 30?
    И ответы найдутся гораздо проще... если не ставить надуманных барьеров.
    Ответ написан
    4 комментария
  • Как на самом деле передаются биты по сетевому кабелю?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Наличие-отсутствие сигнала в проводе было во времена телеграфных аппаратов, т.е. примерно лет двести назад. С тех пор много чего изменилось. В современном сетевом кабеле (возьмем для примера только медь), по кабелю передаются импульсы с частотой 100, 250, 500 и более МГц, причем, не по одной, а по 2, 4 или даже 6 парам. (Вообще-то, там все несколько сложнее, но для понимания сути вполне достаточно считать пары параллельными линиями передачи.) Принято говорить о парах проводов, т.к. не бывает уровня (потенциала), самого по себе; уровень - он всегда относительно чего-то другого, например, в одном проводе относительно другого провода. Отсюда пары, а почему они называются витыми - гуглить самостоятельно. Передаваемый сигнал промодулирован т.н. Импульсно-Амплитудной модуляцией (PAM), т.е. передающая и принимающая стороны различают 3, 5 или даже 16 разных уровней сигнала, которыми, грубо говоря, и закодированы соотв. биты.

    66e6c58266524ec6bb132fb384638d75.jpg

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

    Теперь о скорости и расстоянии. Скорость распространения сигнала в проводнике на уровне школьной физики (если там, конечно, сейчас об этом вообще рассказывают) принято считать равной скорости света в вакууме, около 3m за 1 ns, но на практике она меньше, т.к. проводник не идеален и, как правило, находится не в вакууме, а в изоляции из диэлектрика. Привносимая диэлектриком паразитная емкость снижает скорость распространения сигнала в проводнике (не путать со скоростью распространения поля!) Но те, кто не прогуливал физику с математикой, вполне могут прикинуть порядок цифр для проводника длиной 1000км, как для поезда, идущего из А в Б или даже "расстояние" между двумя соседними битами, передаваемыми по одной паре :)

    Правда, полученые таким нехитрым рассчетом результаты (пусть даже с учетом волновых характеристик кабеля) все еще далеки от реальности для расстояний в тысячи км, т.к. даже в самом лучшем кабеле такой длины вся энергия сигнала передающей стороны превратилась бы в тепло и излучение, и принимающей стороне осталась бы только дырка от бублика. Длина реального сетевого кабеля между двумя устройствами (витая пара!), грубо говоря, не может превышать 100м. Дальше сигнал попадает в другое устройство, которое вносит свои задержки, и т.д. и т.п. от Таганрога, и до самого Ютюба. Конечно, не все эти устройства соединены медью, но мы не станем вдаваться в тонкости распространения света в разных оптических средах, и радиоволн в ионосфере, чтоб у среднестатистической аудитории Тостера ненароком не снесло крышу. Тут важно только то, что на практике мы имеем уже не ns, а десятки, сотни и более ms задержки.

    Это было даже не введение, а популярно-упрощенная шпаргалка на тему того, "как биты идут по проводам", или, выражаясь проще, что происходит в сети на уровне 1 семиуровневой модели ISO/OSI. Пакеты, а также фреймы, датаграммы и пр. абстрактные договоренности о том, как именно считать биты - это уже из другой оперы, точнее, на других уровнях, причем, на каждом свои, и одни в других. Учитывая то, что внутри процессора и памяти (где мы имеем дело с данными из этих пакетов) происходит все то же самое, что и в кабеле, на любом уровне модели вполне корректно считать, что пакет этого уровня доставляется "единомоментно".
    Ответ написан
    6 комментариев
  • Как разбить строку на подстроки?

    adugin
    @adugin Куратор тега Python
    >>> s = '123456789'
    >>> from textwrap import wrap
    >>> wrap(s, 3)
    ['123', '456', '789']
    >>> map(''.join, zip(*[iter(s)]*3))
    ['123', '456', '789']
    Ответ написан
    Комментировать
  • Как на самом деле передаются биты по сетевому кабелю?

    ifaustrue
    @ifaustrue
    Пишу интересное в теллеграмм канале @cooladmin
    Если это троллинг - то я аплодирую стоя! =)

    ОТВЕТ ТАКОЙ: никто мать его не знает как это работает! Это магия! Реально! Все лишь делают вид, говорят про всякие там модели, среды передачи, но это всё фигня! МАГИЯ!!

    www.youtube.com/watch?v=Hu6MVnwPClA
    Ответ написан
    Комментировать
  • Хороший IDE для Python на Mac OS X?

    ali_aliev
    @ali_aliev
    Разработчик на Django/Python, JavaScript
    Лично я пользуюсь вимом, больше никуда не хочется. За все это время испробовал практически все, Sublime, PyCharm, Atom, TextMate, PyDev, но все равно возвращался в свой любимый редактор. Попробуйте связку vim + jedi-vim, уверен не пожалеете. К тому же он очень активно развивается.
    Ответ написан
    4 комментария
  • Хороший IDE для Python на Mac OS X?

    bobrovskyserg
    @bobrovskyserg
    Капельку терпения - PyCharm самое то.
    Ответ написан
    Комментировать
  • Как написать консольную программу?

    winordie
    @winordie
    Лучшая документация -- исходники
    Комментировать
  • Какой язык программирования выбрать?

    iximiuz
    @iximiuz
    Python или JS. А PHP ни в коем случае, как стартовый язык. Он дает слишком искаженное понимание бекграунда веб-разработки из-за особенностей работы интерпретатора (изолирование окружение скрипта, reset интерпретатора между запросами). При этом Python, JS, Ruby и скорее всего Java, хотя на последней у меня нет опыта, в плане веб-разработки выглядят очень похожими. Общие принципы построения и запуска приложений, многопоточность, асинхронность (как возможность). В PHP ничего этого нет, там все выглядит куда более линейным и упрощенным. Пересесть с Python или Ruby на PHP (при необходимости!) будет элементарной задачей, а вот обратное - не верно, слишком много новых концепций нужно будет освоить.

    И никаких фреймворков в начале обучения! Программист на Django звучит также ужасно, как программист на jQuery. Это как клеймо. Программист - это прежде всего понимание общих принципов разработки, а уже потом языки, фреймворки и пр. Так что прежде всего необходимо разобраться с wsgi. Написать пару своих скриптов, обрабатывающих запросы. Проверить, как работает эта кухня. Потом можно начать использовать flask.

    P.S. Доп. плюсы Python, JS и пр. - область их использования не ограничена вебом. Возможно в будущем вы будете этому рады, когда решите вместо сайтов программировать боевых роботов или попробовать себя в машинном обучении или еще где-нибудь.
    Ответ написан
    4 комментария
  • Сервис задач по программированию с проверкой?

    sheknitrtch
    @sheknitrtch
    Есть игра CheckIO. Она представляет из себя набор заданий, которые надо решать на языке программирования Python.
    Ответ написан
    1 комментарий