首页 > 解决方案 > 在 python 中出现错误“字符串索引超出范围”

问题描述

我正在创建一个代码来对输入单词进行编码。输入文本中的字母被转换为数字并存储在列表中。这是我使用的代码,

z=input("input the word:")
x= z.strip()
y= -1
g=[ ]

while y<=len(x):
   y=y+1
   if x[y]==" ":
       g.insert(y,1000)
   if x[y]=="a":
     g.insert(y,1001)
   if x[y]=="b":
       g.insert(y,1002)    

等等.....

但我得到一个错误,

Traceback (most recent call last):
 File "C:\Users\USER\Desktop\enc.py", line 13, in <module> 
if x[y]==" ": 
IndexError: string index out of range 

>>>

如果有人告诉我代码中有什么问题,将不胜感激。

标签: pythonstringindexingrangeout

解决方案


看看你的循环。即使在 y == len(x) 时,你也会运行循环,并且你会碰到y第一件事。因此,如果字符串为 3,当 evenx[3]超出范围时,您将使用 y==4 进行循环。只需使用 for 循环。这就是他们的目的。

z=input("input the word:")
x= z.strip()
g=[ ]
for y in range(len(x)):
   if x[y]==" ":
       g.insert(y,1000)
   elif x[y]=="a":
       g.insert(y,1001)
   elif x[y]=="b":
       g.insert(y,1002)

我可能会使用for y,c in enumerate(x):,但我们将把它留作以后的练习。

所以,更好的是:

g=[]
for c in x:
    if c==' ':
        g.append(1000)
    elif c=='a':
        g.append(1001)
    elif c=='b':
        g.append(1002)

更好的方法是数据驱动:

mapping = {
    ' ': 1000,
    'a': 1001,
    'b': 1002
}
g = [mapping[c] for c in x]

推荐阅读