首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建数字根函数

创建数字根函数
EN

Stack Overflow用户
提问于 2017-02-04 15:55:31
回答 2查看 3.3K关注 0票数 1

我遇到了一个奇怪的问题:

数字根函数如下所示:

代码语言:javascript
复制
digital_root(493193)
=> 4 + 9 + 3 + 1 + 9 + 3
=> 29 ...
=> 2 + 9
=> 11 ...
=> 1 + 1
=> 2

我的回答是:

代码语言:javascript
复制
def digital_root(n):
    k = 10
    while k > 9:
        k = reduce(lambda x,y: int(x)+int(y), list(str(n)))
    return k

我把k设为10,这样它就会直接进入循环。但这位在线法官表示,这花费了太多时间。

我尝试另一种解决方案:

代码语言:javascript
复制
def digital_root(n):
    while n > 9:
        n = reduce(lambda x,y: int(x)+int(y), list(str(n)))
    return n

然后问题解决了。我能搞清楚这两种密码有什么区别

顺便说一句,我用的是网上代码战法官。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-04 16:04:33

这里的问题是,您有一个无限循环,并且您的第一个解决方案不是慢的,而是错误的。

代码语言:javascript
复制
def digital_root(n):
    k = 10
    while k > 9:
        k = reduce(lambda x,y: int(x)+int(y), list(str(n)))
    return k

第一个reduce给出29。因此,k > 9,它再次这样做,但由于您不是重新注入k,而是重用n,那么您将再次获得29

第二种解决方案是正确的,因为它改变了&只要n大于9就重新注入它(如果是n <= 9,则不会进入循环,因为在这种情况下,数字根本身就是数字)。

编辑:对于这种特殊情况,您根本不需要reduce。该代码更清晰,而且可能更快:

代码语言:javascript
复制
def digital_root(n):
    while n > 9:
        n = sum(int(x) for x in str(n))
    return n

(在生成器理解中,n的所有整数转换数字之和)

票数 4
EN

Stack Overflow用户

发布于 2017-02-04 16:26:01

同样,您也可以这样做:

代码语言:javascript
复制
def reduce_root(num = 0):
    if isinstance(num, int):
        return [k for k in str(num)]
    else:
        raise Exception("input number must be an integer!")

def digital_root(num = 0):
    number = reduce_root(num)
    print("Number: {}".format(num))
    while True:
        if len(number) == 1:
            break
        else:
            print("=> {}".format(" + ".join(k for k in number)))
            s = sum(int(k) for k in number)
            print("=> {}".format(s))
            number = reduce_root(s)

输出:

代码语言:javascript
复制
digital_root(100245)

Number: 100245
=> 1 + 0 + 0 + 2 + 4 + 5
=> 12
=> 1 + 2
=> 3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42042359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档