亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遞歸中的全局變量。Python

遞歸中的全局變量。Python

Helenr 2021-03-29 17:11:58
好的,我正在使用Python 2.7.3,這是我的代碼:def lenRecur(s):     count = 0    def isChar(c):        c = c.lower()        ans=''        for s in c:            if s in 'abcdefghijklmnopqrstuvwxyz':                ans += s        return ans    def leng(s):        global count        if len(s)==0:            return count        else:            count += 1            return leng(s[1:])    return leng(isChar(s))我正在嘗試修改函數count內的變量leng。這是我嘗試過的事情:如果我將變量count放在lenRecur函數之外,則第一次可以正常運行,但是如果我在不重新啟動python shell的情況下再次嘗試,則計數(顯然)不會重新啟動,因此它會不斷增加。如果我更改它的count += 1行count = 1也可以,但是輸出(顯然)是1。因此,我的目標是使用遞歸來獲取字符串的長度,但是我不知道如何跟蹤字母的數量。我已經搜索了有關全局變量的信息,但是仍然很困難。我不知道我是否還不了解它,或者我的代碼是否有問題。
查看完整描述

3 回答

?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

我認為您可以將計數作為第二個論點


def anything(s):

    def leng(s, count):

        if not s:

            return count

        return leng(s[1:], count + 1)


    return leng(isChar(s), 0)

這比從外部范圍屏蔽對象(例如使用可變對象(list或dict)或猴子修補函數本身)更好。


查看完整回答
反對 回復 2021-04-06
?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

您需要使變量計數為函數變量,例如


def lenRecur(s):

? ? lenRecur.count = 0

但是,我發現代碼存在一些問題。


1)如果您嘗試通過遞歸查找字符串中的字母數,則可以這樣做:


def lenRecur(s):

? ? def leng(s, count = 0):

? ? ? ? ? ? if not s:

? ? ? ? ? ? ? ? ? ? return count

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? ? ? count += int(s[0].isalpha())

? ? ? ? ? ? ? ? ? ? return leng(s[1:], count)

? ? return leng(s)

但是我還是更喜歡用一個函數來完成任務,就像根本沒有leng方法一樣。


2)如果您的目標只是查找字符串中的字母數,我希望使用列表理解


def alphalen(s):

? ? return sum([1 for ch in s if ch.isalpha()])

如果這不是學習目的,我建議您避免遞歸。因為,該解決方案不能用于較大的字符串(例如,從文件內容中查找字母計數)。您可能會遇到“最大遞歸深度超過”的RunTimeError。


即使您可以通過setrecursionlimit函數設置遞歸深度來解決此問題,我還是建議您采用其他簡單的方法。


查看完整回答
反對 回復 2021-04-06
  • 3 回答
  • 0 關注
  • 333 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號