猿问

递归中的全局变量。Python

好的,我正在使用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。这是我尝试过的事情:

  1. 如果我将变量count放在lenRecur函数之外,则第一次可以正常运行,但是如果我在不重新启动python shell的情况下再次尝试,则计数(显然)不会重新启动,因此它会不断增加。

  2. 如果我更改它的count += 1count = 1也可以,但是输出(显然)是1。

因此,我的目标是使用递归来获取字符串的长度,但是我不知道如何跟踪字母的数量。我已经搜索了有关全局变量的信息,但是仍然很困难。我不知道我是否还不了解它,或者我的代码是否有问题。


Helenr
浏览 310回答 3
3回答

Qyouu

我认为您可以将计数作为第二个论点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)或猴子修补函数本身)更好。

繁星点点滴滴

您需要使变量计数为函数变量,例如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函数设置递归深度来解决此问题,我还是建议您采用其他简单的方法。
随时随地看视频慕课网APP

相关分类

Python
我要回答