Задать вопрос
  • Как сделать телеграм бота многоязычным?

    Vindicar
    @Vindicar
    RTFM!
    1. Храни таблицу языков вида "ID пользователя - ID языка". Если записи для пользователя в таблице нет, то предлагаешь выбрать, или задаёшь какое-то значение по умолчанию.
    2. Храни все постоянные строки, которые отправляет бот, в некотором хранилище. Хранилище должно иметь вид "ID строки - ID языка - содержимое строки". Соответственно при отправке сообщения узнаёшь ID языка пользователя, с которым идёт обмен, и выбираешь нужную строку по ID строки.
    Ответ написан
    2 комментария
  • Как выполнить действие но только 1 раз?

    Vindicar
    @Vindicar
    RTFM!
    > b1=Button(root, text="22211", command=random.choice(A))
    Вот в этот момент у тебя случано выбирается одна из трёх функций, и назначается на обработку нажатия кнопки.
    Только в этот момент! Потом она так и остаётся.
    Так что если хочешь, чтобы случайный выбор делался при каждом нажатии на кнопку - делай его при каждом нажатии на кнопку, т.е. в обработчике нажатия. А не снаружи. Внезапно, да?

    A=['1', '2', '3']
    
    def clickity():
      index = random.randint(0, len(A)-1)
      item = A.pop(index) #выталкиваем элемент из списка и вставляем его в переменную
      print(item)
    
    b1=Button(root, text="22211", command=clickity)
    b1.pack()
    root.mainloop()
    Ответ написан
  • Как сделать так, чтобы если в списке стоят 3 одинаковых числа под ряд то они удалялись?

    Vindicar
    @Vindicar
    RTFM!
    Циклом. Вот только вопрос, а если после удаления снова будут 3 подряд, тоже удалять?
    Например,
    a = [1, 1, 2, 2, 2, 1]
    Должно дать на выходе a = [1, 1, 1] или a = []?

    Если первое, то что-то такое...
    our_list = [1, 2, 3, 3, 3]
    #идём от конца списка к началу - так удаление повлияет только на уже обработанные элементы списка.
    for i in range(len(our_list) - 3, 0, -1): 
      if our_list[i:i+3] ==  [ our_list[i] ] * 3: #сравниваем фрагмент списка с повтором элемента трижды
        del our_list[i:i+3]
    
    print(our_list)
    Ответ написан
    5 комментариев
  • Как по-человечески найти нужный элемент в списке?

    Vindicar
    @Vindicar
    RTFM!
    Ты хочешь указывать ячейку как в морском бое, а1-в3?
    Тогда работай отдельно по строкам и столбцам, так будет проще.
    field = [
      [' ', ' ', ' '],
      [' ', ' ', ' '],
      [' ', ' ', ' '],
    ]
    #обращение к ячейке будет таким: field[1][1] 
    
    columns = ['1', '2', '3'] #обозначения столбцов
    rows = ['a', 'b', 'c'] #обозначения строк
    
    def cell2index(cell):
      # превращаем строку вида b1 в индексы в списке
      row = rows.index(cell[0].lower()) #если номера строки нет, вылетит исключение ValueError
      col = columns.index(cell[1]) #если номера столбца нет, вылетит исключение ValueError
      return row, col #возвращаем кортеж - пару значений
    
    # пример работы - ход крестиков
    while True: #повторяем, пока пользователь не введет правильный номер
      cell = input('Введите ячейку для хода: ')
      try:
        r, c = cell2index(cell) #если номер неверный, тут вылетит исключение ValueError
        if field[r][c] != ' ': #ячейка уже занята?
          print('Ячейка уже занята!')
        else:
          break #если исключения не было, выходим из цикла
      except ValueError:
        print('Номер ячейки неправильный')
    #сюда попадём только если номер ячейки правильный и она свободна
    field[r][c] = 'x'
    Ответ написан
    2 комментария
  • Найдите все пифагоровы тройки, в которых все числа находятся в диапазоне [1; 5000]?

    Vindicar
    @Vindicar
    RTFM!
    Не пойму почему делаете так. Можно куда проще.
    Можно сгенерировать список квадратов чисел:
    squares = [i*i for i in range(1, 5001)]
    При этом индекс элемента в списке i всегда будет на один меньше, чем число, чей квадрат находится по индексу i.
    Теперь задача переформулируется таким образом: найти все пары чисел из этого списка, сумма которых тоже в этом списке.
    for a,a2 in enumerate(squares, 1):
      for b,b2 in enumerate(squares[a:], a+1):
        if (a2+b2) in squares:
          c = squares.index(a2+b2) + 1
          print(a,b,c)

    Работает не очень быстро, но работает.

    EDIT: можно резко ускорить код, если учесть следующее: нам не обязательно искать сумму во всем списке. Мы знаем, что сумма будет больше чем b^2, т.е. будет иметь индекс больше чем b. Также мы знаем, что a^2 + b^2 < (a+b)^2, т.е. сумма будет иметь индекс меньше чем a+b. Отсюда:

    for a,a2 in enumerate(squares, 1):
      for b,b2 in enumerate(squares[a:], a+1):
        if (a2+b2) in squares[b+1:a+b]:
          c = squares.index(a2+b2) + 1
          print(a,b,c)
    Ответ написан
    Комментировать
  • Как решить проблему?

    Vindicar
    @Vindicar
    RTFM!
    async def on_report_button(inter):
    member = inter.author
    self.collticku.update_one({'_id': guild.id}, {'$inc': {'tnum': +1}})
    num = self.collticku.find_one({'_id': guild.id})['tnum']

    Поздравляю, ты попался на замыкании. on_report_button() будет всегда ссылаться на ТЕКУЩЕЕ значение guild - а к моменту вызова on_report_button() это текущее значение уже прошло через весь цикл for guild in self.bot.guilds и остановилось на последней гильдии из списка. От того, что ты создал on_report_button() несколько раз, это не изменится.
    Побороть можно через атрибуты функции. Внутри on_report_button() используй не guild, а on_report_button.guild. А после объявления on_report_button() (т.е. ВНЕ самой функции) присвой on_report_button.guild = guild. Тогда каждая версия on_report_button() будет иметь свою гильдию.
    Это касается ВСЕХ переменных, которые on_report_button() захватывает из вышележащей области видимости. Если они изменяются, то все копии этой функции будут видеть только последнее текущее значение.
    Ответ написан
    Комментировать
  • Discord.NET как предоставить пользователю роль?

    Vindicar
    @Vindicar
    RTFM!
    Получить объект нужного пользователя, затем вызвать на нём AddRoleAsync()?
    Без кода подробного ответа не будет.
    Ответ написан
    2 комментария
  • Как Удалить надпись, Бот заблокировал в чате?

    Vindicar
    @Vindicar
    RTFM!
    Смотришь метод Bot.send_message(), которым ты пользуешься.
    Там и впрямь есть параметр disable_notification, который можно передать.
    Так что просто передаёшь этот параметр по имени, как disable_notification=True.
    Ответ написан
    Комментировать
  • Как сделать добавление эмодзи к Ембеду?

    Vindicar
    @Vindicar
    RTFM!
    await channel.add_reaction('')
    реакцию можно добавлять только к сообщениям, а не к каналам.
    Ответ написан
    Комментировать
  • Random.uniform что делаю не так?

    Vindicar
    @Vindicar
    RTFM!
    random.uniform() принимает два параметра - целых числа.
    Ты передаёшь один параметр - кортеж из двух элементов.
    Это разные вещи.
    Неясно, зачем вообще тебе farm_timer и почему нельзя было написать просто random.uniform(61,65), но если хочется иметь именно кортеж, то можно сделать так:
    random.uniform(farm_timer[0], farm_timer[1])
    или так, если порядок и чсило элементов в кортеже точно соответствуют параметрам:
    random.uniform(*farm_timer)
    Ответ написан
    Комментировать
  • Почему при использовании первого элемента списка выдает ошибку выхода за грани списка?

    Vindicar
    @Vindicar
    RTFM!
    Потому что user_name содержит пустую строку. А вот почему так, это уже второй вопрос.
    Хотя _clean_all_tag_from_str() это тот еще код... вообще разве в title могут быть вложенные теги?
    Ответ написан
    1 комментарий
  • Как сделать так, чтобы внутри одного виджета выполнялись разные действия?

    Vindicar
    @Vindicar
    RTFM!
    > кнопка брала директорию из первой кнопки
    И вот тут-то и косяк. Не из "первой кнопки", а из специально созданного (в __init__() разумеется) поля класса Convert_App. А записывать данные в это поле должен обработчик нажатия первой кнопки.
    Это азы питоновского ООП, освойте их и таких вопросов возникать не будет.
    Ответ написан
    Комментировать
  • Как сделать отправку сообщеня которое написаное в команде?

    Vindicar
    @Vindicar
    RTFM!
    Плохо искал.
    Находишь искомый канал по id, у текстового канала есть метод send().
    Ответ написан
    Комментировать
  • Не работает бот, что не так?

    Vindicar
    @Vindicar
    RTFM!
    Подозреваю, что до start_polling() атрибут dp.loop имеет значение None.
    Наверняка бот предоставляет событие, которое срабатывает когда бот стартовал - поищи в доках, и запускай задачу внутри этого события.
    Ответ написан
  • Как работают Каскады Хаара в OpenCV?

    Vindicar
    @Vindicar
    RTFM!
    «Признак Хаара» это прямоугольный фильтр, разделенный на две области – светлую и темную. Данный фильтр накладывается на некоторую область изображения (окно). Значением (откликом) признака является сумма яркостей пикселей изображения в светлой области минус сумма яркостей пикселей в темной области. Если эта разность превышает некоторый порог, то мы считаем, что данный фильтр дал отклик в данном месте изображения.
    Это примитивный признак-классификатор. При обучении классификатора Хаара с помощью алгоритма бустинга набор таких примитивных классификаторов складывается в один составной классификатор. Но такой классификатор либо работает долго, либо даёт много ложных срабатываний. Даже шанс в 0,01% - это много, учитывая сколько возможнных окон (возможных позиций лица) может быть на изображении.
    Поэтому использует принцип "каскада внимания". Формируется цепочка из нескольких составных классификаторов таким образом, чтобы каждый последующий отсеивал как можно больше отрицательных примеров, но при этом пропускал все или почти все положительные (уровень обнаружения >95%). Это позволяет ограничиться вычислением сравнительно быстрых и простых составных классификаторов для подавляющего большинства окон на изображении.

    Под конец несколько близлежащих окон могут быть слиты в одно с помощью non-maximum suppression. Это нужно, так как лицо может попасть сразу в несколько соседних окон, чуть смещённых относительно друг друга.
    Если в итоге у нас есть отклики, то мы знаем позиции и размеры возможных лиц на изображении. А дальше уже эвристика на основании этих сведений. Например, если нам нужен крупный план, то мы можем отвергнуть изображение, если наибольшее лицо занимает менее 75% площади изображения.
    Ответ написан
  • Почему в tkinter не обновляется текст на экране?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты не понимаешь, что делаешь.
    btn_ent = Button(frame_btn, text='Ввести', font=100, bd=2, height=5, command=click())

    Ты присваиваешь в качестве обработчика щелчка по кнопке результат вызова функции click(). У неё нет ни одного return, так что она возвращает None.
    Если ты хотел назначить click() как обработчик, то нужно было указать саму функцию, а не результат её вызова.
    command=click


    Далее, сравнение
    txt == 'чтототам'
    некорректно, так как StringVar() и str - разные типы данных, и они не будут равны. Используй
    txt.get() == 'чтототам'
    . Одинокий вызов txt.get() в начале click() бесполезен, так как ты игнорируешь возвращаемое get() значение.

    Собственно, я не вижу где ты инициализируешь переменную txt. У тебя нет ни одного вызова txt.set().

    Ну и до кучи, присваивание TextR перед root.mainloop() ни на что не повлияет, так как она использовалась ранее.
    Если хочешь, чтобы присваивание переменной тут же отражалось в элементах управления, нужно использовать еще один StringVar(), и вызывать его метод .set() для смены значения.
    Ответ написан
    Комментировать
  • Поднятие домашнего облака nextcloud. Опыт использования. На apache или nginx?

    Vindicar
    @Vindicar
    RTFM!
    Я на одного пользователя поднял вообще на lighttpd, работает.
    Но по апачу наверняка больше рекомендаций в сети.
    Ответ написан
    Комментировать
  • Как скрыть или запретить доступ к системе на другом диске?

    Vindicar
    @Vindicar
    RTFM!
    Можно отмонтировать этот раздел напрочь.
    Если он прописан в /etc/fstab, добавь в соответстующую строку параметр noauto или вообще закомментируй её.
    Если он там не прописан, его может подмонтировать udev, тогда надо ковыряться в /etc/udev/rules.d
    Ответ написан
    2 комментария
  • Как устранить проблему невыполнения алгоритма?

    Vindicar
    @Vindicar
    RTFM!
    operation=input('Выберите персонажа:')
    if operation == 1:

    input() возвращает только строки. Так что он вернет '1', '2' или '3', а это не то же самое что 1, 2 или 3.
    Ответ написан
  • Что делать, если бот не находит пользователя на сервере?

    Vindicar
    @Vindicar
    RTFM!
    member = main_guild.get_member(member_id)
    AttributeError: 'NoneType' object has no attribute 'get_member'
    Ну чего тут гадать, нет такой гильдии. ID точно не перепутал?
    Кроме того, ты уверен что функция не запускает до того как бот подключился?
    Ответ написан
    Комментировать