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

shifr = 2
letters = ['a', 'b', 'c', 'd', 'e', 'f']
shifr_text = 'acd'
arr_shifr = []

for i in range(len(shifr_text)):
    for ii in range(len(letters)):
        if shifr_text[i] == letters[ii]:
            arr_shifr.append(letters[ii + shifr])

for k in range(len(arr_shifr)):
    print(arr_shifr[k], end="")

выводиться 'cef'
Но если в shifr поставить число больше то выдает ошибку что индекса нету как сделать так чтобы массив перезаписывался или когда конец начинался с начала
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 3
@o5a
Для избежания выхода за пределы списка можно использовать модуль по количеству символов в списке, он "зациклит" индекс
arr_shifr.append(letters[(ii + shifr)%len(letters)])
Ответ написан
Комментировать
MinTnt
@MinTnt
Во первых, для поставленной задачи лучше подойдёт словарь, чем поданный в условии цикл.
letters = {'a': 'c', 'b': 'd', 'c': 'e', 'd': 'f', 'e': 'a', 'f': 'b'}

А для создания нового списка с соответствующими значениями можно
arr_shifr = [letters[i] for i in shifr_text]
Ответ написан
Комментировать
@NicolayChe
Римский шифр делается:
1-й вариант- с проверкой выхода за пределы и расчетом заново, т.е. если полученный индекс больше длины алфавита, то от индекса отнимается длина алфавита
2-й вариант - используй двойной алфавит 'abcdefabcdef', но при этом нужно использовать break для for iii
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы