• Как сделать, чтоб в моем компьютере и телефоне не лазили посторонние?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    От этого не избавиться. Вообще. Надо просто принять это и постараться не обращать внимания. Наплевать. Пусть хоть облазятся. И так и гугль и яндекс всё про вас знают. Одним больше, одним меньше… плевать. Пусть подавятся. Им в конце концов надоест, если вы реально плюнете и разотрете.
    Ответ написан
  • Почему отсутствует модуль discord.ext?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Видимо, вы поименовали какой-то ваш файл именем discord.py, а в нём нет объектов по имени ext. Переименуйте ваш файл (например, my_discord.py). Или папка с таким именем есть…
    Ответ написан
  • Как из базы данных выбрать данные и отправить на почту?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Одно из двух: либо добавить в базу поле datetime, либо порядковый номер с автоинкрементом. Первое для вас будет чуток проще.
    Ну а как написать, например, select с sort by и limit, и полученные им данные отправить в почту, это вы уж как-то нагуглите, чтоль.
    Ответ написан
    1 комментарий
  • Как условно (значение в столбце) искать подстроки в другом столбце в цикле python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Я тут накропал
    велосипедик на костылях
    import pandas as pd
    
    
    def get_pairs(keys: list, data: list) -> dict:
        """
        Подготовительная функция
        Раскладывает значения из data по ключам из key в порядке, как в key
        :param keys: ['foo', 'spam', 'foo', ...]
        :param data: [('foo', 'bar'), ('foo', 'baz'), ('spam', 'ham'), ...]
        :return: {'foo': ['bar', 'baz'], 'spam': ['ham'], ...}
        """
        inter_pairs = dict([(key, []) for key in set(keys)])
        while bool(len(data)):
            key, value = data.pop(0)
            inter_pairs[key].append(value)
        return inter_pairs
    
    
    def prepare_next_attr(key: str, value: str, descr: list) -> tuple:
        """
        Служебная функция
        Готовит очередной комплект атрибутов
        для вычисления следующего результата
        :param key:
        :param value:
        :param descr:
        :return: next_key, next_pair, next_descr
        """
        descr = [i.lower() for i in descr]
        next_key = f'{key.lower()}, '
        next_pair = f'{next_key}{value.lower()}'
        next_descr = descr.pop(0)
        return next_key, next_pair, next_descr
    
    
    def get_next_res_item(key: str, value: str, descr: list) -> str:
        """
        Служебная функция
        Готовит результат, сравнивая по Descr
        (тут подгонка if-ами под задание)
        :param key:
        :param value:
        :param descr:
        :return: результат для помещения в список результатов
        """
        next_key, next_pair, next_descr = prepare_next_attr(key, value, descr)
        if next_pair == next_descr:
            res_item = f'{key}: {value};'
        elif next_key in next_descr:
            res_item = f'{key};'
        else:
            res_item = f'{key}'
        return res_item
    
    
    def make_result(keys: list, inter_pairs: dict, descr: list) -> pd.Series:
        """
        Перебирает ключи, получает для каждого очередной результат,
        складывает результаты в pd.Series
        :param keys:
        :param inter_pairs:
        :param descr:
        :return: pd.Series с результатами
        """
        intermedia_result = []
        for key in keys:
            value = inter_pairs[key].pop(0)
            intermedia_result.append(
                get_next_res_item(key,
                                  value,
                                  descr)
            )
        return pd.Series(intermedia_result)
    
    
    if __name__ == '__main__':
        df1 = {
            'Descr': ["VALVE, PRESSURE", "pump ttf", "Valve, electrical", "Geeku, electrical",
                      "VALVE, OVERBOARD, BUTTERFLY"],
            'N_Product': ["VALVE", "PUMP", "VALVE", "GEEKU", "VALVE"],
        }
        df2 = {'N_Product': ["VALVE", "VALVE", "VALVE", "PUMP", "GEEKU"],
               'M_Product': ["PRESSURE", "qwerty", "", "", "ELECTRICAL"],
               }
        target = {
            'Descr': ["VALVE, PRESSURE", "pump ttf", "Valve, electrical", "Geeku, electrical", "VALVE, OVERBOARD, "
                                                                                               "BUTTERFLY"],
            'N_Product': ["VALVE", "PUMP", "VALVE", "GEEKU", "VALVE"],
            'Result': ["VALVE: PRESSURE;", "PUMP", "VALVE;", "GEEKU: ELECTRICAL;", "VALVE;"], }
        df1 = pd.DataFrame(df1)
        df2 = pd.DataFrame(df2)
        df_target = pd.DataFrame(target)
    
        df2_list = list(zip(df2['N_Product'], df2['M_Product']))
        pairs = get_pairs(df1['N_Product'], df2_list)
        result = make_result(df1['N_Product'], pairs, df1['Descr'])
        df1['Result'] = result.values
    
        print(df1)
        print(all(df1 == df_target))

    Он вроде формально решает задачу... но опять же формально это не ответ на вопрос, а подгонка под целевое задание, причем совсем не pandas-way. Ну, чем могу...
    Ответ написан
    Комментировать
  • ПО для компьютерных клубов 2022?

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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Можно вот так:
    def make_row(size):
        global k
        old_k = k
        k = old_k + size
        return [*range(old_k, k)]
    
    
    if __name__ == '__main__':
        size = int(input('введите размерность массива:'))
        k = 0
        print([make_row(size) for i in range(size)])
    Ответ написан
    Комментировать
  • Как исправить ошибку в присвоении переменной?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    в строке
    for code in store:
    вы перебираете ключи словаря.
    затем, получив очередной ключ в переменную code, вы в строке
    price_1 = code['price']
    обращаетесь к тому, что находится в code, и пытаетесь найти элемент его по индексу "price".
    Но в code находится ключ, и он - строка. Об этом вам и говорит ошибка - так со строкой работать нельзя.

    Для того, чтобы правильно всё сделать, можно попробовать так:
    for name in goods:
        code = goods[name]
        print('Название товара:', name, '    Его код:', code)
        for code in store:
            price_1 = store[code][0]['price']
            quantity_1 = store[code][0]['quantity']
            summ = price_1 * quantity_1
            print('полная стоимость товара:', summ)

    или так:
    for name in goods:
        code = goods[name]
        print('Название товара:', name, '    Его код:', code)
        for code, value in store.items():
            price_1 = value[0]['price']
            quantity_1 = value[0]['quantity']
            summ = price_1 * quantity_1
            print('полная стоимость товара:', summ)
    Ответ написан
    Комментировать
  • Дан хэш и дан промежуток с 1 до 999999 необходимо найти число которое имеет одинаковый хэш?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Попытался сделать так, как понял задачу. В заданном диапазоне ничего не нашлось :(
    Надо проверить условия и уточнить, есть ли ответ вообще.
    Велосипедик на костылях
    import hashlib
    
    from random import randint
    
    ALGS = ('sha3_512', 'sha384', 'md5', 'shake_128', 'sha256', 'sha3_256', 'sha3_224', 'sha512', 'blake2s', 'sha3_384', 'sha224', 'shake_256', 'blake2b', 'sha1')
    first = 1
    last = 999999
    
    def prepare_target(target):
        if not isinstance(target, bytearray):
            if not isinstance(target, str):
                target = str(target)
            target = target.encode()
        return target
    
    
    def calc_hash(alg, target):
        target = prepare_target(target)
        if alg in ALGS:
            command = f'hashlib.{alg}({target})'
            try:
                return eval(command).hexdigest()
            except TypeError:
                    pass
    
                
    def create_test_target(target_hash):
        if target_hash is not None:
            return '1'*len(target_hash)
        
        
    def detect_hash_alg(target_hash):
        result_algs = []
        for alg in ALGS:
            test_target = create_test_target(target_hash)
            my_hash = calc_hash(alg, test_target)
            if my_hash is not None:
                lenght = len(my_hash)
                if lenght == len(target_hash):
                    result_algs.append(alg)
        return result_algs
    
    
    def find_target(target_hash):
        stop = False
        algs = detect_hash_alg(target_hash)
        print(f'подходящие алгоритмы: {algs}')
        for i in range(first, last+1):
            for alg in algs:
                first_hash = calc_hash(alg, i)
                if first_hash == target_hash:
                    print(f'founded\t{i} {alg}')
                    stop = True
                    break
                    
            if stop:
                break
        if not stop:
            print(f'for {target_hash} not found')
    
    
    if __name__ == '__main__':
        target_hash = '127b1f0d6253fdfe78d806497217f2454a30e124d1f655b6c2a8c68f6dc7a7061993557b50252f253220a3a059142290cd0c2c467c0ee5bfbbd6a8a538c5d040'
    
        
        
        test = randint(first, last+1)
        alg = 'sha256'
        test_hash = calc_hash(alg, test)
        print(test_hash)
        print(f'target \t{test} {alg}')
        
        print('тестовый поиск:')
        find_target(test_hash)
        print('боевой поиск:')
        find_target(target_hash)
    Ответ написан
    Комментировать
  • Стоит ли строить локальную сеть на базе коаксильного телевизионного кабеля?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Есть вариант - базовая станция wifi mesh НАПРОТИВ дома (на заборе/столбе/соседнем доме), и в каждой комнате mesh точка около окна.
    Естественно, это должно быть что-то вроде ubiquity и стоить будет так, что легче ремонт заново сделать.
    Ответ написан
    Комментировать
  • Счетчик работает, а команды COGS перестали. Что делать?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Счетчик работает, а команды COGS перестали. Что делать?

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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Во!
    Чудовищно, но в точности соответствует условию.
    def more_or_less_one(number: int) -> str:
        return str(not any([abs(int(str(number)[x]) - int(str(number)[x+1]))-1 for x in range(len(str(number))-1)]))
                
    data = 234543
    print(more_or_less_one(data))
    data = 234564
    print(more_or_less_one(data))
    Ответ написан
    Комментировать
  • Как подключить к роутеру два компьютера?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Рекомендую начать с блока питания роутера. В половине случаев дело в питании. Замените на заведомо исправный с достаточной мощностью и не старый.
    Если с питанием порядок, проверяйте на перегрев чипа. Можно приклеить радиатор со старой мат.платы или прикрутить вентилятор малооборотный.
    Если ни первое ни второе не поможет - попробовать перепрошить, может глюка прошивки.
    Иначе, вероятнее всего, замена роутера.
    Ответ написан
  • Что такое mod_security и mod_evasive?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Вопрос легко гуглится. Напрасно вы ленитесь самостоятельно искать информацию.
    Итак, вот что
    нагуглилось
    Если вы хотите легко контролировать блокировку конкретными запросами страниц или вам нужна быстрая и простая в настройке защита DOS, включите mod_evasive.

    Если вам нужно больше контроля над каждым аспектом блокировки DOS-атак и того, что происходит во время блокировки, то вам действительно нужен только mod_security. Если все, что вас волнует, это DOS-атаки, то mod_security, вероятно, перебор.

    С точки зрения DDoS-атаки, я думаю, что оба инструмента будут одинаково полезны с настройками по умолчанию, так как каждый из них хранит хэш-таблицу по IP-адресу.

    Если вы хотите написать конкретные правила для mod_security, то нет предела тому, как и что вы блокируете, и в том числе вы можете воссоздать функциональность mod_evasive, если считаете, что вам это нужно.
    Ответ написан
    1 комментарий
  • Можете посоветовать базу словоформ?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Насчёт именно базы не знаю, но проблему лемматизации успешно решает фреймворк natasha. Использовал для анализа документов. У неё довольно низкоуровневый интерфейс, но если почитать и посмотреть примеры - разобраться можно.
    Ответ написан
  • Как может быть реализована гибридная инфраструктура в образовательной организации?

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

    Или, к примеру, столовая. Штатно завтраки детям готовят в своей столовой, а когда голодные ученики всё съели, то к делу подключается городская сеть предприятий быстрого питания и привозит в школу ещё еды.

    Как-то так.
    Ответ написан
    2 комментария
  • Что нужно сделать, чтобы рекурсия работала для каждого элемента массива?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    diction = {'city': ['zoo', 'park', 'cafe'], 'zoo': ['tiger', 'zebra'],
                        'park': ['squirrel', 'dog'], 'cafe': 'people'}
    
    
    def detect_root(in_dict):
        for key in in_dict.keys():
            if key in set(in_dict.keys()) - set(in_dict[key]):
                return key
    
    
    def detect_person_place(in_dict, person):
        for place in in_dict[detect_root(in_dict)]:
            if person in in_dict[place]:
                return place
    
    
    person = 'people'
    print('Yes' if person in diction.values() else 'No')
    if person in diction.values():
        print(detect_person_place(diction, person))

    Но рекурсию тут не знаю как применить… ну можно, но это какое-то извращение.
    Ответ написан
    Комментировать
  • Как за 2 минуты зайти в 100 дискорд аккаунтов, если физически это нельзя успеть сделать?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Нанять 100 исполнителей.
    Ответ написан
    Комментировать
  • Не парсит дальше 3й страницы как исправить ???

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Не парсит дальше 3й страницы ???

    Да, не парсит дальше 3й страницы.
    Ответ написан
    Комментировать
  • Сколькими ходами кубик Рубика возвращается в изначальное положение?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Вопрос элементарно гуглится, даже в википедии.
    Ответ - 20 ходов в общем случае, 26 ходов в случае, если за ход считаем поворот грани на 90 градусов.
    Ответ написан
  • Не заканчивается цикл?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Не заканчивается цикл?

    Да, не заканчивается.
    См.п.3.6
    Ответ написан
    Комментировать