Ответы пользователя по тегу Python
  • Как добавить распаковку для объекта своего класса?

    @abcd0x00
    Это тебе полный вариант, если что сложное делать соберёшься.
    >>> class A:
    ...     
    ...     def __iter__(self):
    ...         self.it = iter('abc')
    ...         return self
    ...     
    ...     def __next__(self):
    ...         return next(self.it)
    ... 
    >>> a = A()
    >>> print(*a)
    a b c
    >>>
    Ответ написан
    Комментировать
  • Как осуществить фукцию по добавлению элемета в конец списка?

    @abcd0x00
    >>> class UnorderedList:
    ...     def __init__(self):
    ...         self.head = None
    ...     
    ...     def append(self, item):
    ...         newnode = Node(item)
    ...         if self.head is None:
    ...             self.head = newnode
    ...             return
    ...         current = self.head
    ...         while True:
    ...             nextnode = current.getNext()
    ...             if nextnode is None:
    ...                 break
    ...             current = nextnode
    ...         current.setNext(newnode)
    ...     
    ...     def print(self):
    ...         current = self.head
    ...         while current is not None:
    ...             print(current.getData(), end=' ')
    ...             current = current.getNext()
    ...         print()
    ... 
    >>> class Node:
    ...     def __init__(self, data):
    ...         self.data = data
    ...         self.next = None
    ...     
    ...     def getData(self):
    ...         return self.data
    ...     
    ...     def getNext(self):
    ...         return self.next
    ...     
    ...     def setData(self, data):
    ...         self.data = data
    ...     
    ...     def setNext(self, node):
    ...         self.next = node
    ... 
    >>> lst = UnorderedList()
    >>> lst.append(1)
    >>> lst.append(2)
    >>> lst.append(3)
    >>> lst.print()
    1 2 3 
    >>>
    Ответ написан
  • Как с помощью регулярных выражений убрать квадратные скобки и содержимое?

    @abcd0x00
    >>> import re
    >>> 
    >>> s = "one [two] three [1] [2]"
    >>> 
    >>> re.sub(r'\[\d+\]', '', s)
    'one [two] three  '
    >>>
    Ответ написан
    Комментировать
  • Почему не срабатывает isalpha?

    @abcd0x00
    >>> 'переход'.isalpha()
    False
    >>> u'переход'.isalpha()
    True
    >>> unicode('переход', 'utf-8').isalpha()
    True
    >>>
    Ответ написан
    Комментировать
  • Python: format str float - как прятать дробную часть, если она равна нулю?

    @abcd0x00
    Цену надо хранить в виде целого числа, иначе из-за округления она может становиться недостоверной.
    Ответ написан
    Комментировать
  • Как умножить каждый ДЕВЯТЫЙ элемент списка на 2?

    @abcd0x00
    >>> lst = [1, 2, 3, 4, 5] * 10
    >>> 
    >>> out = [n * 2 if i % 9 == 0 else n
    ...        for i, n in enumerate(lst, 1)]
    >>> out
    [1, 2, 3, 4, 5, 1, 2, 3, 8, 5, 1, 2, 3, 4, 5, 1, 2, 6, 4, 5, 1, 2, 3, 4, 5, 1, 4, 3, 4, 5, 1, 2, 3, 4, 5, 2, 2, 3, 4, 5, 1, 2, 3, 4, 10, 1, 2, 3, 4, 5]
    >>>
    Ответ написан
    Комментировать
  • Как проигнорировать содержимое тегов?

    @abcd0x00
    Используй конечный автомат на три состояния: начало (S1), в середине без символа (S2) и в сердине с символом (S3).
    В S1 ты можешь принять только открывающую скобку и перейти в S2.
    В S2 ты можешь принять только простой символ и перейти в S3.
    В S3 ты можешь принимать простые символы и закрывающую скобку.
    Ответ написан
    Комментировать
  • Как правильно парсить utf-8 в lxml?

    @abcd0x00
    Если кодировка не объявлена, откуда он узнает, что там utf-8?
    Декодируй до передачи.
    >>> import lxml.html
    >>> 
    >>> s = b'<div>Hyv\xc3\xa4 juoni!</div>'.decode('utf-8')
    >>> 
    >>> doc = lxml.html.fromstring(s)
    >>> doc
    <Element div at 0xb744be3c>
    >>> doc.text
    'Hyvä juoni!'
    >>>
    Ответ написан
  • Простой вопрос по Python [функции]?

    @abcd0x00
    Табулирование функций прямой и параболы
    >>> def f1(x):
    ...     return 2 * x
    ... 
    >>> def f2(x):
    ...     return x * x 
    ... 
    >>> def g(func, start, end, step):
    ...     while start <= end:
    ...         yield start, func(start)
    ...         start += step
    ... 
    >>> list(g(f1, -3, 3, 1))
    [(-3, -6), (-2, -4), (-1, -2), (0, 0), (1, 2), (2, 4), (3, 6)]
    >>> 
    >>> list(g(f2, 0, 10, 1))
    [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64), (9, 81), (10, 100)]
    >>>
    Ответ написан
    Комментировать
  • Как составить регулярное выражение python?

    @abcd0x00
    Сначала надо отыскать нужные строки, а потом их разбирать.
    Код
    >>> import re
    >>> 
    >>> text = """
    ... abc
    ... first:
    ... 10, 20, 30, 40, 50
    ... 
    ... def
    ... second:
    ... 600, 700, 800, 900, 1000
    ... 
    ... ghi
    ... """
    >>> 
    >>> list(map(re.compile(r'\d+').findall,
    ...          re.findall(r'(?:\d+(?:, )?)+', text)))
    [['10', '20', '30', '40', '50'], ['600', '700', '800', '900', '1000']]
    >>>

    Ответ написан
    Комментировать
  • Более правильный путь изучения языка программирования. Какой он?

    @abcd0x00
    1) Ведь не достаточно знать один язык?

    Недостаточно.
    Должен быть один язык основной (компилируемый язык). Это нужно, чтобы один раз написать программу, которая будет надёжно работать сто лет без изменений.
    Должен быть один язык дополнительный (скриптовый язык). Это нужно, чтобы быстро писать скрипты по автоматизации рутинных действий (не только мелких, но и комплексных), которые нужно периодически менять под обстановку.
    Их надо знать хорошо оба.

    Остальные языки можно знать настолько, насколько нужно.

    Многие советуют начать с SICP. Так ли это?

    Я бы не советовал. Она довольно слабая, так как сделана для средних (тупых) американцев. Для развития мышления надо изучать саму математику (не школьную, конечно).
    Если ты тупой, эта книжка тебе ничего не даст, а математику ты не освоишь вообще. Если ты умный, эта книжка не даст и малой части того, что нужно знать.

    3) Обязательно ли при изучении программирования нужно чётко представлять про интерпретатор и системы счисления, как внутри всё работает и т.д.?

    Да. Готовься к тому, что это придётся узнавать. Потому что, когда надо будет делать программу, ты должен будешь знать всё к тому времени и времени на изучение неизученного не будет.
    Это как будто ты приезжает во Францию и тебе говорят, чтобы ты ехал в столицу, а ты спрашиваешь "простите, а как называется ваша столица, чтобы я знал куда ехать?", а тебе не говорят. Это нужно было учить в школе, как и остальные 100500 всяких нюансов о мире.
    Ответ написан
    Комментировать
  • Объясните ошибку в простой задаче [Python]?

    @abcd0x00
    >>> def f():
    ...     return sum(int(input()) == 0 for _ in range(int(input())))
    ... 
    >>> print(f())
    5
    0
    2
    0
    2
    0
    3
    >>>
    Ответ написан
    Комментировать
  • Можно ли в Python во float отбросить k знаков после запятой?

    @abcd0x00
    >>> n = 17.212123445
    >>> n = int(n * 100) / 100
    >>> n
    17.21
    >>>
    Ответ написан
    Комментировать
  • Стоит ли учиться писать скрипты на bash?

    @abcd0x00
    Скриптов не так много, их как-то неудобно хранить и бэкапить.
    Зато много функций, которые закидываются в инициализационный файл.
    И вот они-то и используются постоянно.

    Когда внешний интернет пропадает
    Код
    # Print popup message
    # Say(message, seconds)
    Say()
    {
        kdialog --passivepopup "$1" ${2:-3}
    }
    
    # Ping server until it wakes up
    # Connect([site="www.yandex.ru"
    #         [, count=1
    #         [, interval=3
    #         [, message="connected"]]]])
    Connect()
    {
        local site="www.yandex.ru"
        local count=1
        local interval=3
        local message="connected"
    
        [ "$1" = "--help" ] && {
            echo "usage: $FUNCNAME [site[, count[, interval[, message]]]]"
            echo "       $FUNCNAME $site $count $interval $message"
            return 1
        } 1>&2
        [ -n "$1" ] && site="$1"
        [ -n "$2" ] && count="$2"
        [ -n "$3" ] && interval="$3"
        [ -n "$4" ] && message="$4"
    
        while ! ping -c $count "$site"; do
            sleep $interval;
        done
        Say "$message"
    }



    Когда надо клип с YouTube скачать
    Код
    # Download YouTube video in selected format
    # Ytf(url, ofile[, fmt=18])
    Ytf()
    {
        [ $# -eq 0 -o "$1" = "--help" ] && {
            echo "usage: $FUNCNAME url ofile [fmtn=18]"
            echo "       $FUNCNAME http://youtube 12345.flv"
            echo "       $FUNCNAME http://youtube 12345.flv 19"
            return 1
        } 1>&2
        n=${3:-18}
        youtube-dl -c -f "$n" "$1" -o "$2"
    }



    Иногда нужно размер файла узнать
    Код
    # Check access to url like a browser
    # SpiderB(url[, agent])
    SpiderB()
    {
        agent=${2:-Wget}
        wget --spider --user-agent="$agent" "$1"
    }

    Ответ написан
    Комментировать
  • ArgParse: mutually exclusive arguments на месте positional?

    @abcd0x00
    parser_write = subparsers.add_parser(
        'write',
        help='Write вфеф',
        usage='%(prog)s [-h] address {data|-f FILE}'
    )
    Ответ написан
  • Как превести str к нормальному виду в Python 3?

    @abcd0x00
    Нужно сначала разделить на пары, а потом в цикле склеивать.
    >>> import email.header
    >>> 
    >>> s = "=?UTF-8?B?UmVsZWFzZS5yYXI=?="
    >>> 
    >>> email.header.decode_header(s)
    [(b'Release.rar', 'utf-8')]
    >>>


    В одной строке может быть несколько разных частей в разных кодировках (бывают и неизвестные кодировки). Так что нужно писать отдельную функцию, которая учитывает любые варианты.
    Ответ написан
    Комментировать
  • Как работать с бинарными данными?

    @abcd0x00
    Какие библиотеки использовать: numpy, ctruct?

    Никакие, это все делается средствами ядра.

    Как то же самое написать на Python3?

    Даже специальные двоичные константы есть
    >>> 0b10101 & 0b11 == 1
    True
    >>>
    Ответ написан
    3 комментария
  • Как преобразовать строку HEX значений в текст на Python 3?

    @abcd0x00
    >>> s = '0025043F043504400435043004340440043504410025043204410435044500200432'
    >>> b = bytes.fromhex(s)
    >>> b.decode('utf-16-be')
    '%переадрес%всех в'
    >>>
    Ответ написан
    7 комментариев
  • Как работает модуль getopt из стандартной библиотеки Python?

    @abcd0x00
    Используй argparse.

    Прошу объяснить пример из стандартной документации python getopt

    А к getopt эти вопросы никакого отношения не имеют, вообще никакого отношения.

    В частности откуда взять функцию usage()? Почему такие разные параметры sys.exit() и sys.exit(2)? Какую роль выполняет переменная verbose? Что делает команда assert False ...?

    usage() и verbose - это просто самодельные вещи, которые можно любыми написать.
    https://docs.python.org/3/library/sys.html#sys.exit
    https://docs.python.org/3/reference/simple_stmts.h...
    Ответ написан
    Комментировать
  • Какая максимально допустимая длина строки с кодом в Python?

    @abcd0x00
    2. Для чего вообще нужно это ограничение?

    У этого параметра есть несколько аспектов.
    1)
    Самая древняя причина - это размер окна редактора. Раньше терминалы были и там был стандантрный размер 80x24 (80 колонок на 24 строки). Соответственно, длинные строки некрасиво переносились или вылазили за край в невидимую область (в зависимости от редактора). Там ещё могут быть причины, но из той же области.
    2)
    Есть такое правило: один оператор - одна строка. Связано это с отладчиками. Когда в отладчике происходит ошибка в операторе, тот указывает строку, в которой ошибка. Если в строке несколько операторов, то непонятно, в каком из них ошибка, и приходится их разделять по разным строкам и прогонять всё заново. На это уходит время, время складывается в часы, часы - в дни.
    3)
    Есть обычные мозги человека, который читает код. В мозгах всё делится на сознательное и бессознательное (за пределами сознания). Сознание может удерживать не более 7 объектов одновременно. Если объектов больше, бессознательное помогает ему сгрупировать их всё равно в 7 объектов (только некоторые становятся группами). Поэтому чем длиннее строка, тем дольше ты её обдумываешь (время уходит на эти группировки лишних объектов в группы).
    4)
    Есть там ещё комментарии в некоторых языках, где для комментирования какого-то фрагмента, нужно переносить его на отдельную строку. Поэтому когда операторы на одной строке, ты не можешь один из них закомментировать тут же. То есть либо ты их разносишь по разным строкам, либо ты экономишь время и что-нибудь не проверяешь, что надо было бы проверить.
    Ответ написан
    Комментировать