簡體   English   中英

Python:字符串索引超出范圍,試圖找到第一個大寫字母

[英]Python :string index out of range with trying to find first capital letter

我正在嘗試獲取字符串中的第一個大寫字母,但出現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)

如果i大於或等於str的長度, str str[i]將引發此index out of range異常。 您應該將基本情況更改為:

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

if (str[i] == None):不做你想做的事。 這似乎是在嘗試檢查您的索引是否在字符串的末尾,但是 Python 中的字符串在最后一個真實字符之后沒有None 相反,當您嘗試索引越過末尾時,您會得到您所描述的異常。

相反,您應該將ilen(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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM