python Indexerror:我的密码中的字符串索引超出范围

时间:2015-03-15 20:07:48

标签: python-3.4

有谁知道为什么会出现这种错误?错误与标题中的错误完全一样,indexerror:String index超出范围。 我的代码是:

import random

Cipher = input("What would you like to encrypt? ")

alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] 

a = 0

aValue = True

while aValue == True:
    for letter in Cipher:
        pos = random.randint(0,25)
        letter = alphabet[pos]
        if letter == 'a':
            lol = 0
        else:
            if a >= 24:
                aValue = False
            if Cipher[a] == 'a' or Cipher[a] == 'A': #It says the error occurs on this line
                Cipher = Cipher.replace(Cipher[a], letter)
            a = a + 1

print("Your final message is: " + Cipher + ".")

我只放了1个字母,因为它不会让我把所有的代码都放进去。我希望你能帮助我。谢谢, -space

1 个答案:

答案 0 :(得分:0)

for循环完成后,变量 a 将等于 Cipher 的长度。例如,如果密文长度为五个字符,那么 a 将等于5.这是因为一个对于 Cipher 中的每个字母递增一次

然后,如果 aValue 尚未设置为false,则while循环生效,for循环再次运行。如果发生这种情况,变量 a 永远不会重置,并且它仍然保持其先前的值。如果 Cipher 的长度为5且 a 等于5,那么 Cipher [a] 将引用 Cipher的第六个字母。这封信不存在,因为在这种情况下只有五个字母长。这是抛出异常的地方。

要解决此问题,请确保 a 始终小于所有循环的所有迭代的 Cipher 的长度。