如何使用类生成数字和函数

2024-09-30 02:22:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我们今年刚开始在学校学习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,如果不是,它再次运行它(基本递归),但是它使用了一堆变量和全局变量(因为某些原因我听说是不好的),我很清楚使用类和对象可以更有效地完成,但是我只看了几个视频所以我不太擅长。你知道吗

有人可以编辑我的代码,并粘贴在这里与一些注释,以帮助我理解它吗?你知道吗


Tags: infortkinterdef画布数字global学校
3条回答

这是我的解决办法

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)]

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

def iterative_sum(num):
    while num >= 10:
        num = int(sum(map(int, str(num))))
    return num

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

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

递归经常被过度使用。我相信没有它你可以写得更清楚。建立在你已经创造的基础上。你知道吗

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

相关问题 更多 >

    热门问题