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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    А можно сколхозить в несколько строчек свой
    велосипедик...
    class KiloNum:
        def __init__(self, value, round_val=None):
            if any([isinstance(value, float), isinstance(value, int)]):
                if round_val is None:
                    round_val = 3
                self.round_val = round_val
                self.value = value
                self.kilo = self.make_value(3)
                self.mega = self.make_value(6)
                self.giga = self.make_value(9)
    
        def make_value(self, key):
            numbers = {3: 'K',
                       6: 'M',
                       9: 'G'}
            return ''.join([str(round(self.value / 10 ** key, self.round_val)), numbers[key]])
    
        def __repr__(self):
            return f'{myvalue.kilo},\n{myvalue.mega},\n{myvalue.giga}'
    
    
    myvalue = KiloNum(34500101112)
    print(myvalue)
    print(myvalue.giga)
    Ответ написан
    1 комментарий
  • Как распарсить первый 'слой' строки 'struct'?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Я не приходя в сознание наклепал свой велосипед на костылях, он делает что-то похожее.
    Простите за чудовищно кривой код... мне очень стыдно.
    spoiler
    import re
    from pprint import pprint
    
    
    def replace_old_struct(struct):
        changes = {'struct<': 'dict(',
                   'array<': 'list(',
                   '>': ')',
                   ':': ': ',
                   ',': ', '}
        for key in changes:
            struct = struct.replace(key, changes[key])
        return struct
    
    
    def set_mark(struct, patterns):
        for pattern in patterns:
            regex = re.compile(pattern)
            words = set(regex.findall(struct))
            for word in words:
                repl = f"'{word}'"
                struct = struct.replace(word, repl)
        return struct
    
    
    def pair_rbracket(struct: str, rbracket):
        counter = 0
        for number, symbol in enumerate(struct):
            if symbol == '(':
                counter += 1
            elif symbol == ')':
                counter -= 1
            if counter < 0:
                return struct[:number] + rbracket + struct[number + 1:]
    
    def pair_lbracket(struct, lbracket):
        return f'{lbracket}{struct[1:]}'
    
    def pair_brackets(struct, struct_type='dict'):
        changes = {'dict': {'(': '{', ')': '}'},
                   'list': {'(': '[', ')': ']'}}
        lbracket = changes[struct_type]['(']
        rbracket = changes[struct_type][')']
        if struct[0] == '(':
            struct = pair_lbracket(struct, lbracket)
            struct = pair_rbracket(struct, rbracket)
        return struct
    
    
    def set_struct(struct, struct_type):
        structs = struct.split(struct_type, 1)
        structs[1] = pair_brackets(structs[1], struct_type)
        return ''.join(structs)
    
    
    def replace_struct(struct, struct_type):
        for _ in range(struct.count(struct_type)):
            struct = set_struct(struct, struct_type)
        return struct
    
    
    if __name__ == '__main__':
        data = ('food',
                'struct<Milk:array<struct<id:string,type:string>>,Oil:string,batter:array<struct<id:string,type:string>>>')
        my_struct = data[1]
        patterns = [r"([\w]+)\:", r"\: ([\w]+)\)"]
        struct = set_mark(replace_old_struct(my_struct), patterns)
        struct_types = ['dict', 'list']
        for struct_type in struct_types:
            struct = replace_struct(struct, struct_type)
        struct = eval(struct)
        pprint(struct)

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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
  • "Лишние" лог-данные в python-скрипте при выполнении через командную строку Windows. Можно ли убрать?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Путей решения два:
    • Перенаправить вывод ошибок, предостережений и всяких сообщений куда-либо мимо консоли;
    • Отключить вывод этих сообщений.


    Вот мои потуги поотключать всё что можно.
    os.environ['WDM_LOG_LEVEL'] = '0'
    warnings.filterwarnings("ignore", category=DeprecationWarning)
    chrome_options = Options() chrome_options.add_argument('--headless')
    browser = webdriver.Chrome(ChromeDriverManager(print_first_line=False).install(), options=chrome_options)
    Ответ написан
  • Почему не работает поиск уникального числа в списке?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Попробуйте по-другому. Получите уникальные элементы списка посредством множества (set) и затем посредством метода .count() для списка посчитайте, сколько раз встречается каждый уникальный элемент из множества в вашем списке. Элементы, для которых .count вернёт 1, и есть уникальные.
    def print_unic_elements(arr):
        [print(i) for i in set(arr) if arr.count(i) == 1]
    Ответ написан
  • Как менять прокси для каждого запроса при парсинге?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    zasara, за вас тут делать не будут, скорее всего. Вам хорошо бы разобраться с рекомендованными Влад Григорьев типами, методами и функциями, попробовать сделать код с их использованием.

    Коротко говоря: при помощи dict, list, tuple, zip и for можно:
    сложить все исходные адреса проксей в список;
    В ходе обработки одной функцией get пройтись по списку и полученные результаты можно затем при необходимости либо zip-ом сцепить с исходным списком, либо в словарь, либо ещё как-то, в зависимости от дальнейшей цели.

    Основная проблема в том, что вы не понимаете основ, а без них вам дальше далеко не уйти. Изучайте python.
    Ответ написан
  • Почему бот не работает при запуске функции?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Полагаю, программа завершается без сообщений об ошибках потому, что автор программы подавил все ошибки. Типичная ошибка - подавлять ошибки без обработки.
    Ответ написан
    Комментировать
  • Как прочитать dict?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    У вас словарь из ключа и значения. В качестве значения у вас экземпляр класса pyrogram.raw.types.ChannelForbidden с определенными в круглых скобках параметрами. Среди этих параметров у вас есть id.
    Но получить этот параметр в лоб нельзя. Он для этого не предназначен.

    Вот если бы raw.update возвращал бы строку, её можно было бы распарсить. Но по вашему примеру он возвращает словарь с экземпляром класса в качестве значения…

    В принципе, если бы мы точно знали бы, что ключ словаря всегда равен id, можно было бы как-то так:
    data = {1448413438: dict(id=1448413438, access_hash=8335995624985435932, title='N', broadcast=True, megagroup=False)}
    keys = [*data.keys()]
    print(data[keys[0]])

    Но мы не знаем точно, всегда ли id равно ключу…
    Ответ написан
    Комментировать
  • Существуют ли какие-нибудь фреймворки для работы с Selenium Python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Для старого selenium были обертки типа elementium - немного упрощали работу.
    Но сейчас 4-й selenium поменялся, и возможно и не нужно обёрток.
    Ответ написан
    Комментировать
  • Какая разница между двумя списками?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Разница в том, что это разные объекты. Соответственно, при внешней похожести ты перебираешь элементы разных составных объектов. В первом случае ты перебираешь элементы списка list_of_data, а во втором - элементы производного списка.
    Это, на мой взгляд, основное и существенное отличие.
    Ответ написан
    2 комментария
  • Как вывести многострочные переменные в одну строку в python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Исправил
    алфавит
    A = """  
      A  
     A A 
    A   A
    AAAAA
    A   A
    A   A
    A   A
    """
    
    B = """
    BBBB 
    B   B
    B   B
    BBBB 
    B   B
    B   B
    BBBB 
    """
    
    C = """
     CCC 
    C   C
    C    
    C    
    C    
    C   C
     CCC 
    """
    
    D = """
    DDDD 
    D   D
    D   D
    D   D
    D   D
    D   D
    DDDD 
    """
    
    E = """
    EEEEE
    E    
    E    
    EEE  
    E    
    E    
    EEEEE
    """
    
    F = """
    FFFFF
    F    
    F    
    FFF  
    F    
    F    
    F    
    """

    и накарябал печаталку:
    import alphabet_ascii as alfabet_ascii
    
    alph = {'A':alfabet_ascii.A,
    'B': alfabet_ascii.B,
    'C': alfabet_ascii.C,
    'D': alfabet_ascii.D,
    'E': alfabet_ascii.E}
    
    def make_symbols(symbols):
        lines = []
        for number, _ in enumerate(alph['A'].splitlines()):
            line = [alph[symbol].splitlines()[number] for symbol in symbols]
            line = ' '.join(line)
            lines.append(line)
        text = '\n'.join(lines)
        return text
    
    print(make_symbols('ABCDE'))
    Ответ написан
    1 комментарий
  • Какое регулярное выражение нужно использовать?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Можно так:
    import re
    word = 'Бб-01-21оп'
    regex = '([\d]{2})оп'
    print(re.findall(regex, word)[0])

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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    import random
    previous = ''
    a = ''
    for i in range(15):
        while a == previous:
            a = random.choice(["вперед", "назад", "вверх", "вниз"])
        previous = a
        print(a)
    Ответ написан
    3 комментария
  • Как убрать дробную часть, не округляя число?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    «В лоб» можно так:
    data = [0.15771428571428572,
    0.20152380952380952,
    0.19123809523809523]
    for i in data:
        i = (i // 0.1) * 0.1
        print(i)
    Ответ написан
    Комментировать
  • Как в discord_slash добавить кнопки на Python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Судя по ошибке, код пытается обратиться к объекту component как к словарю, а там - список.
    Почему так происходит? Возможно, тут components=[row]лишние квадратные скобки.

    Возможно, функция create_actionrow(btns) должна возвращать другой тип (сейчас возвращает список чего-то, надо посмотреть внимательно).
    Ответ написан
  • Как получить данне с сайта с помощью BeautifulSoup?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Ответ


    data = '''
    <div class="catalog-grid catalog-grid_unpadding-mobile catalog-grid_by3 rightside ">
                    <div class="catalog-grid__item"><article class="product-snippet"itemscope itemprop="itemListElement" itemtype="http://schema.org/Product" >
        <button class="product-snippet__favorite product-card__favorite product-card__favorite"
                data-id="124852">
    
            <span>
    <svg width="24" height="24">
        <use xlink:href="/static/local/assets/sprite.svg?v=4#heart"></use>
    </svg>
    </span>        <span class="product-card__favorite_bin">
    <svg width="24" height="24">
        <use xlink:href="/static/local/assets/sprite.svg?v=4#bin"></use>
    </svg>
    </span>    </button>
    
        <!-- TOP PART -->
        <div class="product-snippet__top">
    
            <div class="product-snippet__right">
                <meta itemprop="sku" content="124852">                            <span itemprop="brand" itemscope itemtype="http://schema.org/Brand">
                        <meta itemprop="name" content="Colterenzio">                </span>
    
                <!-- ID -->
                <div class="product-snippet__id" data-value-group-id="132655"
                     data-value-id="108038">
                    <span>Артикул:</span>
                    124852            </div>
                <!-- #ID -->
                <!-- RATINGS -->
            <div class="product-snippet__ratings">
            <!-- STARS -->
                        <div class="product-snippet__ratings-item">
    
    <svg width="12" height="12">
        <use xlink:href="/static/local/assets/sprite.svg?v=4#star"></use>
    </svg>
                    <span>4.8</span>
                </div>
    
    
                    <!-- #STARS -->
    
            <!-- GREEN SELECTIONS -->
                    <!-- #GREEN SELECTIONS -->
    
    
                </div>
    <!-- #RATINGS -->
    
                <!-- NAME -->
                <a href="/catalog/product/colterenzio_pfefferer_2020_075/"
                   data-page="1"
                   data-value-group-id="132655"
                   data-value-id="108038"
                   class="product-snippet__name js-dy-slot-click">
                    Вино Pfefferer, Colterenzio, 2020&nbsp;г.            </a>
                <meta itemprop="name" content="Вино Pfefferer, Colterenzio, 2020&nbsp;г.">            <!-- #NAME -->
                                <!-- DESC -->
                    <div class="product-snippet__desc">
                        <a href="/catalog/vino/filter/country-italiya/">Италия</a>, <a href="/catalog/vino/filter/color-beloe/">белое</a>, <a href="/catalog/vino/filter/sugar_type-polusukhoe/">полусухое</a>, <a href="/catalog/vino/filter/volume-0_75/">0.75&nbsp;л.</a>                </div>
                    <!-- #DESC -->
                            <!-- DETAIL -->
                <div class="product-snippet__detail">
    
    
                                        <div class="tag-stock product-snippet__stock-part">
                            <div class="tag-stock__buy-price-sale-link">
                                <div class="tag-stock__icon-wrap">
                                    <span class="tag-stock__buy-price-sale-icon">
    <svg width="19" height="19">
        <use xlink:href="/static/local/assets/sprite.svg?v=4#sale"></use>
    </svg>
    </span>                                <div class="tag-stock__alert">
                                                                            <div class="tag-stock__alert-title">Вы обратились по адресу: у нас такого много</div>
                                        <p class="tag-stock__alert-descr">
                                                                                </p>
                                                                                <div class="tag-stock__alert-link-wrap">
                                                <a class="tag-stock__alert-link" href="/stock/vy-obratilis-po-adresu-u-nas-takogo-mnogo/"
                                                    >
                                                    Подробнее</a>
                                            </div>
                                                                        </div>
                                </div>
                                <span class="tag-stock__buy-price-sale-text">Участвует в акции</span>
                            </div>
                        </div>
    
    
                                        <!-- INFO -->
                        <div class="product-snippet__info">
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Страна:</span>
    
                                                                                                        <a href="/catalog/vino/filter/country-italiya/">Италия</a>
                                                                </div>
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Цвет:</span>
    
                                                                                                        <a href="/catalog/vino/filter/color-beloe/">белое</a>
                                                                </div>
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Сахар:</span>
    
                                                                                                        <a href="/catalog/vino/filter/sugar_type-polusukhoe/">полусухое</a>
                                                                </div>
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Объем:</span>
    
                                                                                                        <a href="/catalog/vino/filter/volume-0_75/">0.75&nbsp;л.</a>
                                                                </div>
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Виноград:</span>
    
                                                                    <a href="/catalog/vino/filter/grape-muskat_zheltyy/">мускат желтый 100%</a>                                                            </div>
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Производитель:</span>
    
                                                                                                        <a href="/catalog/vino/filter/manufacturer-colterenzio/">Colterenzio</a>
                                                                </div>
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Регион:</span>
    
                                                                                                        <a href="/catalog/vino/filter/region-trentino_alto_adidzhe/">Трентино-Альто Адидже</a>
                                                                </div>
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Стилистика:</span>
    
                                                                                                        белое - яркое, из ароматических сортов винограда                                                            </div>
                                                </div>

    '''
    from bs4 import BeautifulSoup
    
    soup = BeautifulSoup(data, 'html5lib')
    product_data = soup.find(class_="product-snippet__info") #  выбрал этот класс, так как именно в нём отображена модель объекта - это видно глазами. 
    #  там внутри однотипные элементы, и их будем далее перебирать. 
    
    title = []
    for number, item in enumerate(product_data): #  тут enumerate не обязательно, я его поместил, чтобы когда буду разбираться, смотреть, к какому полю из полей product_data по номеру обращается скрипт. Можно убрать number и enumerate. 
        product_tds = item.find("a") #  нахожу следующий тег <a>
        if hasattr(product_tds, 'text'): #  среди найденных объектов у некоторых есть атрибут «text», у других его нет. Где его нет - пропускаем, где есть - складываем в список
            title.append(product_tds.text)
    print(' '.join(title)) #  печатаем найденные и сложенные в список title тексты через пробел.


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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    import random
    
    def get_random_int():
        return random.randint(5, 10)
    
    
    def get_random_a_b():
        return get_random_int(), get_random_int()
    
    
    a, b = get_random_a_b()
    while True:
        if a > b:
            result = a - b
            sign = '-'
        else:
            result = a + b
            sign = '+'
        sent = '\n'.join(['', str(a), sign, str(b), 'Ваш ответ: '])
        if int(input(sent)) == result:
            print("Правильно!")
        else:
            print(f"Ошибка! Правильный ответ: {result}")
        a, b = get_random_a_b()
    Ответ написан
    Комментировать
  • Как правильно спарсить шаблон?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Нагляднее так:
    from datetime import datetime
    
    now = datetime.now()
    prefix = 'error'
    error = 'сама ошибка'
    error_time = now.strftime("%d.%m.%Y, %H:%M:%S")
    entry = f'[{prefix}] {error_time}: {error}'
    
    print(entry)
    Ответ написан
    Комментировать
  • Почему не работает цикл while в python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Потому что True это 1, а не 10. Но приведение 10 к булеву значению даст 1.
    i = 10
    while bool(i) == True:
        print(i)

    Во втором варианте оно неявно приводится интерпретатором, поскольку while принимает на вход только булево значение.
    Ответ написан
    2 комментария
  • Где тут лишние табы/пробелы, или что это за ошибка?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Нельзя одновременно использовать табы и пробелы. Где они - он же пишет тебе, в 14 строке. И кстати ещё в 8-й.
    Ответ написан
    2 комментария