как исправить ValueError: список индекса вне диапазона - PullRequest
0 голосов
/ 01 октября 2019

Я получаю эту ошибку:

строка 23, в кодировании raw_out [i] [pos] = сообщение [pos] IndexError: индекс списка вне диапазона

для этой частиПрограмма:

def encode(message: str, key: int) -> str:
"""
Encode text using Rail-fence Cipher.

Replace all spaces with '_'.

:param message: Text to be encoded.
:param key: Encryption key.
:return: Decoded string.
"""
message = message.replace(" ", "_")

down = True
raw_out = []
out = ''
i = 0
for x in range(key):
    raw_out.append({})
for pos in range(len(message)):
    raw_out[i][pos] = message[pos]
    if i == key - 1:
        down = False
    if i == 0:
        down = True
    if down:
        i = i + 1
    else:
        i = i - 1
for p in raw_out:
    for q in p:
        out += p[q]
return out

Я не уверен, как исправить ошибку. Есть идеи?

1 Ответ

0 голосов
/ 01 октября 2019

Когда ключ равен единице или когда ключ больше длины строки, верните строку как есть. Не имеет смысла делать какую-либо обработку.

сразу после строки

message = message.replace(" ", "_")

вы можете проверить условие

if key == 1 or key > len(message):
    return message
...