Python 我的脚本不断返回索引器错误:字符串索引超出范围
因此,我目前正在编写的脚本的一部分是一个由几个单词组成的列表。我希望Python一个接一个地循环单词,并反转每个单词 我试着这样做: 假设我输入了“Hello world这是一个python脚本”Python 我的脚本不断返回索引器错误:字符串索引超出范围,python,string,python-3.x,Python,String,Python 3.x,因此,我目前正在编写的脚本的一部分是一个由几个单词组成的列表。我希望Python一个接一个地循环单词,并反转每个单词 我试着这样做: 假设我输入了“Hello world这是一个python脚本” def main(): print() ptext = input('Please input the plaintext...') ctext = '' plist=ptext.split(' ') for item in plist: i =
def main():
print()
ptext = input('Please input the plaintext...')
ctext = ''
plist=ptext.split(' ')
for item in plist:
i = len(item)
while i>=0:
ctext = ctext + str(item)[i]
i=i-1
print()
print('The ciphertext is: ',ctext.lower()) #Print out the ciphertext
print()
但我一直得到:
Traceback (most recent call last):
File "<pyshell#137>", line 2, in <module>
print((item)[i],end =(' '))
IndexError: string index out of range
我清楚地告诉脚本I=lenitem,那么它怎么可能超出范围
我最好也是唯一的猜测是,它取一个单词的长度,比如“world”,它的长度是5,然后用在一个单词上,比如“is”或“a”。是否可以让Python只计算每个单词的长度?我想不出一个办法 替换:
ctext = ctext + str(item)[i]
与:
并且,将i初始化为:
字符串的第一个索引是0,最后一个是“长度-1”。所以您需要设置i=lenitem-1,因为在第一次迭代中,您基本上尝试访问stritem[lenitem] 除此之外,str调用应该是不必要的,所以只需要项[i]
还请注意,如果要“反转”字符串,实际上可以执行反转的\u string=original\u string[:-1]。[::-1]表示它应该返回字符串,但从结尾和步骤到开头只有一个字符。Python列表索引是基于零的。如果列表有五个项目,则有效索引为项目[0]到项目[4]。项目[i]仍然超出范围,因为i=lenitem。@JohnGordon:是。你是敏锐的观察者;。更新它。更好的是,完全删除str。约翰·戈登和匿名你们太棒了!!非常感谢!现在开始工作了@arrivillaga:如果您检查逻辑,在实际操作中,只打印字符串的小写版本,作为输入,不带空格,按旋转顺序打印。打印ptext.lower.replace“”,[::-1]就足够了。所以跳过了重构部分非常感谢您花时间回答!你的建议行得通
ctext = ctext + str(item[i])
# ^ access index of item
i = len(item) - 1 # because index starts with 0, and can be retrieved till `len - 1`