索引超出范围,长度为1

时间:2020-04-14 02:16:11

标签: python

我正在练习用于反转字符串的递归函数。 只要m_pSPPI->QueryContextAttributes()中的引号之间没有空格,代码就可以正常工作。 但是,如果确实在str1 == ''中的引号之间放置一个空格,则会出现错误:字符串索引超出范围。 (因为索引-1和0都对str1有效,且带引号的空格) 我不明白为什么会发生此错误以及如何消除它。

str1 == ' '

4 个答案:

答案 0 :(得分:2)

您可以这样更改反向功能:

return str1[::-1]

这将反转,而与字符串的长度无关。希望这行得通。

答案 1 :(得分:1)

chars = [char for char in str1]
chars.reverse()
print(''.join(chars))

答案 2 :(得分:1)

正如Sam Stafford在另一个答案和gilch的评论中所说,更改基本大小写并在不带最后一个字符的情况下递归调用字符串函数将使该函数正常工作。像这样:

def reverse(str1):
    if len(str1) == 1:
        return str1
    else:
        return str1[-1] + reverse(str1[:-1])

答案 3 :(得分:0)

首先:分号是;,引号是'。 :)

字符串''' '不同-一个是空字符串,另一个是一个字符长的字符串。

您的递归函数通过将字符串切成越来越小的片段来工作。一旦到达空字符串,就需要返回而不是进一步切分。这被称为“基本案例” –一种特殊的检查,您无法通过进一步递归来解决该案例。

当您更改“基本大小写”检查以使其不再捕获空字符串('')时,它将中断该函数,因为它将继续尝试进行切片,从而引发异常你看到了。导致函数中断的str1的值为''(无空格),并且递归将始终以该值结尾,因此对代码进行此更改将始终中断它。