Python调试:负号在前面时的奇怪事件

2024-04-26 10:11:04 发布

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

我在做作业题。你知道吗

编写一个程序,用11整除(num),返回num的可整除性 11点之前。i、 e.divisible_by_11(num)应返回True is num is divisible by 11, 否则为假。使用以下算法递归实现此函数。你知道吗

注:如果奇数和之间的差值 偶数之和可以被11整除。注意0可以被11整除。你知道吗

def divisible_by_11(num):
    def helper(num,i):
        if num==0:
            return 0
        elif i%2:
            return helper(num//10,i+1)-num%10

Question is about replacing the above line with return -num%10+ helper(num//10,i+1)

        elif i%2==0:
            return num%10+helper(num//10,i+1)

    return helper(num,0)%11==0

但是,如果我写的是return -num%10+ helper(num//10,i+1)而不是return helper(num//10,i+1)-num%10,代码就会失败。有人能告诉我发生了什么事吗?你知道吗


Tags: 函数程序helper算法truebyreturnis
1条回答
网友
1楼 · 发布于 2024-04-26 10:11:04

备用表格的问题是由于操作顺序造成的。一元减号运算符比mod运算符绑定得更紧密。也就是说,表达式-num%10被解释为(-num) % 10,负数的模与其最后一个数字不同。你知道吗

有几种方法可以解决它。最简单的方法可能是添加自己的括号,以便mod首先发生:return -(num%10) + helper(num//10,i+1)应该按预期工作。你知道吗

与这个问题无关,我非常怀疑您的赋值是否允许您在最终返回中执行%11,因为该操作是您解决整个问题所需的全部,而不需要其他操作!你知道吗

相反,我怀疑它也希望您对该部分使用递归(可能不希望将数字相加)。与其return helper(num,0)%11==0,不如尝试:

while num > 10:
    num = helper(num, 0)

return num == 0

相关问题 更多 >