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

    DDDsa
    @DDDsa
    Вот вам ещё одно мнение: отложите пока книги и теорию. Чтение всего подряд "про запас" — это трата времени на вашем этапе. Начните какой-нибудь проект, который пригодится лично вам. Какой-нибудь каталогизатор, планировщик, менеджер расходов. Если уже более или менее знакомы с языком, можно сразу попробовать создать собственный блог на джанго. Берёте туториал из официальной доки и повторяете за ними. Потом меняете его под свои нужды.

    Как только встречаете трудности — решаете эти конкретные трудности. Нужно как-то по-особому преобразовать список? Берёте книжку Лутца и читаете раздел про списки. Нужно организовать хранение данных в БД? Читаете раздел про БД и туториал по sqlite. Какая-то проблема, связанная с джанго? Открываете документацию джанго и ищете нам нужный раздел. Всё равно не понятно? Идёте в гугл и вбиваете ваш вопрос. Так, пока не решите проблему, затем двигаетесь дальше.

    В итоге у вас получится ваш первый большой проект, за который вам скорее всего будет стыдно впоследствии, но это не страшно. Вы набрались бесценного опыта. Теперь можно почитать книжку с теорией, и слова в ней приобретут для вас новый смысл. Уже в процессе чтения у вас будут появляться мысли, как можно улучшить ваш проект, а где вообще переписать его заново. Вот и займитесь этим.

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

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

    Потом вы доберётесь до классов и перепишете ваш проект в парадигме ООП. Вы поразитесь, насколько код стал более читаемым, насколько проще стало добавлять новые функции. Только так вы поймёте ООП, а не читая определения терминов "инкапсуляция, полиморфизм, наследование".

    В общем, практикуйтесь и не бойтесь трудностей : )
    Ответ написан
    Комментировать
  • Как поменять версию Python на сервере PythonAnyWhere?

    DDDsa
    @DDDsa
    Заходите в ваш дашборд на сайте pythonanywhere.com.

    На вкладке Web в разделе Code есть пункт Python version. Нажмите на карандашик, чтобы изменить
    Ответ написан
    Комментировать
  • Как записать регулярное выражение в файл json и прочитать его без потери префикса r?

    DDDsa
    @DDDsa
    Подождите, префикс r — это просто синтаксический сахар, а не какой-то особый тип строки. r'abc' для интерпретатора — это не "r-строка", а просто указание заэкранировать все спец-символы и сочетания символов и вернуть результат в виде обычной строки. Которую можно сохранять в JSON, загружать из JSON'а без потерь.

    То есть, если мы пишем r'a\nb\tc' — это то же самое, если бы мы написали 'a\\nb\\tc'

    Другими словами, вам достаточно только сохранить данные в JSON с указанием префикса r. После этого их можно загружать обратно из JSON'а с полной уверенностью, что вы ничего не потеряете
    Ответ написан
    2 комментария
  • Как отключить подсветку в sublime text 3 python?

    DDDsa
    @DDDsa
    Вы, наверное, Anaconda поставили? Она так подсвечивает ошибки оформления по PEP. Первые три строки у вас подсвечиваются, потому что модули импортированы, но не использованы, последняя — потому что перед print нужно две пустых строки, а не одна.

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

    Но если всё-таки хотите отключить

    Preferences -> Package Settings -> Anaconda -> Settings - User

    И добавьте туда опцию

    "anaconda_linting": false,
    Ответ написан
    1 комментарий
  • Почему не импортируется пакет?

    DDDsa
    @DDDsa
    Сообщение об ошибке, которое вы привели, говорит о том, что переменная `p` не объявлена. Судя по всему, вы забыли импортировать модуль p

    p0.py:

    import p
    
    p.func1()
    p.func2()


    Так работает?

    UPD:

    И в __init__.py у вас ошибка. Нужно указать, из каких модулей вы собираетесь импортировать функции:

    __init__.py:
    
    from p1 import func1
    from p2 import func2
    Ответ написан
    Комментировать
  • Группировать совпадения в регулярном выражении?

    DDDsa
    @DDDsa
    Отвечаю буквально на ваш вопрос. Вот такая регулярка сработает:

    [\s\W]*((?:\w*\s+)?\d+)?[\s\W]+((?:\w*\s+)?\d+)?[\s\W]*


    Или такая, более лояльная:

    [\s\W]*([\w\s\d]+)?[\s\W]+([\w\s\d]+)?[\s\W]*

    пример:

    >>> p = r'[\s\W]*((?:\w*\s+)?\d+)?[\s\W]+((?:\w*\s+)?\d+)?[\s\W]*'
    >>> source = '''апрель 2007 - март 2014
    ... март 2007 - ...
    ... март 2007 -> 2014
    ... (2007 - год 2014)
    ... (2007 - 2014)'''
    >>> for line in source.split('\n'):
    ...     print(re.findall(p, line))
    ...
    [('апрель 2007', 'март 2014')]
    [('март 2007', '')]
    [('март 2007', '2014')]
    [('2007', 'год 2014')]
    [('2007', '2014')]


    Но всё-таки я бы порекомендовал поискать другое решение. Такой код абсолютно не читаемый.
    Ответ написан
    Комментировать
  • Почему вылазиет эта ошибка?

    DDDsa
    @DDDsa
    a = float(input())
    b = float(input())
    Ответ написан
    Комментировать
  • Как посмотреть значение переменных при запущенной программе в Питоне?

    DDDsa
    @DDDsa
    globals() и locals() в помощь:

    >>> a = 123
    >>> b = 'asd'
    >>> def test():
    ...     c = True
    ...     d = 55.36
    ...     print('GLOBALS:')
    ...     pprint(globals())
    ...     print('LOCALS:')
    ...     pprint(locals())
    ...
    >>> from pprint import pprint
    >>> test()
    GLOBALS:
    {'__annotations__': {},
     '__builtins__': <module 'builtins' (built-in)>,
     '__doc__': None,
     '__loader__': <class '_frozen_importlib.BuiltinImporter'>,
     '__name__': '__main__',
     '__package__': None,
     '__spec__': None,
     'a': 123,
     'b': 'asd',
     'pprint': <function pprint at 0x103ce9158>,
     'test': <function test at 0x101d62e18>}
    LOCALS:
    {'c': True, 'd': 55.36}
    >>>
    Ответ написан
    2 комментария
  • Не Запускает проект Python через консоль с ошибкой ModuleNotFoundError: No module named?

    DDDsa
    @DDDsa
    Файл, который вы запускаете должен находиться в корне проекта, иначе нет смысла в той структуре пакетов, которую вы создали. То есть, дерево должно быть такое:
    -chip8/
    -chip8/chip88/
    -chip8/chip88/interface.py
    -chip8/chip88/chip8.py
    -chip8/chip88/__init__.py
    -chip8/main.py


    Теперь у вас папка с проектом chip8, в ней основной файл main.py и один пакет chip88. Тогда в файле main.py импорт из chip8.py должен выглядеть следующим образом:

    from chip88.chip import *

    Кстати, import * — это антипаттерн, так лучше не делать. Импортируйте только то, что вы намерены использовать в этом модуле.

    Также обратите внимание, что я убрал заглавные буквы из всех названий файлов и папок. С заглавной буквы в питоне принято начинать только имена классов

    ***
    Что почитать.
    https://chrisyeh96.github.io/2017/08/08/definitive... — про импорты. Импорты в питоне только выглядят просто, на самом деле там есть важные нюансы, в которых лучше разбираться.

    https://www.python.org/dev/peps/pep-0366/ — пеп именно по вашему случаю. Полезно, чтобы понять, почему ваш вариант не работает.

    https://www.python.org/dev/peps/pep-0008/ — Ну и пеп8. Любой уважающий себя питонист должен знать этот документ на зубок. Тут всё про правило именования в питоне и другие принятые соглашения оформления кода и не только.
    Ответ написан
    1 комментарий
  • Как отобразить значение переменной в кавычках?

    DDDsa
    @DDDsa
    для Python 3.6 и выше

    print(f'"{c}"')
    Ответ написан
    Комментировать
  • Как в python подсчитать заголовки в тексте?

    DDDsa
    @DDDsa
    Где s — текст вашего вопроса:
    >>> re.findall('\n([\w\s]+?)(?=\n)', s)
    ['они могут быть как', 'Посадил дед репку', 'ПОСАДИЛ ДЕД РЕПКУ', 'Посадил Дед Репку']


    Оно?
    Ответ написан
    Комментировать
  • Как найти html тэги в txt файле?

    DDDsa
    @DDDsa
    Если любой тег, то вот так:
    r'<(\w+)([\s\S]+?)<\/\1>'
    При этом вернётся два значения, тег и его содержимое:
    >>> tables = re.findall(r'<(\w+)([\s\S]+?)<\/\1>', s)
    >>> tables
    [('table', ' id=1>\n    <tr>\n        <td>Some Text</td>\n    </tr>\n'), ('table', ' id=2>\n    <tr>\n        <td>Some Text</td>\n    </tr>\n')]


    Если нужно вытаскивать только тег table (или других точно не будет), тогда вот так:
    r'<table([\s\S]+?)<\/table>'

    Пример:
    >>> tables = re.findall(r'<table([\s\S]+?)<\/table>', s)
    >>> tables
    [' id=1>\n    <tr>\n        <td>Some Text</td>\n    </tr>\n', ' id=2>\n    <tr>\n        <td>Some Text</td>\n    </tr>\n']
    Ответ написан
    Комментировать
  • Какой оптимальный способ создания файлов?

    DDDsa
    @DDDsa
    Я бы сохранял разом. 3-4 тысячи строк — это сколько, 150КБ? Пусть даже 300КБ, нет никаких проблем подержать такой объём в памяти, не отвлекаясь сброс в файл, а потом сохранить разом.

    Процесс парсинга идёт, наверное, секунду от силы? Не заморачивайтесь, сохраняйте результаты по окончании.

    PS, конечно, следует правильно расставить обработку эксепшнов, если они возможны.
    Ответ написан
    Комментировать
  • Абсолютный нуб. Какими built-in functions пользоваться для базовой задачи на Python?

    DDDsa
    @DDDsa
    Вот вариант решения вашей задачи:

    animal = input('Enter an animal: ')
    
    try:
        input_colors = input('How many colors? ')
        num_colors = int(input_colors)
    except ValueError:
        print('%s is not a number' % input_colors)
        exit()
    
    colors = []
    for i in range(num_colors):
        colors.append(input('Color %s: ' % (i + 1)))
    
    for color in colors:
        print('%s %s' % (color, animal))
    Ответ написан
    Комментировать
  • Почему не получается построчно прочитать файл?

    DDDsa
    @DDDsa
    Во-первых, после in не нужно двоеточие.
    Во-вторых, в коде вы оба раза читаете не построчно, а посимвольно. read() возвращает строку со всем содержимым файла целиком. Вам нужен метод readlines(), он вернёт список строк файла.

    Но в python есть способ прочитать файл построчно, не загоняя его в память целиком, просто запустите цикл по открытому файлу for line in file.

    А лучше всего вот так:

    with open('test.txt', 'r') as f:
         for l in f:
                 print(l)
    Ответ написан
  • Как соединить списки по условию?

    DDDsa
    @DDDsa
    a = [[i, i*100] for i in range(15000)]
    b = [[i, i*110] for i in range(15000)]
    c = {}
    
    for i in a+b:
        c.setdefault(i[0], []).append(i[1:])


    Так, например?

    UPD: с точки зрения транжирства ресурсов наверное правильнее вместо for i in a+b сделать два цикла, для a и для b. Так мы не будем выделять память под новый бесполезный список только чтобы код смотрелся лаконичнее. Но 15000 подсписков — это, в общем, ерунда и особо заморачиваться не стоит.
    Ответ написан
    1 комментарий
  • Метод readline() - как прочитать случайные строки из txt-файла?

    DDDsa
    @DDDsa
    вместо
    msg['Subject'] = f.readline()[0:85] #строка создающая заголовок

    напишите
    msg['Subject'] = random.choice(f.readlines())[:85] #строка создающая заголовок
    Ответ написан
    3 комментария
  • Почему PyCharm не хочет выполнять код?

    DDDsa
    @DDDsa
    У вас множество перекрытий имён. Ваш собственный файл с кодом называется vk.py, вы импортируете модуль vk и потом объявляете свою переменную, которая опять называется vk.

    Скорее всего, проблема именно в конфликте имён.
    Ответ написан
    4 комментария
  • Почему не работает функция help в Python?

    DDDsa
    @DDDsa
    Потому что у вас python 2.7, скорее всего.
    help():
    Invoke the built-in help system. (This function is intended for interactive use.) If no argument is given, the interactive help system starts on the interpreter console. If the argument is a string, then the string is looked up as the name of a module, function, class, method, keyword, or documentation topic, and a help page is printed on the console. If the argument is any other kind of object, a help page on the object is generated.
    Ответ написан