“給定一個由字母和特殊字符/數字組成的字串,使用遞回將這些字母連接成一個字串并回傳它。”
我的代碼在下面,我仍在學習遞回,并且一直在試圖追蹤它。我在這段代碼中嘗試了一堆不同的行,但我不知道如何修復我到目前為止所做的:
def decoder(encryptedStr):
if len(encryptedStr) != 0:
if encryptedStr[0].isalpha() == True:
decoded = encryptedStr[0]
decoded.join(decoder(encryptedStr[1:]))
print(decoded)
else:
decoder(encryptedStr[1:])
我還沒有讓它回傳任何東西,因為我正在努力解決我必須將新字母加入輸出字串的部分。而不是 .join 我也試過:
decoded = decoder(encryptedStr[1:])
但它不起作用 bc Nonetype??
uj5u.com熱心網友回復:
您的主要問題是您沒有return,但是您的方法存在一些問題,使這比需要的更復雜。
在進行遞回時首先考慮尾部 - 您的最終條件是什么,以及您如何決定繼續。通常使用這種方法,您可以執行以下操作:1) 處理串列中的單個值,2) 讓遞回方法處理其余部分,3) 合并結果。
這里尾部優先回傳的一個簡單指標是如果字串為空則不回傳任何內容:
def decoder(encryptedStr):
if len(encryptedStr) == 0:
return ""
...
現在,在每次運行中,我們希望對一個字母進行操作,并將其余字母傳遞給遞回呼叫。忽略特殊字符要求,你會得到這樣的東西:
def decoder(encryptedStr):
if len(encryptedStr) == 0:
return ""
first = encryptedStr[0]
rest = decoder(encryptedStr[1:])
return first rest
現在我們可以處理我們想要省略字母的特殊情況。
def decoder(encryptedStr):
if len(encryptedStr) == 0:
return ""
first = encryptedStr[0]
rest = decoder(encryptedStr[1:])
if not first.isalpha():
first = ""
return first rest
這就是全部!
一些重構的獎勵:
def clean(letter):
return letter if letter.isalpha() else ""
def decoder(encrypted):
if len(encrypted) == 0:
return ""
return clean(encrypted[0]) decoder(encrypted[1:])
uj5u.com熱心網友回復:
這里有一堆問題:
join在那種情況下,我不認為你想要它做什么。如果您想將一些字串添加在一起,只需使用=.join將decoded在任何decoder(encryptedStr[1:])回傳之間插入字符。- 您沒有 的情況
len(encryptedStr) == 0,因此它回傳 的默認值None。這就是為什么你不能將它的結果附加到decoded.
uj5u.com熱心網友回復:
如果無事可做,立即回傳。否則,如果匹配條件,則取第一個字母并添加遞回呼叫的結果(其中引數是沒有第一個字符的當前加密字串)。
def decoder(encrypted):
if not encrypted:
return ''
decrypted = encrypted[0] if encrypted[0].isalpha() else ''
return decrypted decoder(encrypted[1:])
print(decoder('Abc123rtZ5'))
結果是AbcrtZ。
獎金資訊(如評論中提到的@JonSG):
運行它,print(decoder('A' * 1000))你就會明白為什么遞回對于這個任務來說是個壞主意。
uj5u.com熱心網友回復:
每個遞回函式都必須有一個停止遞回的基本條件,否則函式會無限呼叫自身。僅將輸入字串的字母遞回連接為單個輸出字串:
some_string = "I2L4o2v3e P;y|t!o#n"
def decoder(encryptedStr, decoded = ""):
if len(encryptedStr) == 0: # Base condition
return decoded
if encryptedStr[0].isalpha():
decoded = encryptedStr[0]
return decoder(encryptedStr[1:], decoded)
# If the char in the index [0] is not a letter it will be sliced out.
return decoder(encryptedStr[1:], decoded)
print(decoder(some_string))
輸出:
ILovePython
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/372043.html
上一篇:在C#中比較視覺上相似的字串
