在 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]
我正在创建一个代码来编码输入 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]