Ошибка: string index out of range, почему индекс выпадает?

text = '~qFmobwfpfhe`pin5unugkaqfyGhfcYf|chtugenbrtchtwl'

def mix(text):
 string = text[::2]
 for x in range(len(string)):
   string = "".join(chr(ord(string[x])-1))
   if x%2 == 0:
     chr(ord(string[x])-2)
   else:                     
     flag = string[::-1]
     return flag

print(mix(text))

Подскажите,где я в коде накосячил?

Ошибка:

string = "".join(chr(ord(string[x])-1))
IndexError: string index out of range

Работать должен следующим образом:программа берет строчку из text и сокращает её до состояния ~Fowph`i5ngafGfY|huebthw -> образовав новую строчку (string), далее надо брать каждый символ по индексу (из string) и преобразовывать по алгоритму:

   if x%2 == 0:
     chr(ord(string[x])-2)
   else:                     
     flag = string[::-1]

И должен получится более читабельный вид этой строчки


Ответы (1 шт):

Автор решения: Maxim Timakov

Ошибка состоит в том, что на первом проходе цикла переменной string присваивается строка из одного символа.

Если я правильно понял, то первая часть алгоритма должна выбрасывать символы на нечетных местах.

Для этого подойдет следующий код

text = '~qFmobwfpfhe`pin5unugkaqfyGhfcYf|chtugenbrtchtwl'

# оставить только символы с четными индексами
tmp = [text[idx] for idx in range(0, len(text), 2)]

print("".join(tmp))

Получим:

text = '~qFmobwfpfhe`pin5unugkaqfyGhfcYf|chtugenbrtchtwl'

def mix(text):
    # string = text[::2]
    # оставить только символы с четными индексами
    tmp = [text[idx] for idx in range(0, len(text), 2)]
    
    string = "".join(tmp)
    
    # для каждого символа строки провести какие то дейтсвия
    for x in range(len(string)):
        # string = "".join(chr(ord(string[x])-1))
        if x%2 == 0:
            chr(ord(string[x])-2) # <<< бессмыслица
        else:                     
            flag = string[::-1] # <<< бессмыслица
            return flag # <<< бессмыслица
 
print(mix(text))

Так код не будет падать с ошибкой, но так же по прежнему не будет иметь смысла.

→ Ссылка