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

    @o5a
    Тогда стоит вместо текущего
    str('\n'.join('● @id{}(Пользователь)' for _ in range(len(admin))).format(*admin))

    Использовать напрямую данные из словарей admin_info
    str('\n'.join(f'● @id{user["id"]}({user["first_name"]} {user["last_name"]})' for user in admin_info))
    Ответ написан
    Комментировать
  • Python 3 есть число, которое нужно разделить на более менее равные части?

    @o5a
    def split_number(number, parts):
    	d, r = divmod(number, parts)
    	return [d + (1 if i < r else 0) for i in range(parts)]
    
    print(split_number(22, 4))
    # [6, 6, 5, 5]
    Ответ написан
    Комментировать
  • [Python] Как сделать передвижение строки?

    @o5a
    Не совсем понятно, как предполагается двигать вправо, обычно бегущая строка двигается влево. Но при желании можешь изменить отображение, если действительно нужно в обратную сторону.

    import time
    
    stroka = input("")
    
    num_chars = 5 # размер окна символов
    
    for i in range(len(stroka)-num_chars+1):
        print(stroka[i:i+num_chars],end="\r", flush=True)
        time.sleep(1) # Время в мс
    Ответ написан
  • Пишу программу для телеграмм бота через Python. Не могу понять в чем ошибка. Можете подсказать?

    @o5a
    5ec22dce5b582133495419.png
    в других местах тоже, проблемы с отступами
    Ответ написан
    Комментировать
  • Как добавить пакет в Heroku?

    @o5a
    Mожно в requirements.txt вместо строки с "instagram=" прописать ее путь в github, чтобы ставилось оттуда
    https://github.com/OlegYurchik/pyInstagram/archive/master.zip
    Ответ написан
    Комментировать
  • Почему не работает in в python 3?

    @o5a
    Вместо
    for combo in win_combos:
        if ocells in combo: # здесь

    нужно проверять наличие самих наборов в win_combos:
    if ocells in win_combos:
    Аналогично с xcells
    Ответ написан
  • Как я могу заснуть все параметры в объект во время перебора массива?

    @o5a
    def fun(**kwargs) :
      for x in range(2) :
        #obj(**kwargs)
        text = kwargs['text'][x+1]
        background = kwargs['background'][x]
        obj(text, background)


    Но в целом, как и в предыдущем вопросе, выбранные тобой методы реализации выглядят довольно дико.
    Ответ написан
  • Как автоматически сделать все неизвестные значения index в массиве равными 0?

    @o5a
    Так что бы не пересчитывать массив test_list в начале for x in range(3)

    Например, такие 2 варианта
    test_id = {k:0 for k in test_list}
    
    test_id = dict.fromkeys(test_list, 0)


    По поводу остального: зачем в print использовать min (то, что не выходим за пределы списка), если это условие уже учитывается в цикле приращения (где sum)?

    Алгоритм работы программы даже понял (хотя не сразу во всей этой наркомании), но без знания изначальной задумки не совсем понятно, почему делается приращение, но в конце все равно ограничивается максимальным элементом списка, ведь он так выродится. Отсюда сложно сказать, что можно оптимизировать.

    Но вместо циклов с sum и изменениями test_id можно задать словарь этих приращений и по нему просто накручивать индекс в каждом цикле
    # словарь смещений индекса на каждом цикле
    inc = {
    'arr_1':1,
    'arr_2':2,
    'arr_3':2
    }
    
    for i in range(5):
        print("text-{}  border-{} shadow-{} background-{}".format(
    test_list['arr_3'][min(i*inc['arr_3'], len(test_list['arr_3'])-1)],
    test_list['arr_2'][min(i*inc['arr_2'], len(test_list['arr_2'])-1)],
    test_list['arr_2'][min(i*inc['arr_2']+1, len(test_list['arr_2'])-1)],
    test_list['arr_1'][min(i*inc['arr_1'], len(test_list['arr_1'])-1)]
    ))
    
    выдаст
    text-red  border-green shadow-brown background-red
    text-black  border-black shadow-black background-blue
    text-green  border-black shadow-black background-yellow
    text-green  border-black shadow-black background-yellow
    text-green  border-black shadow-black background-yellow
    Ответ написан
    Комментировать
  • Проблема со строками PYTHON?

    @o5a
    Можно последовательно нарезать через split() с разными условиями. Или использовать regexp.
    s = """
    Балансы:
    
    Баланс $: 228,951
    Баланс котяток: 0.67984234"""
    
    import re
    
    m = re.search(r"Баланс \$: (.+)", s)
    if m:
        print(m.group(1))
        print(m.group(1).replace(',',''))

    Получим:
    228,951
    228951
    Ответ написан
    Комментировать
  • Как работает PIL.Image.PERSPECTIVE?

    @o5a
    Нет, там указываются не координаты, а коэффициенты уравнения (a x + b y + c)/(g x + h y + 1), (d x + e y + f)/(g x + h y + 1), высчитывает координаты, откуда взять значение для каждого пикселя (x, y).
    Из документации пакета:
    Data is a 8-tuple (a, b, c, d, e, f, g, h) which contains the coefficients for a perspective transform. For each pixel (x, y) in the output image, the new value is taken from a position (a x + b y + c)/(g x + h y + 1), (d x + e y + f)/(g x + h y + 1) in the input image, rounded to nearest pixel.

    Исходя из этого, можно составить простые примеры:
    (1, 0, 0, 0, 1, 0, 0, 0) - не изменит картинку
    (1, 0, 0, 0, 2, 0, 0, 0) - "сплющит" картинку в 2 раза по вертикали, и т.д.

    Чтобы найти эти коэффициенты можно воспользоваться вспомогательной функцией, например, отсюда https://stackoverflow.com/a/14178717
    Ответ написан
    Комментировать
  • Как передавать данные в argv во время теста?

    @o5a
    argv это просто список, можно его самому изменить.
    def test_main(self):
            name_list = ['xiaomi', 'redmi', 'note', '7'] # название товара
            argv.extend(name_list) # искусственно добавляем список к argv
            link_product = [{'title': 'Мобильный Телефон Xiaomi Redmi Note 7 PRO (6+128Gb)', 'cost': '12.000 сом'},
                            {'title': 'Мобильный Телефон Xiaomi Redmi Note 7 (6+64Gb)', 'cost': '10.400 сом'},
                            {'title': 'Мобильный Телефон Xiaomi Redmi Note 7 (4+128Gb) EU', 'cost': '11.500 сом'},
                            {'title': 'Мобильный Телефон Xiaomi Redmi Note 7 (3+32Gb) EU', 'cost': '10.000 сом'},
                            {'title': 'Мобильный Телефон Xiaomi Redmi Note 7 (4+64Gb) EU', 'cost': '10.700 сом'}] # результат
            product_link = main() # просто запускаем основной скрипт, список мы уже передали
    Ответ написан
    Комментировать
  • Как работать с cmd через код в файле на Python?

    @o5a
    Модуль subprocess.
    subprocess.run для запуска команды с ожиданием выполнения.
    subprocess.Popen для запуска команды в отдельном процессе (не будет прерывать исполнение основного скрипта).

    Пример
    import subprocess
    
    module = "lxml"
    subprocess.run(["pip", "install", module, "--upgrade"])
    Ответ написан
    Комментировать
  • Можете помочь с ботом python?

    @o5a
    Потому что в print используется message.from_user.last_name который не всегда присутствует (т.е. может быть None).
    Ответ написан
    Комментировать
  • Ошибка при запросе к MySql. Что не так?

    @o5a
    cursor.execute("INSERT INTO dateuser (login) VALUES (%s)", (sog, ))
    Ответ написан
    Комментировать
  • Как в pandas с помощью groupby посчитать количество уникальных элементов?

    @o5a
    Я пытаюсь получить количество уникальных id в каждом дне

    df_c.groupby('date')['listing_id'].nunique()
    Ответ написан
    Комментировать
  • Как сгруппировать данные по столбцам в pandas?

    @o5a
    df['Сумма'] = df[['Февраль', 'Март', 'Апрель']].sum(axis=1)
    
    или просто
    
    df['Сумма'] = df.sum(axis=1)
    
    если не нужно ограничивать только этими колонками
    Ответ написан
    Комментировать
  • Как сохранить в базе данных список строк в одном поле?

    @o5a
    Правильнее будет сделать 3-ю таблицу, связывающую идентификаторы первых 2-х таблиц, чем городить в SQL базе какое-то текстовое или json поле с множеством идентификаторов.

    Не совсем понятно условие
    Чего бы не хотелось:
    Создавать связь многие-ко-многим
    , что под этим подразумевалось и почему именно не хотелось. Тем более, что судя по описанию, как раз и требуется связь многие ко многим, судя по
    Сущностям из Таблицы №2 достаточно иметь список первичных ключей из Таблицы №1, количество ключей может варьироваться в различных пределах.


    В крайнем случае, если нужна только связь 1 ко многим (идентификаторы таблицы 1 не будут дублироваться в таблице 2), можно добавить поле с указанием идентификатора из таблицы 2 в таблицу 1. Меньше работы, но менее универсально.
    Ответ написан
    2 комментария
  • Какой алгоритм используется в задаче про лестницу?

    @o5a
    Генерировать можно так например
    a = [4,5,6]
    i = 1
    while i < 10:
        print([str(x) * (x*i//4 - x*(i-1)//4) for x in a])
        i += 1


    Получаем
    ['4', '5', '6']
    ['4', '5', '66']
    ['4', '5', '6']
    ['4', '55', '66']
    Ответ написан
    5 комментариев
  • Как обратиться к функции по ключевому слову строки?

    @o5a
    Можно использовать сами функции в качестве ключей, а затем перебором значений проверять входимость в строку

    def function1(string):
      print(string+'\nfunction1')
    
    def function2(string):
      print(string+'\nfunction2')
    
    def function3(string):
      print(string+'\nfunction3')
    
    user_input = input()
    obj = {
        function1:
          ['1','function1'],#Если в string присутствует элемент этого списка, то должна вызваться function1
        function2:
          ['2','function2'],#Если в string присутствует элемент этого списка, то должна вызваться function2
        function3:
          ['3','function3'],#Если в string присутствует элемент этого списка, то должна вызваться function3
      }
    
    # обходим весь словарь и проверяем наличие слов из каждого списка в строке пользователя
    for func, wordlist in obj.items():
    	if any(word in user_input for word in wordlist):
    		func(user_input)
    Ответ написан
    Комментировать
  • Как заменить символ строки на индекс этого символа в массиве?

    @o5a
    Потому что replace не меняет оригинал, а только возвращает измененную строку, т.е. нужно переприсваивать.
    Но для подобной замены по словарю (набор значений меняется на другой набор значений) лучше использовать translate (в параметрах передаем пары "символ":"индекс + 1"), без всяких дополнительных циклов.

    word = word.translate(str.maketrans({c:str(i+1) for i,c in enumerate(alpha)}))
    Ответ написан
    Комментировать