美文网首页
codewars(python)练习笔记五:创建数字的根函数

codewars(python)练习笔记五:创建数字的根函数

作者: 曹波波 | 来源:发表于2018-05-07 19:56 被阅读19次

codewars(python)练习笔记五:创建数字的根函数

题目:

In this kata, you must create a digital root function.

A digital root is the recursive sum of all the digits in a number. Given n, take the sum of the digits of n. If that value has two digits, continue reducing in this way until a single-digit number is produced. This is only applicable to the natural numbers.

题目大意:

数字根是数字中所有数字的递归和。给定n,取n的数字的和,如果该值有两位数字,继续以这种方式减少,直到产生一位数。这只适用于自然数。

digital_root(16)
=> 1 + 6
=> 7

digital_root(942)
=> 9 + 4 + 2
=> 15 ...
=> 1 + 5
=> 6

digital_root(132189)
=> 1 + 3 + 2 + 1 + 8 + 9
=> 24 ...
=> 2 + 4
=> 6

digital_root(493193)
=> 4 + 9 + 3 + 1 + 9 + 3
=> 29 ...
=> 2 + 9
=> 11 ...
=> 1 + 1
=> 2

简单解法:

def digital_root(n):
    n_str = str(n)
    temp = 0
    for i in n_str:
        temp = temp + int(i) 
    if temp > 9:
        return digital_root(temp)
    else:
        return temp

由于这道题跟之前的获取多位数字的乘法持久性比较类似,所以类似的衍生算法有以下几个:

1)使用while 循环代替递归循环

#!/usr/bin/python

def digital_root(n):
    while n > 9:
        n_str = str(n)
        n = 0
        for i in n_str:
            n = n + int(i) 
    return n

2)使用reduce()函数

#!/usr/bin/python
from functools import reduce

def digital_root(n):
    while n >= 10:
        n = reduce(lambda x, y: x + y, [int(i) for i in str(n)])
    return n

3)使用operator.add

#!/usr/bin/python
import operator

def digital_root(n):
    while n >= 10:
        n = reduce(operator.add, [int(i) for i in str(n)])
    return n

相关文章

网友评论

      本文标题:codewars(python)练习笔记五:创建数字的根函数

      本文链接:https://www.haomeiwen.com/subject/ufovrftx.html