为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

四季花海 2023-09-12 19:47:41
我试图获取字符串中的第一个大写字母,但我得到一个“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)
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

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

if (i >= len(str)):
    return 0


查看完整回答
反对 回复 2023-09-12
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

该行if (str[i] == None):不执行您希望它执行的操作。None这看起来像是在尝试检查索引是否超出了字符串的末尾,但 Python 中的字符串在最后一个真实字符之后没有。相反,当您尝试索引超过末尾时,您会得到所描述的异常。

相反,您应该比较ilen(str)它是数字字符串的长度。由于索引从零开始,索引等于 就len(str)在末尾,所以你可能想要:

if i >= len(str):
    return 0

我还会仔细检查返回零是否是您想要执行的操作。如果您找到大写字母,则将从其他条件案例中返回它。在不同情况下返回不同类型并不总是理想的,因为调用者可能很难知道他们可以对结果使用哪些 API。返回一个空字符串,或者None可能比返回一个数字更有意义。


查看完整回答
反对 回复 2023-09-12
?
月关宝盒

TA贡献1772条经验 获得超5个赞

使用 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


查看完整回答
反对 回复 2023-09-12
  • 3 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信