3 回答

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個贊
str[i]
如果大于或等于 的長度,將引發(fā)此index out of range
異常。您應(yīng)該將基本情況更改為:i
str
if (i >= len(str)): return 0

TA貢獻(xiàn)1793條經(jīng)驗(yàn) 獲得超6個贊
該行if (str[i] == None):
不執(zhí)行您希望它執(zhí)行的操作。None
這看起來像是在嘗試檢查索引是否超出了字符串的末尾,但 Python 中的字符串在最后一個真實(shí)字符之后沒有。相反,當(dāng)您嘗試索引超過末尾時,您會得到所描述的異常。
相反,您應(yīng)該比較i
,len(str)
它是數(shù)字字符串的長度。由于索引從零開始,索引等于 就len(str)
在末尾,所以你可能想要:
if i >= len(str): return 0
我還會仔細(xì)檢查返回零是否是您想要執(zhí)行的操作。如果您找到大寫字母,則將從其他條件案例中返回它。在不同情況下返回不同類型并不總是理想的,因?yàn)檎{(diào)用者可能很難知道他們可以對結(jié)果使用哪些 API。返回一個空字符串,或者None
可能比返回一個數(shù)字更有意義。

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個贊
使用 str[i]==None 將“強(qiáng)制”python 確定 str[i] 的值,該值不存在,因此索引超出范圍錯誤。您可以使用 len(str) 和 i 來確定是否到達(dá)字符串末尾:
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
添加回答
舉報(bào)