在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