我尝试使用以下代码反转字符串!
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
任何人,请帮忙!
答案 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