• Что я сделал не так?

    @mrxor
    Simple is better than complex
    FRIENDS = ['Серёга', 'Соня', 'Дима', 'Алина', 'Егор']
    def show_count_friends(count_friends):
        if count_friends == 1:
             return('У тебя 1 друг')
        elif 2 <= count_friends <= 4:
            return('У тебя ' + str(count_friends) + ' друга')
        elif count_friends >= 5:
            return('У тебя ' + str(count_friends) + ' друзей')
    def process_query(query):
        if query == 'Сколько у меня друзей?':
            return show_count_friends(count)
        elif query == 'Кто все мои друзья?':
            friends_string = ', '.join(FRIENDS)
            return('Твои друзья: ' + friends_string)
        else:
            return('<неизвестный запрос>')
    print(process_query('Сколько у меня друзей?'))
    print(process_query('Кто все мои друзья?'))
    print(process_query('Как меня зовут?'))
    Ответ написан
  • Как выбрать все значения имеющие по определенному ключу?

    @mrxor
    Simple is better than complex
    Получать стану из ответа вы умеете, осталось приспособить под ваши нужны.
    Например так можно сопоставить id юзера и его страну
    {user['id']:user['country']['title'] for user in friends['items'] if user.get('country')]}
    Ответ написан
    Комментировать
  • Как конвертировать txt в csv с заданным разделителем?

    @mrxor
    Simple is better than complex
    При загрузке из файла можно указывать разделитель

    import pandas as pd
    
    df = pd.read_csv('input.txt', sep='@')

    Получите датафрейм с вашами данными из txt файла и дальше сохраняйте как обычно
    df.to_csv('output.csv')
    Ответ написан
    Комментировать
  • Почему в __init__ не меняется переменная?

    @mrxor
    Simple is better than complex
    В вашем коде проверка здоровья изменение is_alive происходит в методе __init__ -> __init__ вызывается только один раз при создании объекта. Следовательно после того, как вы создали объект вызвав at = Warrior() проверка уже не будет вызвана. Сделайте отдельный метод для уменьшения здоровья и в нем же добавьте переключение is_alive в False при его падении до нуля.
    При этом, если вы вызовете at = Warrior(health=0) - ваша проверка сработает и Warrior породится мертвым, как бы грустно это ни было.
    Ответ написан
    Комментировать
  • Как скачать таблицу html и вывести ее в консоли в виде таблицы?

    @mrxor
    Simple is better than complex
    import pandas as pd
    import requests
    response = requests.get('https://rossvyaz.ru/data/DEF-9xx.html')
    table = pd.read_html(response.text, encoding='utf-8')
    print(table)

    Дальше с пандас таблицей делайте что хотите
    Ответ написан
    3 комментария
  • Почему не запускается приложение на python kivy?

    @mrxor
    Simple is better than complex
    У вас MyApp не насделуется от App kivy, должно быть
    class MyApp(App):
    Ответ написан
    Комментировать
  • Есть ли разница между TelegramBotAPI и pyTelegramBotAPI?

    @mrxor
    Simple is better than complex
    Не совсем понятно, что вы имеете ввиду под TelegramBotAPI, скорее всего вы про АПИ телеграмма само по себе.
    pyTelegramBotAPI это просто python обертка для апи телеграмма
    Ответ написан
    Комментировать
  • Как починить страницу логина в джанго?

    @mrxor
    Simple is better than complex
    Чтобы использовать email вместо username
    1. Определите свою модель юзера с USERNAME_FIELD = 'email'
    Пример:
    class User(AbstractUser):
        """User model."""
        
        username = None  # Можете выпилить username если он вам не нужен
        email = models.EmailField(_('email address'), unique=True)
    
        USERNAME_FIELD = 'email'
        REQUIRED_FIELDS = []


    2. В settings.py добавьте AUTH_USER_MODEL = 'YOUR_APP.User'

    Ссылки по теме:
    Раз
    Два
    Ответ написан
    Комментировать
  • Как добавить Critical section в код?

    @mrxor
    Simple is better than complex
    lock.acquire()
    check(response.headers['Location'], 1)
    lock.release()

    Плюс нужно еще отпускать лок в случае ошибки.
    Минус такого решения в том, что треды и так блокируют друг друга из-за Gil, а тут еще лок добавляется.
    Лучше сделать через мультипроцессинг или (еще лучше) переписать на переписать на asyncio + aiohttp
    Ответ написан
    Комментировать
  • Насчет функции передачи(получения) аргументов?

    @mrxor
    Simple is better than complex
    Именованные аргументы передаются в виде словаря, и соответственно подчиняются синтаксису создания словаря.
    Представьте, что когда вы взываете функцию с именованными аргументами python делает dict() от переданных именованных аргументов и кладет его в словарь kwargs, который вы потом и распаковываете выражением ** kwargs.
    Выражение dict('wine'='merlot') синтаксически неверно, но если очень хочется кавычки - вы можете сделать print_kwargs(**{'wine':'merlot'}).
    Результат будет аналогичен print_kwargs(wine='merlot')
    Ответ написан
    Комментировать
  • Как в django удалить записи после запроса?

    @mrxor
    Simple is better than complex
    receipts = list(CrmReceipt.objects.filter(kkt_id=request.GET['kkt_id']))

    Заставит джангу сходить в базу до удаления и вы получите ожидаемый результат
    Ответ написан
    Комментировать