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

    MinTnt
    @MinTnt
    Максимум который возможен, это лишь превратить его в объект другого типа, который имеет возможность len().
    print(len([*a2]))

    Ну а так, у итераторов нету методов, для получения его длины.
    Ответ написан
    Комментировать
  • Инициализируется ли строка во время ошибки?

    MinTnt
    @MinTnt
    Если рассматривать всё не как присваивание, а как "связывание" имени переменной с объектом.
    И подать саму запись присваивания в немного ином виде.
    globals().__setitem__('int_text', int(input("it's just an instance, bro")) )

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

    Т.е., если всё рисовать в некой последовательности действий.
    То сначала производится инициализация объектов, что переданы функции.
    1) Передан атрибут в виде объекта строки - принято
    2) Передаются атрибут в виде функции - ожидание результата. Как только получит результат от функций, пойдет дальше, или же не пойдёт в случае ошибки. И запустится функция присваивания.
    3). В механике функции присваивания, имя переменной связывается с уже поданным на блюдичке объекте.

    А вот с функциями содержащими рекурсию всё интереснее. К примеру, если написать x = x, не выйдет вызвать рекурсию, так как для начала нужно получить объект x. А вот если записать функцию, к примеру x = lambda: x(). Система сразу же может получить готовый объект функции. А так как его содержимое "инициализируется" лишь при непосредственном использовании. То когда мы уже используем саму функцию по имени переменной, то когда при выполнении функция встречает x(), она свободно выполняет её, так как имя переменной уже создано на локальном уровне, и связано с объектом.

    И только после того, как полностью будет готов нужный объект, оно свяжет переменную с ним.

    P.s. С реальностью не сильно сходится (имею ввиду представление всего, как функции), но механика похожая. Просто мне проще всё представлять как функции.
    Ответ написан
  • Как модифицировать регулярное выражение, в котором все + перед гласной заменяются на пустоту, кроме исключительных ситуаций?

    MinTnt
    @MinTnt
    import re
    
    s = '''х+елло++у
    хелло+у
    л+и+шние зна+ки н+а д+о удаля+ть
    но+ зде+сь всё+ ве+рно 2 +++ 2 = 4
    '''
    print(re.sub(r'(?i)(([^аеёиоуыэюя\s])\++)', r'\2' ,s))
    Ответ написан
    Комментировать
  • Как сделать добавление товара в корзину?

    MinTnt
    @MinTnt
    Ну, можно использовать call.message.text, и парсить нужную информацию оттуда, или же можно напрямую указывать всё нужное в callback
    Ответ написан
    Комментировать
  • Как вывести кусок тескта которое окружает данное слово?

    MinTnt
    @MinTnt
    s = """Уже при жизни Василия Босоногого вышли две брошюры, посвящённые его биографии. Фотографии, запечатлевшие внешний облик странника, были сделаны крупными фотографами того времени, среди которых выделяются Карл Булла и сотрудники фотоателье «К. Е. фон Ган и К», работавшего по заказам императорской семьи. В начале XXI века вышла книга и появилось несколько статей о жизни и взглядах Василия Босоногого."""
    
    import re
    
    search = 'В начале XXI'
    n = 100
    srl = '[\w\W]{0,'+str(n)+'}'
    print(re.findall(srl+search+srl, s))
    Ответ написан
    Комментировать
  • Как сверить два массива?

    MinTnt
    @MinTnt
    Ну...
    table = [
        [1, 0, -1],
        [-1, 0, 0],
        [-1, 0, 0]
    ]
    tb = [[0, 0, 0], [0, 1, 0], [1, 1, 0], [1, 1, 1]]
    
    
    n = [[i for k,i in enumerate(x) if k not in d] in [[i for k,i in enumerate(l) if k not in d] for l in tb] for x, d in zip(table, [[k for k,i in enumerate(x) if i==-1] for x in table])]
    print(n)
    Ответ написан
    Комментировать
  • Как выписать input в строчку с print в python?

    MinTnt
    @MinTnt
    Ну... Два основных способа:
    m = input('Возраст: ')
    print('Вам ' + m)
    
    print('Возраст: ', end='')
    m = input()
    print('Вам ' +m)
    Ответ написан
    Комментировать
  • Написал код на питоне по созданию телеграмм бота. Когда запускаю, ошибок никаких нет и бот работает корректно но погоду не отправляет. В чем проблема?

    MinTnt
    @MinTnt
    Ну скорее всего, ошибка может быть из-за того, что у вас в ссылке для гет запроса, т.е. f-строке,
    f"http://api.openweathermap.org/data/2.5/weather?q={message.text}&appid={TOKEN}&units=metric"
    присутствует переменная, TOKEN, которая нигде ранее не инициализирована. Из-за чего будет сразу выскакивать ошибка, в следствии чего сразу запускаться часть except
    Ответ написан
  • Как мне из функции Thread2() вызвать функцию main() из функции Thread1()?

    MinTnt
    @MinTnt
    Вообще, зачем добавлять эту строчку.
    Thr1 = Thread(target=Thread1)
    Если функция Thread1 как сама, ничего не выполняет, поток завершиться спустя пару секунд после запуска.

    Ну а вообще. Если нужно просто вызвать функцию main из первой, то
    1) Добавьте в конец функции Thread1 строчку
    Thread1.main = main
    И после этого, один раз в основном коде, используйте Thread1(), это обновит её атрибуты

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

    MinTnt
    @MinTnt
    Если relative import прям ни в какую не хочет работать, то остаётся два способа:
    1). Изменить название импортируемого файла, с исполнительного, на обычный.
    2). Использовать "подобие" импорта. Т.е. считать код из файла, далее запустить как исполняемый в объекте (чтоб уменьшить некоторую конфликтность), и далее из объекта достать нужный атрибут.
    file_to_import, module_to_import = 'parser.py', 'Web_parser'
    Web_parser = getattr(type('', (object,), [x() for x in [lambda: (exec([(code.read(), code.close()) for code in [open(file_to_import, 'r')]][0][0]), locals())[-1]]][0]), module_to_import)

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

    MinTnt
    @MinTnt
    main = "In $var$my$rav$ have a number"
    
    import re
    
    main = re.sub(r'\$var\$(\w+)\$rav\$', lambda x: x.group(1).upper() ,main)
    print(main)
    Ответ написан
    Комментировать
  • PyQiwip2p как сделать создание новой ссылки?

    MinTnt
    @MinTnt
    Вы генерируете счёт к оплате в коде лишь единожды
    new_bill = p2p.bill(amount=1, lifetime=60)

    Нужно сделать создание чека, для каждого вызова функции
    Ответ написан
    1 комментарий
  • Как перемешать между собой слова фразы?

    MinTnt
    @MinTnt
    letter = 'Если плоскость проходит через данную прямую, параллельную другой плоскости, и пересекает эту плоскость, то прямая пересечения плоскостей параллельна данной прямой'
    
    def chunk(st, lns):
    	import random
    	mv = st.split()
    	mv = [' '.join(mv[x:x+lns]) for x in range(0, len(mv), lns)]
    	return ' '.join(random.sample(mv, len(mv)))
    	
    print(chunk(letter, 3))
    Ответ написан
    Комментировать
  • Как убрть служебный импорт?

    MinTnt
    @MinTnt
    from . import warnings

    Вроде, так
    Ответ написан
    Комментировать
  • Почему я не могу создать список внутри списка?

    MinTnt
    @MinTnt
    Максимум, если нужно всё оставить как есть. То это только моржик с версии 3.8+
    lists = [
        list1:= [
            "item1",
            "item2",
            "item3"
        ]
    ]
    Ответ написан
    Комментировать
  • Как повторить команду условия?

    MinTnt
    @MinTnt
    random.choices(list, weights=[25, 25, 25, 25] if name==list1 else [10, 10, 30, 50], k=1)[0]
    Ответ написан
    Комментировать
  • Почему Python ругается на двоеточие после цикла?

    MinTnt
    @MinTnt
    quantity = int(input("Введите кол-во чисел: "))

    Добавьте скобку в конце.
    Ответ написан
    1 комментарий
  • Каким образом можно сократить код?

    MinTnt
    @MinTnt
    Если нужно именно сократить, без сильных изменений в самом коде... то придётся пожертвовать временем исполнения...
    (locals().update({'k': 1, 'a': []}), [(a.append([]), [(a[i].append(k), loc.update({'k': k+1})) for j in range(3)]) for loc in [locals()] for i in range(3)], [print(*a[i]) for i in range(3)])

    ...но в принципе это всё возможно.

    Ну а вообще, чтобы сократить написанное, можно
    a = [[k for k in range(x, x+3)] for x in range(1, 10, 3)]
    for i in a:
        print(*a)
    Ответ написан
    Комментировать
  • Как распарсить и отсортировать имена файлов?

    MinTnt
    @MinTnt
    a = ['file1.txt', 'file10.txt', 'file2.txt']
    print(sorted(a, key=lambda x: int(x[4:-4])))

    Пояснение по коду. sorted() для строк - сортирует их по алфавиту. Т.е., как оно сортирует АБ АВ БА, так само и для цифр в строке, сначала то что начинается на 1, потом то что на 2 и тд.

    Так что для правильной сортировки, подаваемое число-строку нужно из формата строки переводить в число. А там как мы знаем стандартный вид строк, то просто пользуемся срезом [4:-4]
    Ответ написан
    7 комментариев
  • Как узнать количество игроков на сервере?

    MinTnt
    @MinTnt
    Есть такая стандартная библиотека, под названием socket. Через неё это можно реализовать

    https://docs.python.org/3/library/socket.html
    Ответ написан
    Комментировать