为了账号安全,请及时绑定邮箱和手机立即绑定

递归中的全局变量。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 关注
  • 309 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信