Почему программа показывает, что строка находится вне диапазона? [закрыто]

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

def base_n_decoder(alphabet):
    """Return a decoder for a base-n encoded string
    Argument:
    - `alphabet`: The alphabet used for encoding
    """
    base = len(alphabet)
    char_value = dict(((c, v) for v, c in enumerate(alphabet)))
    def f(string):
        num = 0
        try:
            for char in string:
                num = num * base + char_value[char]
        except KeyError:
            raise ValueError('Unexpected character %r' % char)
        return num
    return f

if __name__ == "__main__":
    func = base_n_decoder('0123456789abcdef')
    for test in ('0', 'f', '2020', 'ffff', 'abqdef'):
        print test
        print func(test)
-2
задан Christophe 31 March 2019 в 01:21
поделиться

2 ответа

Как объяснил ответ Дэвида , вам необходимо динамически проверить наличие line.length(), чтобы учесть преобразование вашей строковой строки. Это объясняет вне диапазона.

Тем не менее, здесь есть еще две проблемы.

Первый - это когда стоп-слово находится в конце строки без пробела после . Этот случай в настоящее время пропущен.

Второй - когда строка начинается с последовательности символов стоп-слова, но продолжается чем-то иным, кроме пробела (например, «Затем» вместо «The»). В таком случае замена в настоящее время имеет место, а не должна.

Вы можете решить две проблемы следующим образом:

for(int j=0 ;j<=line.length()-length_of_stopword;j++){
    if ( j+length_of_stopword<=line.length()){
        if ((j==0 || line[j-1]==' ') && (j+length_of_stopword==line.length() 
           || line[j+length_of_stopword]==' ' ) ) {
            if(line.substr(j,length_of_stopword)==word){
                line.replace(j,length_of_stopword,"*");
                no_of_occurence++;
            }
        }
    }
}

Онлайн демо

0
ответ дан Christophe 31 March 2019 в 01:21
поделиться

Когда вы удаляете слово, длина строки уменьшается. Но вы все еще продолжаете цикл до исходной длины строки. Простое решение - избавиться от length_of_line и вызывать line.length() везде, где вам нужна длина.

0
ответ дан David Schwartz 31 March 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: