为什么Python中40//60=0、-40//60=-1且-40%60=20?
Python整数运算规则解析
首先明确Python中两个整数运算的核心设计逻辑:
//是地板除法,运算结果会向负无穷方向取整(不是向0取整)- 整数除法和取余运算严格满足公式:
a = (a // b) * b + (a % b),余数的符号永远和除数b一致
运算结果逐个说明
40 // 60:
40除以60的精确值约为0.666,向负无穷方向取整就是0,所以结果为0。-40 // 60:
-40除以60的精确值约为-0.666,向负无穷方向取整会得到比-0.666更小的整数-1,所以结果为-1。-40 % 60:
代入上面的公式:a=-40,b=60,a//b=-1,可得-40 = (-1)*60 + 余数,计算得余数为20,同时除数60是正数,余数20也符合和除数同号的规则。
时钟类代码优化
你不需要手动把数值转成正数处理,直接利用Python本身的取余和地板除法规则就能简化代码,逻辑更清晰也更少出错:
class Clock: def __init__(self, hour, minute): # 先把所有时间统一转成总分钟数处理,再拆分小时和分钟 total_minutes = hour * 60 + minute # 一天总分钟数是1440,直接取余就能得到0-1439之间的分钟数,自动处理正负值 total_minutes %= 1440 self.hour = total_minutes // 60 self.minute = total_minutes % 60
优化后的代码不需要额外的while循环和math库依赖,不管输入的hour和minute是正还是负,都能自动算出正确的24小时制时钟时间。
内容的提问来源于stack exchange,提问作者kruffer
相关产品推荐
相关产品推荐

