如何使用类创建数字和函数

时间:2016-12-16 19:23:15

标签: python class recursion

我们今年刚开始在学校学习python,到目前为止我们只用tkinter画布(绘图房子,鲜花等)做基本的东西,我们的老师有点糟糕,所以我现在必须学习我所知道的一切。

我一直在考虑编写函数来查找数字的数字总和(最好没有递归)的想法,所以我想出了这个:

def sum(n):
    total=0
    for letter in str(n):
        total+=int(letter)
    return total

然而,我有一个关于使用递归来找到"绝对挖掘的想法。数字的总和",例如99 = 9 + 9 = 18 => 1 + 8 = 9 我想出了这个

total=0
def suma(n):
    global total

    def part_sum(n):
        global total
        total_part=0

        for letter in str(n): 
            total_part+=int(letter) 
        total=total_part 

        if total<10:
            print(total)
        else:
            part_sum(total)

    part_sum(n)    

它基本上是n的总和,检查它是否低于n,如果不是它再次运行它(基本递归),但它使用一堆变量和全局变量(由于某种原因,它们很糟糕)我已经听过了)并且我很清楚使用类和对象可以更有效地完成它,但是我只看了几个视频,所以我不太擅长它。 / p>

有人可以编辑我的代码并在此处粘贴一些注意事项以帮助我理解吗?

3 个答案:

答案 0 :(得分:1)

递归经常被滥用。我相信如果没有它,你可以更清楚地写出suma()。以你已经创造的东西为基础。

def sum(n):
    total=0
    for letter in str(n):
        total+=int(letter)
    return total

def suma(n):
    while n >= 10:
        n = sum(n)
    return n

答案 1 :(得分:0)

这是我的解决方案

def rec_dig_sum(n):
    total = str(sum(map(int, str(n))))
    while len(total)>1:
        total = str(sum(map(int, total)))
    return int(total)

您可以认为map正在接受map(function, [input1, input2, input3])并返回[function(input1), function(input2), function(input3)]

答案 2 :(得分:0)

而不是保存变量并在循环的每次迭代中更新它(正常的方法):

def recursive_sum(num):
    if num >= 10:
        return recursive_sum(sum(map(int, str(num))))
    return num

将其作为参数发送给新的函数调用:

def rc(n, c=0):
    if n:
        return rc(n//10, c+n%10)
    return c

def rs(n):
    if n >= 10:
        return rs(rc(n))
    return n

你也可以做一个递归函数来进行初始求和,并在继续这样做的函数中使用它直到它只有一位数:

{{1}}