索引错误:字符串超出范围,但它不应该超出范围?

时间:2016-08-17 05:56:04

标签: python python-3.x encryption

好吧所以我正在制作一个编码器/解码器,目前我正在测试看看我的想法是否可行,但是我不断收到错误告诉我,我的字符串索引超出范围时它不应该是#t首先要超出范围。

message = "abc"
#Should come out as 212223
translated = ' '


n = 1
while n >= 0:
    t = message[n]
    if t == 'a':
        translated = translated + '21'
    elif t == 'b':
        translated = translated + '22'
    elif t == 'c':
        translated = translated + '23'
    while n <= len(message):
        n = n + 1
print(translated)

这对我来说非常有意义所以我很难找到适当的帮助来解决我正在做的事情,所以我可以得到一些帮助吗?一个链接,一个解决方案,我做错了什么以及如何解决它?感谢

3 个答案:

答案 0 :(得分:3)

n = 0
while n >= 0:

当你继续递增n时,你有一个无限循环。 在某些时候message[n]将超出范围。

您应该将while n <= len(message):移动到主循环而不是当前循环。

更好的方法是使用message循环直接在for上进行迭代:

for t in message:
    if t == 'a':
        translated = translated + '21'
    elif t == 'b':
        translated = translated + '22'
    elif t == 'c':
        translated = translated + '23'

答案 1 :(得分:0)

下面:

while n <= len(message):
    n = n + 1

需要改为:

while n < len(message):
    n = n + 1

字符串的最后一个索引将是len(message) - 1,因为索引从0开始。 我只是立即将n设置为len(消息) - 1。

答案 2 :(得分:0)

因为在最后一个循环中你正在使用t = message [3] ..这是你的错误的原因。如果消息变量包含“abc”,则只能访问t = message [0],t = message [1],t = message [2]。所以试试这个

message = "abc"
#Should come out as 212223
translated = ' '


n = 1
while n >= 0:
    t = message[n-1]
    if t == 'a':
        translated = translated + '21'
    elif t == 'b':
        translated = translated + '22'
    elif t == 'c':
        translated = translated + '23'
    while n <= len(message):
        n = n + 1
print(translated)