在python IndexError中使用for循环反转字符串:字符串索引超出范围[重复]

Posted

技术标签:

【中文标题】在python IndexError中使用for循环反转字符串:字符串索引超出范围[重复]【英文标题】:Reverse the string using for loop in python IndexError: string index out of range [duplicate] 【发布时间】:2018-04-08 07:13:58 【问题描述】:

我尝试使用以下代码反转字符串!

def rev_string(text):
    a = len(text)
    for i in range(a,0,-1):
        print(text[i])

rev_string("Hello")

它显示以下错误:

  Traceback (most recent call last):
  File "rev_str.py", line 5, in <module>
    rev_string("Hello")
  File "rev_str.py", line 4, in rev_string
    print(text[i])
IndexError: string index out of range

我也试过这个代码但是字符串的最后一个字符无法打印。

def rev_string(text):
    a = len(text)
    for i in range(a-1,0,-1):
        print(text[i])
rev_string("Hello")

输出:

python3 rev_str.py
o
l
l
e

任何人,请帮忙!

【问题讨论】:

还有另一种方法可以准确地完成所要求但尚未回答的事情。严格来说,这个问题与#931092 并不完全相同。在这里,@Vimal 在每个字符后添加了一个额外的\n。所以一个完整的pythonic方式可以是:print('\n'.join("Hello"[::-1]))。那里可能还有其他答案,所以可能关闭得太快了。 @kvorobiev:这可能是重复的,但是是“一个接一个”的错误,而不是当前链接的“在 Python 中反转字符串” 【参考方案1】:

这是一个“逐一”错误。手动查看您的字符串,然后手动与range 的输出进行比较。请注意,当您这样做时,Python 遵循 C 的基于 0 的索引的约定。所以:

>>> test = 'ABCDE'
>>> print('The first character is: --><--'.format(test[0]))
The first character is: -->A<--
>>> a = len( test )
>>> [i for i in range(a, 0, -1)]
[5, 4, 3, 2, 1]
>>>

哎呀! 0在哪里?嗯,好吧,让我们试试索引 5:

>>> test[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

所以,由于这感觉像是一个家庭作业问题,我不会给出一个确切的解决方案,而是留下“鉴于上述情况,你将如何解决它?”

如果这不是家庭作业问题,请考虑已经实施的other methods of reversing strings(“为什么要重新发明***?!”)

【讨论】:

这就是我要找的答案!!!【参考方案2】:

您可以使用扩展切片 https://docs.python.org/2/whatsnew/2.3.html#extended-slices

str = 'hello world'
print(str[::-1])
>>>dlrow olleh

【讨论】:

不使用 [::-1] 任何方式谢谢【参考方案3】:

a = len(text) 返回文本中的字符数。对于“你好”,a 等于 5 text 中的字符从 0 到 4 进行索引,例如 text[0] = 'H'、text[1] = 'o'、text[2] = 'l'、text[3] = 'l' 和 text[ 4] = 'o'。所以 text[5] 无效。现在让我们看看 range 函数是如何生成数字的:

范围(开始、停止、步进)

start:序列的起始编号。

停止:生成最多但不包括该数字的数字。

step:序列中每个数字之间的差异。

range(4, 0, -1) 生成数字 4, 3, 2, 1

range(4, -1, -1) 生成数字 4, 3, 2, 1, 0

range(4, -2, -1) 生成数字 4, 3, 2, 1, 0, -1

所以你的范围应该是这样的:

rev_string(text):
    a = len(text)
    for i in range(a-1,-1,-1):
        print(text[i])
rev_string("Hello")

【讨论】:

谢谢!工作!我怀疑 (a-1,-1,-1) 的含义是什么,请您解释一下...>! @VimalRaj 已编辑 谢谢你!再次帮助满员!?☺【参考方案4】:

只是另一种方法。

def rev_string(text):
    a = len(text)
    for i in range(1, a+1):
        print(text[a-i])
rev_string("Hello")

输出:

o
l
l
e
H

它是如何工作的:

range(1, a+1) 产生 range(1,6) = [1,2,3,4,5]

a = 5

循环迭代:

iteration 1: i = 1, a-i = 5-1 = 4, text[4] = o 
iteration 2: i = 2, a-i = 5-2 = 3, text[3] = l 
iteration 3: i = 3, a-i = 5-3 = 2, text[2] = l 
iteration 4: i = 4, a-i = 5-4 = 1, text[1] = e 
iteration 5: i = 5, a-i = 5-5 = o, text[0] = H 

【讨论】:

谢谢!帮了我很多!杀戮解释..... @VimalRaj 如果有帮助,请不要忘记将其标记为答案或点赞 :) 我也很想这样做,但我没有 15 声望@utengr 所以! 如果我得到那么多,我会做@utengr

以上是关于在python IndexError中使用for循环反转字符串:字符串索引超出范围[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中修复“IndexError:元组索引超出范围”?

python-爬取中国大学排名网站信息IndexError:list index out of range

python-爬取中国大学排名网站信息IndexError:list index out of range

for循环子命令中的bash变量扩展[重复]

python 3.6 在使用 sys.argv 时显示 IndexError

如何在 Python 中调试“IndexError:标量变量的无效索引”错误?