Python:尝试查找第一个大写字母时字符串索引超出范围

我试图获取字符串中的第一个大写字母,但我得到一个“index out of range error 我不知道这是否是递归的基本情况”。请有人帮助我


这是我的代码:


def firstCapital(str, i):

    if (str[i] == None):

        return 0

    if (str[i].isupper()):

        return str[i]

    return firstCapital(str, i + 1)


name = "geoRge"

res = firstCapital(name, 0)

if (res == 0):

    print("No uppercase letter")

else:

    print(res)


四季花海
浏览 117回答 3
3回答

宝慕林4294392

str[i]如果大于或等于 的长度,将引发此index out of range异常。您应该将基本情况更改为:istrif (i >= len(str)):     return 0

摇曳的蔷薇

该行if (str[i] == None):不执行您希望它执行的操作。None这看起来像是在尝试检查索引是否超出了字符串的末尾,但 Python 中的字符串在最后一个真实字符之后没有。相反,当您尝试索引超过末尾时,您会得到所描述的异常。相反,您应该比较i,len(str)它是数字字符串的长度。由于索引从零开始,索引等于 就len(str)在末尾,所以你可能想要:if i >= len(str):     return 0我还会仔细检查返回零是否是您想要执行的操作。如果您找到大写字母,则将从其他条件案例中返回它。在不同情况下返回不同类型并不总是理想的,因为调用者可能很难知道他们可以对结果使用哪些 API。返回一个空字符串,或者None可能比返回一个数字更有意义。

月关宝盒

使用 str[i]==None 将“强制”python 确定 str[i] 的值,该值不存在,因此索引超出范围错误。您可以使用 len(str) 和 i 来确定是否到达字符串末尾:def firstCapital(str, i):    if i>len(str)-1: #Instead of str[i]==None       return 0    if str[i].isupper():        return str[i]return firstCapital(str, i + 1)input : ('Ali',0) Output: 'A'Input: ('lia',0) Output:0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python