• Как передать аргументы через командную строку в unittest?

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

    В принципе, в unittest есть mock - библиотека, чтобы эмулировать различные части системы в тесте. Но я пока не пробовал это дело, поэтому тут я чисто диванный эксперт.
    Ответ написан
    1 комментарий
  • Как подсчитать кол-во подобранных паролей на Python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Сложите корректные пароли в список и сделайте len()
    Ответ написан
    Комментировать
  • Где найти готовые упражнения по начальным темам?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Как вам обучаться - зависит от вас в том смысле, что
    • кому-то удобно по книжке (вы усидчивы и умеете работать с книгой; это самый эффективный способ по соотношению цена/производительность; но надо трудиться самому);
    • кому-то комфортней видеолекции (у вас куча времени и вы не только смотрите, но и кодите после просмотра);
    • кому-то хватит курсов (не мне - я закончил начинающий, продвинутый и для аналитиков все на 100%, но помогла действительно понять Python мне книга) (вы же помните «как нарисовать сову»? Вот это оно);
    • а кому-то (мне в частности, но дорого!) самое то живой преподаватель (оооочень дорого и обычно оооочень эффективно).


    Ну и в любом случае - кроме языка надо знать алгоритмы, структуры данных, базы данных, протоколы, понимать API, знать предметную область, для которой будете кодить.

    А, да! Ещё надо писать код. 3 часа в день будет идеально. Каждый день.
    Ответ написан
    Комментировать
  • Как достать строку из листа?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Во-первых, не советую использовать слово list как имя переменной - это имя используется как имя встроенного типа «список».
    Во-вторых, список это и есть в некотором роде массив, к элементам которого можно обращаться по индексу (именно так, как вы показали - по номеру элемента в скобках). Нет смысла перемещать его содержимое в другой массив, если только это не условие задачи или обусловлено какой-то очень специфической задачей (для использования математических и статистических пакетов).. Задачи тут не решают.
    В-третьих, очень рекомендую вначале изучить структуры вообще и начала языка Python в частности, а потом браться за вот это вот всё. Сэкономит вам время.
    Ответ написан
    Комментировать
  • Как создать объект для класса через функцию def?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Созданный экземпляр класса надо вернуть из функции при помощи return. А результат выполнения такой функции присвоить нужной вам переменной.
    spoiler
    Есть вариант через глобальные переменные, но это вообще зашквар и лучше так никогда не делать.
    Ответ написан
  • Не устанавливается portaudio в чем проблема?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Соберитесь с духом. Поднимите глаза на верх сайта. Там строка поиска. Введите pyaudio. Нажмите Enter. Изучите результаты выдачи.

    Вопросов по pyaudio и всем, что с ним связано, и ответов - кучи. Каждую неделю задают одно и то же.
    Ответ написан
    Комментировать
  • Почему не приходит request?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Вы где-то что-то не то делаете. Прижмите голову к монитору, сидите не двигайтесь; штатные экстрасенсы toster-а придут на работу и считают все недостающие данные и сообщат более полный ответ.
    Ответ написан
    Комментировать
  • Как переобразить числа из 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 комментарий
  • Какие фреймворки лучше использовать для python под телефон и web?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Хочу выучить Python.

    Тогда забудьте про мобильные разработки минимум на год.
    Берёте книжку и ПРОРАБАТЫВАЕТЕ. Если прорабатывать по-серьёзному, минимум полгода.
    Потом пишете свой калькулятор, fizzbuzz, крестики-нолики, 2048, тетрис. Потом выбираете направление применения python и изучаете что к нему прилагается (фреймворки, БД, математику, сети, микросервисы, ну там разберётесь).
    Ответ написан
  • Как я могу создать данного бота?

    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]
    Ответ написан
  • Не получается установить PyAudio?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    За этот вопрос уже банить надо. Каждую неделю минимум один такой вопрос. Поиск! Тут есть пооооииииск! Пользуйтесь поискоооом! Наверху сайта.
    Ответ написан
    3 комментария
  • Googletrans Python не переводит. Как исправить?

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

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

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

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

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

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Обратиться на сервис freelance.habr.com и заказать там.
    Ответ написан
    Комментировать
  • Как прочитать 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 поменялся, и возможно и не нужно обёрток.
    Ответ написан
    Комментировать