[英]Recursive Word Checking in Python
試圖檢查一個單詞是否可以由一個字符列表組成。 如果能夠從機架中的字母組成單詞,則應返回單詞;如果不能,則返回空白字符串。 我收到錯誤消息TypeError: can only concatenate list (not "str") to list
。
def checkWord(rack,word,hold):
if word == "": return hold
if rack[0] == []: return ""
if rack[0] == word[0]: return checkWord(rack[1:], word[1:], hold)
return checkWord(rack[1:] + rack[0], word, hold)
print(checkWord(["a", "s", "m", "t", "p"], "am", "am"))
您不能將列表與字符串連接在一起,因此必須對兩個字符串都使用字符串,或者對兩個列表都使用字符串,請嘗試
def checkWord(rack,word,hold):
if word == "": return hold
if rack[0] == []: return ""
if rack[0] == word[0]: return checkWord(rack[1:], word[1:], hold)
return checkWord(str(rack[1:]) + str(rack[0]), word, hold)
print(checkWord(["a", "s", "m", "t", "p"], "am", "am"))
或這個
def checkWord(rack,word,hold):
if word == "": return hold
if rack[0] == []: return ""
if rack[0] == word[0]: return checkWord(rack[1:], word[1:], hold)
return checkWord(list(rack[1:]) + list(rack[0]), word, hold)
print(checkWord(["a", "s", "m", "t", "p"], "am", "am"))
bhansa評論說,您的問題是並置了rack[1:]
和rack[0]
。 如果rack
是列表,則slice rack[1:]
也是列表。 但是, rack[0]
將是列表中的單個值。 您可能要用[rack[0]]
(用單個項目創建一個新列表)或用rack[:1]
(從列表中切出一個項目)代替rack[0]
。
值得注意的是,如果您輸入的rack
是字符串,那么您的原始代碼將起作用(至少,其中一部分會起作用)。 這是因為字符串是一種奇怪的容器,因為索引和切片都為您提供了另一個字符串。
最后要注意的是: if rack[0] == []: return ""
基本情況將永遠不會與您顯示的輸入一起運行。 它看起來是否在rack
列表中的第一項是另一個列表。 因為您要傳遞一個字符列表(並且僅在遞歸調用中重新排列它們),所以這永遠都不是正確的。 如果您在通過它可以工作rack
名單與末尾添加一個特殊sentenel值(這樣你就可以知道,當你完全旋轉的原始列表)。 但這不是你在做什么。 這種方法還會弄亂其他遞歸情況(因為它沒有任何方法可以將空列表前哨匹配字符后移回末尾)。
def checkWord(rack,word,hold):
try:
if word == "": return hold
if rack[0] == []: return ""
if rack[0] == word[0]: return checkWord(rack[1:], word[1:], hold)
return checkWord(str(rack[1:]) + str(rack[0]), word, hold)
except:
print('it cant')
checkWord(['a','c','b'],'ac','ac') ## return ac
checkWord(['a','c','b'],'dac','dac') ## return It cant
但是我認為這會混淆錯誤,您的函數要么返回true,要么陷入無限循環(如果機架中不包含字母),則應檢查字母是否處於保留狀態->存儲->檢查是否得到所有字母->如果返回返回保留字,否則繼續循環直到結束
而不是檢查word [0]並返回word [1:],而不是稍后通過這種方式,您還忘記添加一個“不能形成單詞”而不引起異常
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.