Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (3)

Наибольший вклад в теги

Все теги (55)

Лучшие ответы пользователя

Все ответы (506)
  • Как вывести самую длинную цепочку из символов в алфавитном порядке?

    @o5a
    Проблема из-за условия проверки
    if ord(text[i + j]) - ord(elems[-1][-1]) < 2
    в условии последовательности требуется, чтобы последующая буква была не меньше предыдущей, не понятно, с чего Вы вдруг такое условие написали.

    Вообще нет надобности сохранять куда-то сами последовательности, тем более, что требуется только первую из самых длинных. Как можно это сделать:
    Проходим по символам последовательности и проверяем, стал ли ord() текущего символа меньше предыдущего. Если стал, то последовательность закончилась. Проверяем, не стала ли эта последовательность больше предыдущей. Если да, обновляем данные максимальной последовательности (стартовую позицию и длину).
    В противном случае переходим к следующему.
    Примерно так:
    spoiler
    text = ...
    text_len = len(text)
    max_len = 0
    max_idx = 0
    seq_idx = 0
    prev = 0
    
    for i, x in enumerate(text):
        if ord(x) < prev:
            seq_len = i-seq_idx
            if seq_len > max_len:
                max_len = seq_len
                max_idx = seq_idx
            seq_idx = i
        elif i==text_len-1:
            seq_len = i-seq_idx+1
            if seq_len > max_len:
                max_len = seq_len
                max_idx = seq_idx
        prev = ord(x)
    print(max_len, text[max_idx:max_idx+max_len])
    Ответ написан
    Комментировать
  • Как решить задачу правильно?

    @o5a
    Подобная задача проще всего решается через стэк.
    Перебираем постепенно элементы исходного списка.
    Если последний элемент стэка равен противоположному (NORTH-SOUTH и т.п.) текущего элемента списка, то удаляем (stack.pop()) этот элемент из стэка. В противном случае добавляем к стэку. В конце цикла в стэке останется только неисключенные элементы (без пар). Для соответствия пар можно задать словарь.
    Примерно так (спрячу под спойлер, на случай если захочется реализовать самостоятельно):
    spoiler
    def dirReduc(arr):
        dirs = {"NORTH": "SOUTH", "SOUTH": "NORTH", "EAST": "WEST", "WEST": "EAST"}
        stack = []
        for d in arr:
            if stack and dirs[d] == stack[-1]:
                stack.pop()
            else:
                stack.append(d)
        return stack
    Ответ написан
    1 комментарий
  • Как создать матрицу с количеством вхождений слова в предложение?

    @o5a
    Разбить весь текст на предложения, а внутри на слова. Затем 2 цикла один по предложениям в этом вложенном словаре, другой - по списку уникальных слов. И для каждого уникального слова считать кол-во его вхождений в текущее предложение (через count).
    Через list_comprehension будет выглядеть так
    [[sentence.count(word) for word in unique_words] for sentence in sentences]

    где unique_words - это собственно список уникальных слов
    sentences - вложенный список слов по каждому предложению.

    Разбить на предложения и слова наверное проще регулярными выражениями
    # по предложениям
    re.split(r'[\.!\?]', text)
    # по словам
    re.split(r'[\n \.,!\?]', text)

    Удачи.
    Ответ написан
    7 комментариев
  • Ошибка sqlite3.OperationalError: no such column: cash, как решить?

    @o5a
    Значит в таблице нет такого поля cash.
    По всей видимости таблицу создавали изначально с другим составом полей, и она уже есть в базе (без cash), поэтому CREATE IF NOT EXISTS пропускается.

    Или удалите таблицу из базы, если данные не нужны: "DROP TABLE users"

    Или добавьте поле отдельно: "ALTER TABLE users ADD cash BIGINT".
    Ответ написан
    1 комментарий
  • Почему у модуля telebot нету класса types?

    @o5a
    pip uninstall telebot
    pip uninstall PyTelegramBotAPI
    pip install PyTelegramBotAPI

    и библиотеку telebot не надо больше пытаться ставить, правильная PyTelegramBotAPI
    Ответ написан
    Комментировать