如何使用Python解决时钟角度问题(Clock Angle Problem)?
时钟角度问题解法
问题描述
给定24小时制hh:mm格式的时间,计算模拟时钟上时针与分针之间的较小夹角。
核心原理
模拟时钟一圈为360°,通过分别计算时针、分针的绝对角度,再推导两者的最小夹角:
- 分针:每分钟转动6°(360° ÷ 60分钟),分针角度 = 分钟数 × 6
- 时针:每小时转动30°(360° ÷ 12小时),同时每分钟额外转动0.5°(30° ÷ 60分钟);24小时制需先转成12小时制(取模12),时针角度 = (小时数 % 12) × 30 + 分钟数 × 0.5
- 最小夹角:计算角度差的绝对值后,取该值与
360° - 该值中的较小者(夹角不会超过180°)
计算公式
设输入时间为h:m(h为小时,m为分钟):
- 分针角度:
minute_angle = m * 6 - 时针角度:
hour_angle = (h % 12) * 30 + m * 0.5 - 角度差:
diff = abs(hour_angle - minute_angle) - 最小夹角:
min_angle = min(diff, 360 - diff)
示例验证
- 输入
5:30:
分针角度 = 30×6 = 180°,时针角度 = (5%12)×30 + 30×0.5 = 165°,角度差15°,最小夹角为15° - 输入
21:00:
21%12 = 9,时针角度 = 9×30 = 270°,分针角度0°,角度差270°,360-270=90°,最小夹角为90° - 输入
12:00:
12%12 = 0,时针角度 = 0×30 + 0×0.5 = 0°,分针角度0°,角度差0°,最小夹角为0°
代码实现(Python)
def get_clock_min_angle(time): h, m = map(int, time.split(':')) minute_angle = m * 6 hour_angle = (h % 12) * 30 + m * 0.5 angle_diff = abs(hour_angle - minute_angle) min_angle = min(angle_diff, 360 - angle_diff) # 统一角度显示格式 return f"{int(min_angle)}°" if min_angle.is_integer() else f"{min_angle}°" # 测试用例 print(get_clock_min_angle("5:30")) # 输出:15° print(get_clock_min_angle("21:00")) # 输出:90° print(get_clock_min_angle("12:00")) # 输出:0°
内容的提问来源于stack exchange,提问作者Sashank garg
相关产品推荐
相关产品推荐

