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

    @fireSparrow
    Чтобы проверять RSS вам вообще не нужен какой-то сторонний сервис.

    Отправляете запрос на адрес, получаете xml, парсите, сравниваете с тем, что пришло в прошлый раз.
    Ну или можно поискать модули, которые это автоматизируют.

    Вроде есть какой-то pythonhosted.org/feedparser , но я с ним не работал, ничего про него сказать не могу.
    Ответ написан
    Комментировать
  • Python. Область видимости. Как получить доступ к переменной из раздела __main__?

    @fireSparrow
    Области видимости тут не причём.
    Если модуль запускается не напрямую, а импортируется из другого модуля, то его атрибут __name__ не будет равен "__main__", и всё, что идёт внутри условия, просто не выполнится, и переменная 'a' вообще не будет создана.

    Собственно, конструкцию if __name__ == '__main__' и используют в тех случаях, когда хотят, чтобы какая-то логика выполнялась ТОЛЬКО в том случае, если модуль запущен непосредственно, а не импортирован.
    Ответ написан
    Комментировать
  • Что лучше использовать: xml\json-файл или SQLite для хранения инфомации (150-200 записей)?

    @fireSparrow
    Под вашу задачу большой разницы нет.
    Я бы взял JSON - из-за его гибкости. Потому что в реальности с высокой вероятностью записи будут неоднородны - у какой-то фирмы одно контактное лицо, а у какой-то несколько; у каких-то могут быть разные варианты названия; для каких-то понадобится хранить некую дополнительную информацию и тп.
    В реляционной базе такое сохранять будет посложнее, чем в джсоне.
    Ответ написан
    1 комментарий
  • Как сменить прозрачность консоли?

    @fireSparrow
    1. Консоли бывают разные даже в рамках одной операционной системы. И у каждой могут быть свои настройки. Общего ответа не существует.
    2. В любом случае изменение прозрачности - это манипулирование самой консолью. С питон-кодом это никак не связано.
    Ответ написан
    5 комментариев
  • Нейросеть в jupyter notebook?

    @fireSparrow
    Работа через jupyter notebook принципиально ничем не отличается от работы через терминал или IDE.
    В jupyter вы можете писать тот же код, подключать те же библиотеки и получать тот же результат.
    Любой рецепт по созданию нейросети на питоне вы можете реализовать через jupyter.
    Ответ написан
    Комментировать
  • Как работает механизм обработки исключений?

    @fireSparrow
    Исключения тут ни при чём.
    Просто в питоне отрицательный индекс обозначает элемент, отсчитываемый с конца списка. Например, lst[-1] - последний элемент списка, lst[-2] -предпоследний, и так далее.

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

    @fireSparrow
    Все четыре варианта допустимы. Я обычно принимаю решение, отталкиваясь от окружающего кода.

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

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

    @fireSparrow
    Оба варианты допустимы. Выбирайте тот, который обеспечит большую читабельность и ясность кода.

    Для такого простого примера предпочтительным будет второй случай. Если бы там присутствовали более громоздкие вычисления, то имело бы смысл выбрать первый вариант.
    Ответ написан
    Комментировать
  • Как найти четный или нечетный элемент?

    @fireSparrow
    def find_outlier(integers):
      mask = [x % 2 for x in integers]
      sm = sum(mask)
      target = 0 if sm > 1 else 1
      idx = mask.index(target)
      return integers[idx]
    Ответ написан
    Комментировать
  • Почему в цикл не попадают элементы из списка?

    @fireSparrow
    Это популярная ошибка. Никогда не меняйте ту последовательность, по которой итерируетесь.

    Ваш код обрабатывает первый элемент, и он знает, что после этого он должен перейти ко второму элементу. Он так и делает. Но после удаления элемента все последующие элементы сдвигаются. И на втором месте у вас стоит уже число 3. А число 2 ушло на первое место, которое уже было обработано, и к нему интерпретатор уже не вернётся. Поэтому двойка осталась необработанной.

    Решить проблему можно, если итерироваться по копии последовательности, а удалять - из оригинальной.

    data = [1,2,3,4,5]
    for a in data.copy():
        if data.count(a) == 1:
            data.remove(a)
    print(data)
    Ответ написан
    3 комментария
  • Как сделать так, чтобы имя переменной было равно пользовательскому вводу?

    @fireSparrow
    Во-первых, так делать не надо, это чревато проблемами.
    Гораздо проще и правильнее создать словарь и все динамически создаваемые объекты заносить туда. Тогда введённое пользователем имя можно будет использовать как ключ. Это убережёт от конфликтов с именами других переменных. И можно создать по отдельному словарю на разные типы динамически создаваемых объектов.

    Но если очень уж хочется выстрелить себе в ногу, то можно делать так:
    name = input()
    globals()[name] = 5
    print(abc)


    Здесь если пользователь ввёл имя "abc", то скрипт напечатает 5. Если пользователь ввёл другое имя - получите ошибку.
    Ответ написан
    6 комментариев
  • Как найти последний максимальный элемент в list?

    @fireSparrow
    Создаёте две промежуточные переменные. В одной будет лежать текущий максимум, во второй - индекс последнего текущего максимума.
    После этого идёте циклом по списку и сравниваете каждый элемент с текущим максимумом.
    Если элемент меньше текущего максимума - он нам не интересен, идёте дальше.
    Если элемент больше или равен текущего максимума, то значение этого элемента записываете в качестве нового максимума, а его индекс - в переменную для индекса.
    Ответ написан
    1 комментарий
  • Как написать прогрмму которая будет находить самую длинную последовательность чисел c разницой в 1?

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

    Что касается вашего кода, то там вы сначала создаёте 'a' как число типа int, а потом пытаетесь обращаться к этой переменной по индексу и пытаетесь получить её длину, как будто это список. Естественно, у вас там будет ошибка.

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

    Ну и ещё - не нужно внутри цикла отлавливать ошибку выхода за пределы списка, достаточно просто цикл делать не до последнего, а до предпоследнего элемента:
    for x in range(len(a)-1):
    Ответ написан
  • Почему происходит рекурсия в getattr?

    @fireSparrow
    Когда вы инстанцируете новый экземпляр объект, то это происходит в таком порядке
    1. Новый экземпляр создаётся
    2. Созданный экземпляр инициализируется в соответствии с __init__

    Таким образом, __init__ сработает только после того, как экземпляр уже создан со всеми его методами. Соответственно, и метод __setattr__ (если он объявлен в классе), у этого экземпляра уже есть.

    Поэтому, когда в __init__ вы пишете self._defs = defaults интерпретатор уже не будет делать это стандартным способом, а полезет в метод __setattr__.
    Там он идёт по ветке else, выполняет pass и на этом успокаивается. В итоге атрибут _defs так и не был записан.

    А после этого, когда вы вызываете __getattr__, интерпретатор видит, что он должен обратиться к _defs, пытается найти его, не находит, и опять вызывает __getattr__, чтобы понять, как ему поступить в этом случае. И там он опять видит, что нужно обратиться к _defs. И получается бесконечная рекурсия.

    А если __setattr__ не определён, то в __init__ нормально создаётся _defs, и ничего такого не происходит.

    Решение:
    замените строчку в __init__ на
    self.__dict__['_defs'] = defaults
    Ответ написан
    1 комментарий
  • Номер числа Фибоначчи?

    @fireSparrow
    Здесь
    while i < n:
    Должно быть
    while f <= n:

    А после цикла проверяйте только n==0, а второй проверки не нужно, во всех остальных случаях возвращайте -1.
    Ответ написан
  • Как сделать так, чтобы случайное слово из списка вставить в каждый пробел текста?

    @fireSparrow
    Режешь текст по пробелам, используя split.
    А потом с помощью join из этих кусочков опять собираешь одну строку, но чередуя их со словами, которые с помощью random.sample() выбираются из списка слов.
    Ответ написан
    Комментировать
  • Почему не работает функция преобразование списка?

    @fireSparrow
    Работает для третьей версии питона:
    def modify_list(l):
        tmp = [el for el in l if not el%2]
        l.clear()
        l.extend(tmp)
        for i in range(len(l)):
            l[i] //= 2
        
        
    l = [int(i) for i in input().split()]
    modify_list(l)
    print(l)


    PS: Кстати, PEP8 настоятельно рекомендует никогда не использовать l в качестве однобуквенного имени переменной. Лучше использовать другое имя, или, в крайнем случае, использовать заглавную L.

    Never use the characters 'l' (lowercase letter el), 'O' (uppercase letter oh), or 'I' (uppercase letter eye) as single character variable names.

    In some fonts, these characters are indistinguishable from the numerals one and zero. When tempted to use 'l', use 'L' instead.
    Ответ написан
    3 комментария
  • Как остановить часть цикла если другая часть выполнена?

    @fireSparrow
    for item in response['items']:
    
            if values['last_message'] == u'ничего':
                write_msg(item[u'user_id'],u'Ну и иди отсюда')
                continue # Если условие сработало, то в этом месте
                         # цикл перейдёт к следующему item
    
             # А если не сработало, то продолжит:
             write_msg(item[u'user_id'],u'Что изволите??')
    Ответ написан
    Комментировать
  • Как можно проверить, есть ли у определённого пользователя права на запись в папку?

    @fireSparrow
    По идее как-то вот так это должно работать:
    (сам проверить не могу, линукса под рукой нет)

    import pwd, os
    p = pwd.getpwnam("username")
    os.seteuid(p.pw_uid)
    if os.access("/path/to/file", os.W_OK):
        print "have write access"
    Ответ написан
    Комментировать
  • Scrapy как сохранять большие объемы данных?

    @fireSparrow
    В целом, конечно, это зависит от того, как вы потом хотите с этими данными работать. Но вообще каких-то особых проблем быть не должно, 400 000 строк - это не так уж и много.
    Ответ написан
    Комментировать