理解Python中取模运算符(%)的困惑
ans=0
while ans<50:
if ans%10==0:
ans+=5
elif ans%5==0:
ans+=10
else:
ans+=15
print(ans)
我非常抱歉浪费你们宝贵的时间,但我就是搞不懂这个值是怎么变成55的。
我不太明白代码的执行过程,所以希望有人能给我解释一下。
1 个回答
1
在Python中,取模运算符(%
)实际上是调用了一个叫做__mod__
的方法。这个方法的作用是返回整数除法的余数,如果没有余数,就返回0。
为了让你更容易理解,这里有一些具体的例子:
5 % 2
=>1
(2可以在5里面放进去两次,得到4,剩下1)50 % 5
=>0
(50可以被5整除,没有余数)0 % n
=>0
(任何数乘以0都是0,所以0可以被任何数整除,结果都是0)
这也说明了你的问题;如果一开始就把值设为0,那么第一次取模检查总是会通过。你可以试着把它初始化为None
,然后把else
块放到一个最开始的if ans is None:
中,这样就可以把值设为15。第一次循环后就不需要再保留else
块,因为15的倍数一定能被5整除。当然,如果这是为了模拟你真实的问题,那就保留else
块,但还是要把ans
初始化为None
,并先检查这个。
接下来解释一下代码的流程:
ans=0
while ans<50:
# check if ans is an integer multiple of 10. First run: True. Add 5.
# Now ans is 5 and this check won't pass on the second run
if ans%10==0:
ans+=5
# check if ans is an integer multiple of 5. First run never reaches here.
# Second run reaches here, adds 10 so the next run is also not a
# multiple of 10 (5, 15, 25, 35, 45, 55)
elif ans%5==0:
ans+=10
else:
ans+=15
# Print whatever is in ans now (55, always)
print(ans)
我提议的修改仍然会得到55这个结果,因为它会直接跳到15,而15仍然不能被10整除。
你也可以看看维基百科关于取模运算的内容,获取更多信息。