python - 在 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
>>>
如果有人告诉我代码中有什么问题,将不胜感激。
解决方案
看看你的循环。即使在 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]
推荐阅读
- php - SQLSTATE [HY000]:一般错误:1005 无法创建表 `auth`.`order_items`
- sql - 从每一行中选择最高的结果
- char - 从 coinbase (PHP) 获取加密货币的所有交易价格
- flutter - Flutter 制作掷骰子动画
- sql - 计算百分比的正确方法?
- javascript - 找不到节点的导出名称(ButtonRadioGroupDirective 类 ...)
- android - Android Studio 版本控制 (VCS) - 如何忽略 Android Studio 3.6.x 中的文件?
- javascript - Firestore 将身份验证添加到请求
- sql-server - In Azure Logic Apps ARM template, what are the possible values for the AuthType property for a SQL Server connector using On-Premise Data Gateway?
- javascript - 在项目之间共享 JS 代码的另一种选择,然后是 yarn 工作区(monorepo)或公共/私有 npm 包