在 python 中出现错误 "string index out of range"

Getting an error "string index out of range" in python

我正在创建一个代码来编码输入 word.Letters 中的输入文本被转换为数字并存储在 list.Here 中是我使用的代码,

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 

>>>

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

问题在于,由于 Python 是 0 索引的,您需要调整循环的结束范围。 len(y) 是一个数字,但可互换对象的最后一个索引总是 len(y) - 1。如果您相应地调整循环,您的问题应该得到解决。

但是,正如另一位用户评论的那样,如果您打算使用 while 循环,请务必在代码块 之后 递增它;否则你总是会跳过第一个元素。

while y<=len(x) - 1:
   # do code
   y += 1

while y < len(x):
   # do code
   y += 1

更好的是,使用 for 循环:

for i in range(len(x)):
   # do code

看看你的循环。即使在 y == len(x) 时,您也会 运行 循环,并且您首先碰到 y 。因此,如果字符串为 3,即使 x[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]

您可以使用列表理解来做到这一点。

z = [(1000 if letter == " " else 1001 if letter == "a" else 1002 if letter == "b" else '') for letter in input("input the word: ")]
x = [y for y in z if y]