簡體   English   中英

遞歸 Function 內部 Function

[英]Recursive Function Inside of a Function

我正在嘗試編寫一個遞歸 function ,它會在一個文本中寫入多個字符串的出現次數。 我在這里使用遞歸的原因是因為我試圖以這種方式解決一個更復雜的問題,感覺一個簡單的循環不會那么有效或看起來很混亂。

所以我們有一個字符串 cat = 'cat kat not kat cat kat c not c' 和一個我們需要查找的字符串列表:search = ['cat', 'kat']。 我試圖返回一個列表,給出每個單詞的出現次數:result = [2, 3]。 這是我的代碼:

cat = 'cat kat not kat cat kat c not c'
search = ['cat', 'kat']
result = []

def cat_main(cat, search, result):
    for el in search:
        count1 = cat.count(el)
        return look_for_cat(el, search, count1, result)

def look_for_cat(el, search, count1, result):
    if count1 == 0:
        return result
    else:
        result.append(el)
        count1 -= 1
        look_for_cat(el, search, count1, result)

當我調用 cat_main function 時,它不會返回任何內容。 當我嘗試分別在兩個函數中打印東西時,它似乎可以工作,所以我可能犯了一些愚蠢的錯誤,但我不知道為什么它不返回任何東西。

調試代碼並逐步完成它的一個好方法是PythonTutor

但我會用這樣的列表理解來解決你的問題:

>>> [cat.split().count(word) for word in search]
[2, 3]

我強烈建議 BioGeek 解決方案,但是,如果你想在這里解決你的問題,那就是......

cat = 'cat kat not kat cat kat c not c'
search = ['cat', 'kat']
result = []

def cat_main(cat, search, result):
    result_list = []
    for el in search:
        count1 = cat.count(el)
        temp_result = look_for_cat(el, search, count1, result)
        result_list.append(temp_result)
    return result_list

def look_for_cat(el, search, count1, result):
    if count1 != 0:
        result.append(el)
        count1 -= 1
        look_for_cat(el, search, count1, result)
    return result

print(cat_main(cat, search, result))

如果你想讓它保持可讀性,那么你可以通過以下方式在不遞歸的情況下實現這一點:

cat = 'cat kat not kat cat kat c not c'
search = ['cat', 'kat']
result = []

for word in search:
     result.append(cat.split().count(word))

print(result) # [2, 3]

split()確保它將cat標記為單個單詞,因此搜索c將返回 2 而不是 4。

如果效率對您來說更重要,請參閱此問題的標記答案: Finding the occurrences of a word in a string in python 3

這應該有效(如果你只想通過遞歸)

cat = 'cat kat not kat cat kat c not c'
search = ['cat', 'kat']
result = []


def cat_main():
    for el in search:
        count1 = cat.count(el)
        print(count1)
        look_for_cat(el, count1) #if you return here it will exist out of function 
                                 #doesnt continue for further elements in search list


def look_for_cat(el, count1):
    if count1 == 0:
        return
    else:
        result.append(count1) #no need to append words according to your question, just their count

cat_main()
print(result)

暫無
暫無

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

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