• Как заменить несколько элементов в одной строке на Python?

    Задание не полное, непонятно что когда и как вы планируете обновлять.
    самое простое использовать регулярку,
    чуть более сложное но более наглядное преобразовать строку в класс, и заменять в нем значения тип так
    from dataclasses import dataclass
    
    
    @dataclass
    class Record:
        times: str = None
        name: str = None
        room: str = None
    
    
    array = ["1-ая пара, предмет, аудитория", "2-ая пара, предмет, аудитория",
             "2-ая пара, предмет, аудитория", "4-ая пара, предмет, аудитория"]
    
    schedule = [Record(*v.split(',')) for v in array]
    new_parsing_times = ["9:40 - 10:30", "10:40 - 12:10", "12:50 - 14:20", "14:30 - 16:00"]
    for record, new_times in zip(schedule, new_parsing_times):
        record.times = new_times
    
    print(schedule)
    Ответ написан
    Комментировать
  • В чём разница между е2е и Unit тестами?

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

    Можно решит тупо в лоб. не сильно напрягаясь, а можно заморочатся и найти более элегантное и быстрое решение.
    Мне в лом думать, поэтому вот решение в лоб
    import re
    
    input_file = """This is line #aabbcc #ddeeff
    This is line #aab66c #ddee44
    This is line #aabbcc #cceeff #aa11cc #dd22ff
    This is line #aabbcc #ddee00 #dd11ff"""
    
    pattern = re.compile(r'#\w{6}')
    
    
    def invert(color_to_convert):
        table = "".maketrans('0123456789abcdef', 'fedcba9876543210')
        return color_to_convert.lower().translate(table).upper()
    
    
    def replace(s: str):
        colors = [invert(color) for color in pattern.findall(s)]
        s = pattern.sub("{}", s)
        return s.format(*colors)
    
    
    for line in input_file.split('\n'):
        print(replace(line))
    
    
    This is line #554433 #221100
    This is line #554993 #2211BB
    This is line #554433 #331100 #55EE33 #22DD00
    This is line #554433 #2211FF #22EE00
    Ответ написан
    Комментировать
  • Как обрабатывать другие элементы в цикле for во время использования time.sleep()?

    Используйте асинк, примерный код.
    import asyncio
    from time import time
    
    els = list(range(20))
    
    
    async def rm_list(v):
        await asyncio.sleep(5)
        print(v)
    
    
    async def _main():
        await asyncio.gather(*(
            rm_list(value) for value in els
        ))
    
    
    start = time()
    loop = asyncio.get_event_loop()
    loop.run_until_complete(_main())
    loop.close()
    print(time() - start)
    Ответ написан
    Комментировать
  • Набор ЯП для автотестирования?

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

    ВЫ как-то перемудрили все, можно же просто
    sells={
    ...   "Маша":"Samsung 20",
    ...   "Максим":"Iphone 6S",
    ...   "Наташа":"Lenovo Legion"
    ... }
    prices={
    ...   "Samsung 20": 300,
    ...   "Iphone 6S": 260,
    ...   "Lenovo Legion": 450
    ... }
    result = [name for name, tel in sells.items() if prices.get(tel, 999) < 350]
    >>> print(result)
    ['Маша', 'Максим']
    Ответ написан
    8 комментариев
  • Почему появляется ошибка NoneType?

    Для начала питон не компилируемые язык.
    Потом ты сначала создал метод с именем fitness, а затем в __init__ переопределил ее на None
    self.fitness = None

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

    как угодно собираешь список упавших тестов, хоть из прогона хоть отчет распарсить.
    Можно заюзать хуку pytest_terminal_summary и в ней пройтись по упавшим тестам и выгрузить куда-нибудь, можешь любую другую в целом не так важно.

    Берешь хук pytest_collection_modifyitems и в ней фильтруешь список для запуска исключая все тесты которых нет в списке упавших тестов.
    Ответ написан
    Комментировать
  • Как научить бота вычленять числа в конкретной позиции сообщения, и отправлять команду в лс с этим числом?

    import re
    
    s = "выставляет на аукцион (214422): 1*Кожаная туника - 900 золота , " \
        "нужно вычленить именно число в скобках, у каждого такого сообщения они каждый раз разные."
    
    lot_re = re.compile(r'\((?P<lot_id>\d+)\)')
    result = lot_re.search(s).groupdict()
    print(result)
    
    {'lot_id': '214422'}
    Ответ написан
    2 комментария
  • Пойти работать Джуном или доучиться до Миддла?

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

    Как отметили выше автоматизация разная:
    Если хотите автоматизировать мобилки то там swift и kotlin
    Для браузерной автоматизации: лучше js и какой-нибудь cypress - что бы по максимуму и однородно закрыть автоматизацию как с моками так и без них
    Если там апи автоматизация - то я бы взял Python - инструменты позволяют делать много и достаточно дешево по времени разработки, так же на нем и браузерную автоматизацию можно
    Для перфоманс тестинга: я использую scala и gatling - ну тут можно в разные стороны смотреть.
    Ответ написан
    Комментировать
  • Так ли востребованы сейчас программисты?

    1. вакансии могут висеть по разным причинам, может быть просто узкий специалист и его реально можно долго искать. А может быть что компания постепенно расширяется, и на эту вакансию надо много человек, и она может висеть долго.
    2. мало когда были нужны. и значит это только то что нужны программисты с опытом и знаниями - как набраться опыта это отдельный вопрос.
    3. все познается в сравнение условно в ЕКБ для стажера(джуна может быть) 20-30, для мидла порядка 100к. в целом не бешеные деньги, но в целом в других сферах чуть сложнее на них выйти, в каких-то почти не реально.
    4. ну та же история всяких новичков которые не фига не знают море. Тех кто что-то знает и что-то представляет из себя не прям много и заказов у них хватает.
    Если вопрос стоит ли сейчас идти учится на программиста, что бы срубить бабла - ответ нет
    Ответ написан
  • Как в python 3 отсортировать двумерный список по двум столбцам?

    вот прям в лоб не сильно думая
    student_tuples = [
    ...         ('john', 'A', 15),
    ...         ('jane', 'B', 12),
    ...         ('dave', 'B', 10),
    ...         ('dave1', 'B', 11),
    ...         ('dave2', 'B', 1),
    ...     ]
    ... student_tuples.sort(key=lambda student: (student[1], student[2]))
    student_tuples
    [('john', 'A', 15), ('dave2', 'B', 1), ('dave', 'B', 10), ('dave1', 'B', 11), ('jane', 'B', 12)]
    Ответ написан
    Комментировать
  • Как быстро и без вреда для сайта проверить http коды ответа 1 000 000 ссылок?

    import asyncio
    
    from aiohttp import ClientSession, ClientError
    
    
    async def check_url(url):
        async with ClientSession() as s:
            try:
                r = await s.head(url)
                if r.status != 200:
                    return url
            except ClientError:
                return f'error {url}'
    
    
    URLS = [
               'https://ya.ru',
               'https://qna.habr.com/',
               'https://qna.habr1.com/',
           ] * 10
    
    
    async def _main():
        fails = await asyncio.gather(*(check_url(url) for url in URLS))
        print(fails)
    
    
    if __name__ == '__main__':
        loop = asyncio.get_event_loop()
        loop.run_until_complete(_main())
        loop.close()

    Можешь запросить только заголовки, для ограничения одновременных запросов смотри в сторону asyncio.Semaphore
    Ответ написан
    Комментировать
  • Где найти русскую документацию по behave?

    https://github.com/behave/behave/blob/c54493b05317...
    Вот тут схемы на всех поддерживаемых языках. по сути behave все равно что будет идти после ключевого слова. так там все основано на плюс минус регулярных выражениях
    Ответ написан
    Комментировать
  • Как получить русский текст (который отображается не по- русски) из html ссылки и вставить в название файла?

    from urllib.parse import unquote
    unquote('https://www.сайт.ru/moscow?q=%D0%BA%D0%BD%D0%B8%D0%B3%D0%B0+%D0%B4%D0%BB%D1%8F+%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D1%8F')
    'https://www.сайт.ru/moscow?q=книга+для+чтения'
    
    или
    
    from urllib.parse import urlparse, parse_qs
    v = parse_qs(urlparse('https://www.сайт.ru/moscow?q=%D0%BA%D0%BD%D0%B8%D0%B3%D0%B0+%D0%B4%D0%BB%D1%8F+%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D1%8F').query)
    v['q']
    ['книга для чтения']


    учитесь гуглить, и читайте книги без этого так и будете плодить элементарные вопросы
    еще есть удобная либа furl для всей ентой магии, она несколько удобнее стандартной
    Ответ написан
    Комментировать
  • Как получить текст из fwd_messages в vk_api?

    Вам надо читать основы по питону
    t = {
        'type': 'message_new',
        'object': {
            'message': {
                'date': 1587065982,
                'from_id': 396298943,
                'id': 845, 'out': 0,
                'peer_id': 396298943,
                'text': '',
                'conversation_message_id': 329,
                'fwd_messages':
                    [{'date': 1587065973, 'from_id': 396298943, 'text': '',
                      'attachments': [], 'fwd_messages':
                          [{'date': 1587065635, 'from_id': 574078662,
                            'text': 'Мда..Вк на приложении сдохло', 'attachments': [],
                            'conversation_message_id': 1887}],
                      'conversation_message_id': 328, 'peer_id': 396298943, 'id': 844}],
                'important': False, 'random_id': 0, 'attachments': [], 'is_hidden': False},
            'client_info': {
                'button_actions': ['text', 'vkpay', 'open_app', 'location', 'open_link'],
                'keyboard': True, 'inline_keyboard': True, 'lang_id': 0}},
        'group_id': 194081345, 'event_id': '919d7461a9d3217cb9f1b9eb50c7b5299571140d'}
    
    # Можно просто
    print(t['object']['message']['fwd_messages'])
    # Можно не ловя ошибок
    print(t.get('object', {}).get('message', {}).get('fwd_messages'))
    
    
    # Можно обернуть в функцию и скармливать строку
    def get_key(obj: dict, path):
        for k in path.split('.'):
            obj = obj.get(k, {})
    
        return obj
    
    
    print(get_key(t, 'object.message.fwd_messages'))

    Еще можно в класс все это заворачивать. но мне тут уже лень пример делать
    Ответ написан
    Комментировать
  • Какие варианты слияния списков есть?

    from itertools import zip_longest
    
    a = ['one', 'two', None, 'four', None]
    b = [None, None, 'three', None, 'five']
    
    # если списки 100% одинаковой длины можно просто zip использовать
    c = [x or y for x, y in zip_longest(a, b)]
    print(c)
    Ответ написан
    Комментировать
  • Как организовать парсинг маски строки?

    Все максимально просто читаете про регулярки в питоне, оптимируете их под свои нужды и проверяете.
    пример как это бы выглядило максимально в лоб и за пару минут
    import re
    
    convert_str_re = ''.maketrans({'0': r'\d', '#': r'\S'})
    data = ['000', '###', '##.#', '00.0']
    re_data = [v.translate(convert_str_re) for v in data]
    s = '123'
    print([re.findall(v, s) for v in re_data])
    Ответ написан
    Комментировать
  • Ошибка 405 при работе с Virustotal API?

    ошибка вам явно говорит что вы исполдьзуете не тот метод
    в доке написано: curl --request POST
    а в коде: requests.get
    для гет запроса там надо использовать другую ручку
    Ответ написан
    4 комментария