Ответы пользователя по тегу Python
  • Как записать в файл данные python?

    @throughtheether
    human after all
    Как исправить
    Пользуйтесь сериализацией.
    Ответ написан
    Комментировать
  • Что за библиотека simplegui с coursea для python, нужна ли она?

    @throughtheether
    human after all
    Проходил кто этот курс?
    Если вы про курсы трека "Fundamentals of computing" от Rice university, то да.
    Смотреть его далее? Он полезен?
    На мой взгляд, да. Хотя в некоторых других курсах (Algorithms: Design and analysis от Stanford, читает Tim Roughgarden), на мой взгляд, некоторые моменты более полно освещены.
    Отсюда у меня вопрос, стоит ли продолжать смотреть этот курс или можно забить, т.к. библиотека какая-то их собственная? Или все же эту библиотеку как-то можно установить, чтобы использовать ее import и работать с ней в консоли у себя на ПК? Нужна ли она вообще?
    Библиотека simplegui используется только для обеспечения интерфейса, задания предполагают, что необходимые алгоритмы вы реализуете самостоятельно. Исходя из личного опыта, могу сказать, что задания курса мне представились несложными, их можно выполнить, пользуясь интерфейсом codeskulptor.
    Ответ написан
    Комментировать
  • Как отправить GET-запрос с параметрами через urllib (Python 3)?

    @throughtheether
    human after all
    какие альтернативные библиотеки посоветуете?
    Requests же.
    Ответ написан
  • Почему возникает бесконечная рекурсия в операторе with?

    @throughtheether
    human after all
    не понимаю, о какой именно рекурсии речь, но на вашем месте исправил бы
    url_list = [x.strip for x in fh.read().split("\n")]

    на
    url_list = [x.strip() for x in fh.read().split("\n")]
    Ответ написан
    Комментировать
  • Какие учебные пособия выбрать для систематизированного изучения программирования на основе ЯП Python?

    @throughtheether
    human after all
    Рекомендую обратить внимание на курсы трека Fundamentals of computing на coursera. Деньги (50 долларов за курс) нужно платить только если вам нужен диплом в бумажной форме.
    Ответ написан
    Комментировать
  • Перебор в Python: есть ли способ ускорить?

    @throughtheether
    human after all
    Пример: нужно фильтровать все сайты, которые содержат точку и расширение файла из списка.
    Я не знаю, что означает "сайты, которые содержат точку". Если вам нужно среди всех URL исключить те, которые указывают на файл с определенным расширением, то я бы на вашем месте воспользовался строковым методом endswith:
    import timeit
    setup_code="""
    sites_list = ["http://google.com",
                  "http://www.yandex.com",
                  "http://rambler.com/ololo.jpg",
                  "http://ya.ru/a.bmp"]
    
    format_files = ['jpg', 'bmp', 'jpeg']
    """
    print timeit.timeit("x=list(filter(lambda url: not any('.' + format_file in url for format_file in format_files),  sites_list))",setup=setup_code,number=100000)
    print timeit.timeit("x=list(url for url in sites_list if not url.endswith(tuple(format_files)))",setup=setup_code,number=100000)

    Результаты:
    1.01494306967
    0.616600117219

    Кроме того, я бы заменил, где это возможно, списки (list) на кортежи (tuple) или множества (set).
    Ответ написан
  • Как определить тип числа с помощью regexp?

    @throughtheether
    human after all
    Если отвлечься от регулярных выражений, то можно реализовать и так (Python 2.7):
    def foo(s):
        try:
            s_int=int(s)
            return s_int
        except ValueError:
            try:
                s_float=float(s)
                return s_float
            except ValueError:
                print "Incorrect string!"
    
    print foo('123')
    print foo('123.5')
    print foo('1e-10')
    print foo('toster')

    Из преимуществ такого подхода - поддерживается экспоненциальная запись (1e-10). Но я не уверен относительно производительности, и возможны другие нюансы.
    Ответ написан
    Комментировать
  • Как разбить строки на слова?

    @throughtheether
    human after all
    Такой вариант подойдет?
    SEPARATORS=",.;?! "
    def toster_word_split(s):
        result=[]
        current_word=''
        for char in s:
            if char in SEPARATORS:
                if current_word: result.append(current_word)
                current_word=''
            else:
                current_word+=char
        return result
    print toster_word_split("Lorem,ipsum;bingo.Bongo? King of Kongo.")
    Ответ написан
    Комментировать
  • Как отправлять ответ на snmp команду python?

    @throughtheether
    human after all
    Если я вас правильно понял, вам нужна реализация snmp-агента на python. Присмотритесь к такому варианту.
    Ответ написан
    Комментировать
  • Что неправильно в алгоритме пятнашек ?

    @throughtheether
    human after all
    distance += abs((i - m[i][j] / 4)) + abs((i - m[i][j] % 4))
    Если вы вычисляете "манхэттенское" расстояние между текущим и идеальным положениями плитки, то почему под знаками модуля в каждом случае используется один лишь индекс i? Я полагаю, корректнее будет исправить:
    distance += abs((i - m[i][j] / 4)) + abs((j - m[i][j] % 4))


    UPD.
    алгоритм ставит пустую фишку всегда в позицию [0, 0] а если поставить ее в другое место он "висит"
    Предполагаю, это из-за вашего подсчета расстояния. Вы нулевое значение (т.е. положение пустой кдетки) игнорируете по какой-то причине.
    Если исправить текст так, то указанный вами пример ([[1, 2, 3, 4], [5, 6, 7, 8], [9, 0, 11, 12], [13, 10, 14, 15]]) нормально обсчитывается

    исправления

    def puzz_astar(start, end):
    """
    A* algorithm
    """
    front = [[heuristic_2(start), start]]
    print(front)
    expanded = []

    expanded_nodes = 0

    while front:
    i = 0
    for j in range(1, len(front)):
    if front[i][0] > front[j][0]:
    i = j
    path = front[i]
    front = front[:i] + front[i + 1:]
    endnode = path[-1]
    if endnode == end:
    break
    if endnode in expanded: continue
    for k in moves(endnode):
    if k in expanded: continue
    newpath = [path[0] + abs(heuristic_2(k) - heuristic_2(endnode))] + path[1:] + [k]
    front.append(newpath)
    expanded.append(endnode)
    expanded_nodes += 1

    print "Expanded nodes:", expanded_nodes
    print "Solution:"
    pp.pprint(path)

    def heuristic_2(puzz):
    """
    Manhattan distance
    """
    distance = 0
    m = eval(puzz)
    for i in range(4):
    for j in range(4):
    if m[i][j] == 0: distance+=3-i+3-j
    distance += abs((i - m[i][j] / 4)) + abs((j - m[i][j] % 4))
    return distance



    Пара комментариев - во-первых, это ad-hoc решение (для случая, когда в конечном положении пустая клетка расположена в конце). Во-вторых, по-хорошему, расстояние надо измерять от одной ноды до другой (то есть, передавать в функцию heuristic_2 текущую ноду и конечную и суммировать, какая плитка на сколько позиций сдвинута). В-третьих,
    m = eval(puzz)
    это очень плохо. Может быть, это сгодится для "олимпиадок", но не рекомендую вам привыкать так делать.
    Ответ написан
    3 комментария
  • Python: как проверить URL на правильность?

    @throughtheether
    human after all
    Scrapy глохнет при скармливании ему неправильного URL.
    А вы пробовали к ресурсу, адресуемому этим URL, обратиться браузером? У меня открывается статья, с библиографическим номером 2002JIMO...30..199R. Более того, при помощи requests я получаю HTTP 200 в ответ на HEAD:
    >>> import requests
    >>> response = requests.head('http://adsabs.harvard.edu/full/2002JIMO...30..199R')
    >>> response
    <Response [200]>

    Есть мнение, что вы не до конца понимаете проблему, которую хотите решить. Предлагаю разобраться, почему
    Scrapy глохнет при скармливании ему неправильного URL
    (и так ли это вообще, может быть, эти явления не связаны). Может быть, сайт временно не работоспособен? Может быть, сервер вас (или ваш прокси) блокирует? Может быть, это ошибка Scrapy?
    Зафиксируйте URL и проверьте, всегда ли (при каких условиях) Scrapy его [не]корректно обрабатывает.
    Ответ написан
    2 комментария
  • IPython, вывести список объявленных в интерактивной оболочке переменных

    @throughtheether
    human after all
    какой командой (быть может, она есть) можно вывести список переменных которые я объявил находясь в интерактивной оболочке IPython

    who или, более детально, whos
    Ответ написан
    2 комментария
  • Почему не выполняются python скрипты (Python 3.x + Sublime text 3)?

    @throughtheether
    human after all
    Предполагаю, в PATH надо добавить каталог, в который установлен python ('C:\python3', предположительно)
    Ответ написан
    3 комментария
  • В двумерный список надо запихнуть значение вида 2*2=4

    @throughtheether
    human after all
    если я правильно понял задачу, то примерно так (python 2.7):
    >>> a=[['{0}*{1}={2}'.format(row,col,col*row) for col in xrange (1,5)] for row in xrange(1,5)]
    >>> a
    [['1*1=1', '1*2=2', '1*3=3', '1*4=4'], ['2*1=2', '2*2=4', '2*3=6', '2*4=8'], ['3*1=3', '3*2=6', '3*3=9', '3*4=12'], ['4*1=4', '4*2=8', '4*3=12', '4*4=16']]
    Ответ написан
    Комментировать
  • Как исправить ошибку с синтаксисом в Python?

    @throughtheether
    human after all
    if "vich" in S
    добавьте двоеточие:
    if "vich" in S:

    Подробнее.
    Ответ написан
    Комментировать
  • Почему Python в разы проигрывает Perl по скорости и расходу памяти при парсинге логов?

    @throughtheether
    human after all
    Я небольшой специалист в python, но предполагаю, что основные ресурсы тратятся здесь:

    host[ip]['data'] = ''
    ...
    host[ip]['data'] = host[ip]['data'] + d

    Почему вы используете словарь как значение ключей внешнего словаря (переменная host)? Попробуйте сделать так:
    host[ip] = ''
    ...
    host[ip] = host[ip] + d
    Ответ написан
    3 комментария
  • Как корректно занести информацию с html-страницы в Таблицу Excel?

    @throughtheether
    human after all
    Такой вариант вам подойдет? Результат исполнения скрипта на питоне 2.7 (openpyxl для записи в .xlsx). На моей машине (windows 7, libre office) открывается нормально. В качестве бонуса - собраны переносы слов. Код показывать стыдно (написан за полчаса).
    Ответ написан
    4 комментария
  • Как расшифровать строку?

    @throughtheether
    human after all
    В данном отрывке, насколько я понял, исходный текст XOR-ится с ключом, к результату добавляется префикс '#obfuscate:' и результат кодируется в base64.

    Если на вход данному алгоритму дать 'iliahonz@gmail.com', то результат будет такой:
    I29iZnVzY2F0ZTooAF0HDyoWEQELWQcOKVYILgE=
    Есть мнение, что предоставленный вами шифротекст порожден или другим алгоритмом, или этим алгоритмом с другим ключом. Можете все исходники предоставить?
    Ответ написан
  • В чем разница импорта библиотек (import *)?

    @throughtheether
    human after all
    Если вы уверены, что в проекте подобный импорт (import *) будет использоваться только один раз, то ничего страшного я не вижу. Другое дело, что чаще всего это предположение верно для проектов малого размера.

    Рассмотрим случай множественного импорта с использованием фразы (import *)
    from xml.dom.minidom import *
    from mymodule import *
    Если в модуле mymodule есть функция parse (она же есть и в xml.dom.minidom), то получится конфликт имен. При большом количестве конфликтующих import-выражений бывает затруднительно понять, из какого модуля в результате эффективно импортирована функция (т.е. чье определение 'победило').

    Ну и можно обратиться к PEP-8:
    Wildcard imports (from import *) should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools.
    Ответ написан
    1 комментарий
  • Python::Requests. Как лучше изменить значения кук перед отправкой запроса?

    @throughtheether
    human after all
    сокращенная нетестированная версия

    import itertools
    value = 'ABCDEFG'
    s = requests.Session()
    s.get('https://server.ru')
    for val,domain in itertools.product(['val1','val2'],['.aaa','.bbb']):
        cookie_val={"name": val, "value": value, "domain":"%s.server.ru"%domain,}
        s.cookies.set(**cookie_val)
    s.get('https://server.ru/login?login=%s&password=%s' % (login, password))
    Ответ написан
    1 комментарий