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

时间:2017-10-26 19:19:02

标签: python python-3.x

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

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

任何人,请帮忙!

4 个答案:

答案 0 :(得分:2)

这是一个&#34; off-by-one&#34;错误。手动查看字符串,然后手动与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

所以,由于这感觉就像是一个家庭作业问题,我不会给出一个确切的解决方案,但请留下&#34;鉴于上述情况,你会如何解决?&#34;

如果这不是一个家庭作业问题,请考虑已经实施的other methods of reversing strings(&#34;为什么重新发明轮子?!&#34;)

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

a = len(text)返回文本中的字符数。对于&#34;你好&#34; a等于5 并且文本中的字符从0到4索引,如文本[0] =&#39; H&#39;,文本[1] =&#39; o&#39;,文本[2] =&#39; l& #39;,文字[3] =&#39; l&#39;和文字[4] =&#39; o&#39;。所以文本[5]无效。现在让我们看看范围函数如何生成数字:

范围(开始,停止,步骤)

start:序列的起始编号。

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

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

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

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

范围(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")

答案 3 :(得分:0)

另一种方法。

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