from math import pi, degrees def get_hour_angle(hour, minute=0): angle = (hour / 6.) * pi minute_angle = get_minute_angle(minute) / 12 return angle + minute_angle def get_minute_angle(minute): angle = (minute / 30.) * pi return angle def clock_angle(minute): hour, minute = (minute / 60, minute % 60) angle = abs(get_hour_angle(hour, minute) - get_minute_angle(minute)) if angle > pi: angle = 2 * pi - angle return angle import unittest class ClockAngleTest(unittest.TestCase): def test_get_hour_angle(self): self.assertEqual(get_hour_angle(0), 0) self.assertEqual(get_hour_angle(3), pi/2) self.assertEqual(get_hour_angle(6), pi) self.assertEqual(get_hour_angle(12), 2 * pi) self.assertEqual(get_hour_angle(18), pi) def test_get_minute_angle(self): self.assertEqual(get_minute_angle(0), 0) self.assertEqual(get_minute_angle(30), pi) def test_get_clock_angle(self): self.assertEqual(clock_angle(0), 0) self.assertEqual(clock_angle(360), pi) self.assertEqual(clock_angle(180), pi/2) self.assertEqual(clock_angle(210), pi - (pi/2) - (pi/12)) self.assertEqual(round(degrees(clock_angle(140))), 50) minutes = arange(720) # 12 hours angles = map(clock_angle, minutes) plot(minutes, angles)