Python调试:当负号位于前面时出现奇怪的事件

时间:2018-03-10 05:23:50

标签: python

我正在做一个作业问题。

编写一个程序divisible_by_11(num),以返回num的可分性 11.即divisible_by_11(num)应返回True是num可被11整除, 否则为假。递归地实现此函数并使用以下算法。

注意:如果奇数位之和的差值,则数字可以被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
  

问题是用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,我的代码就会失败。谁能告诉我发生了什么?

1 个答案:

答案 0 :(得分:0)

备用表格的问题是由于操作顺序。一元减运算符比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