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 =

因此,我目前正在编写的脚本的一部分是一个由几个单词组成的列表。我希望Python一个接一个地循环单词,并反转每个单词

我试着这样做:

假设我输入了“Hello world这是一个python脚本”

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`