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

    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)
    Ответ написан
    Комментировать
  • Счетчик работает, а команды 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 Куратор тега 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))

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

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

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

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

    Да, не заканчивается.
    См.п.3.6
    Ответ написан
    Комментировать
  • Ввод данных luks pexpect?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Почитайте про передачу pexpect специальных символов. Мне думается, это ваш случай.
    Ответ написан
  • Не работает mainbank.json python |?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Не работает mainbank.json python |?

    Да, не работает. См.п.3.6.
    Ответ написан
  • Python, проблема вывода значения списка (не могу объяснить точнее в чем проблема, я pre-pre-pre junior developer)?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Вопрос кажется простым. Но ответ потребует объяснения большого количества разнообразных принципов и может превратиться в целый цикл лекций.
    Набросаем путь освоения:
    1. Объектная модель языка Python
    2. Структуры данных вообще и языка Python в частности
    3. ООП вообще и понятие классов, экземпляров, атрибутов, методов, инициализации экземпляров в частности.
    4. Реализация конкретного класса User в конкретной версии библиотеки.
    5. Осмысление места, роли этого класса, его атрибутов, причин такой реализации, последствий для программирования бота;
    6. Вероятно, базы данных, их связь с классами; поля БД, их связь с атрибутами класса;
    7. Понимание, как всё это в целом работает, какие пути есть для получения искомых сведений и какие последствия могут возникнуть для работы бота, канала, Телеграма и его пользователей при работе с этими сведениями.


    Вот вам пример простейшей реализации:
    class User:
        def __init__(self, a, b, c):
            self.a = a
            self.b = b
            self.c = c
    
        def __repr__(self):
            return f'a:{self.a}\tb:{self.b}\tc:{self.c}'
    
    users = [User(1, 2, 3), User(('z', 'y', 'x'), 5, 6), User('a', 'b', None)]
    
    for user in users:
        print(user)
        print(f'a:{user.a}')
    print(users[1].a)
    print(users[2].c)

    из него можно извлечь некоторые сведения для вас.

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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Ответ написан
    Комментировать
  • Как отправить сообщение зная id пользователя в Telegram?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Простой гуглинг позволил быстро найти на stackowerflow следующее:

    from telethon import utils
    real_id, peer_type = utils.resolve_id(-1001234567891)
    
    print(real_id)  # 1234567891
    print(peer_type)  # <class 'telethon.tl.types.PeerChannel'>
    
    peer = peer_type(real_id)
    print(peer)  # PeerChannel(channel_id=1234567891)


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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Если имеется ввиду - «аккумулировать» то, что попадает в переменные time_pz и т.п. - можно складывать полученное либо в словарь, либо в список, в зависимости от того, какая конечная цель. Можно складывать в словарь (два ключа “time_pz” и “time_sh”) а под каждым ключом - список, в который добавляется следующее найденное значение.
    Либо наеборот - добавлять в список словарики с парой ключей, значения - найденные (если один не найден, а второй найден - не найденный None).
    Как-то так, например:
    results = []
    table = [i for i in range(1000)]
    for record in table:
        double = None
        triple = None
        if not bool(record % 2):
            double = record
        if not bool(record % 3):
            triple = record
        if any([double, triple]):
            results.append({'double': double,'triple': triple})
    print(results)
    Ответ написан
  • Как в питоне задать пути к стандартным папкам?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Если вам надо внутри вашего скрипта создавать, считывать и изменять файлы и папки, опираясь на привязку к «домашней» папке пользователя, можно сделать что-то такое:
    from pathlib import Path
    my_home_dir = Path.home()
    new_folder_name = 'my_new_folder'
    new_folder = Path(new_folder_name)
    new_folder_full_path = my_home_dir / new_folder
    try:
        Path.rmdir(new_folder_full_path)
    except FileNotFoundError:
        pass
    print(new_folder_full_path.is_dir())
    try:
        Path.mkdir(new_folder_full_path)
    except FileExistsError:
        pass
    print(new_folder_full_path.is_dir())


    В скобках замечу
    Следует отметить, что существуют сторонние библиотеки, которые не понимают такие пути. Для таких библиотек приходится получать строчное представление пути.
    Ответ написан
    2 комментария
  • Почему с одним драйвером код работает, а с другим нет?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    У вас там часть с созданием переменной driver обернута в перехват исключения try:, а в finally: стоят вызовы driver, в частности driver.close()
    Если сработает какое-либо исключение, то driver не будет создан, т.к. всё пойдёт по ветке except и затем finally:.
    А там вызов driver, а он не создан в try из-за какой-то ошибки (исключения), и интерпретатор предупреждает, что нельзя обратиться к driver, так как он не был инициализирован до использования.

    Что делать?
    Внимательно разобраться с тем, что вы творите внутри try:
    Затем внимательно разобраться с except - там перехват Exception, т.е. практически любой ошибки, а надо перехватывать конкретные классы ошибок.
    Ну и не вызывайте driver, пока не убедитесь, что он точно инициализирован до использования.
    Ответ написан
    1 комментарий
  • Почему не работает так, как надо?

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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Наверно, самый простой способ - использовать enumerate, увеличивая получаемый индекс на 1 (благодаря любезной подсказке Михаил Кростелев, можно не увеличивать на 1, а просто стартануть с 1, используя необязательный параметр start), и печатая строку за строкой, подставляя в шаблон строки индекс и собственно соответствующее значение.
    В качестве шаблона строки для вывода удобно использовать f-строки.
    Ответ написан
  • Как работает бинарный оператор & в python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Важно понять, что фигурные скобки - литерал множества. Вы сделали два множества и провели операцию & для двух множеств. Результат - множество, содержащее совпавшие элементы из обоих множеств.
    В случае, когда вы сделали «число» И «число», у чисел в python способ логического И описан несколько по-другому, и результат другой.

    В общем, вы можете сделать свой тип (класс) множеств, для которого переопределить эту и другие операции как вам хочется. По-умолчанию - так.
    Ответ написан
    Комментировать
  • Задача. Скачать файлы(robot.txt и sitemap.xml) с сайтов которые находятся в файле site_base.txt, как пройти по всем значениям?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Оставляя в стороне шероховатости, надо то, что после for line in f:, превратить в функцию, которая принимает line и filename(который либо “robot” либо “sitemap”), естественно, подставляя line и filename куда надо в коде, а в остальном функция должна практически повторять всё, что в коде. Ну и вызывать эту функцию дважды для каждого line, подставляя то robot то sitemap.
    Ответ написан
    Комментировать