我正在做一个作业问题。
编写一个程序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
,我的代码就会失败。谁能告诉我发生了什么?
答案 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