Last active
October 3, 2021 17:16
-
-
Save philipnorton42/9d746d3b452f11d5b44681cd6750b1e3 to your computer and use it in GitHub Desktop.
Converting The Current Time Into A Sentence In Python (see https://www.hashbangcode.com/article/converting-current-time-sentence-python)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# The following code will print out the current time as a sentence. | |
# See https://www.hashbangcode.com/article/converting-current-time-sentence-python for information on this code. | |
def translate_to_or_past(minute): | |
to_or_past = '' | |
if 3 <= minute < 33: | |
to_or_past = 'PAST' | |
elif 33 <= minute <= 57: | |
to_or_past = 'TO' | |
return to_or_past | |
def translate_minute(minute): | |
if (minute > 30): | |
minute = 60 - minute | |
if minute >= 3: | |
minute_blocks = ['FIVE', 'TEN', 'A QUARTER', 'TWENTY', 'TWENTYFIVE', 'HALF'] | |
mapped_minute_value = round((0 + (5 - 0) * ((minute - 3) / (28 - 3))) - 0.4) | |
minute_name = minute_blocks[mapped_minute_value] | |
else: | |
minute_name = '' | |
return minute_name | |
def translate_hour(hour, minute): | |
hours = [ | |
'ONE', 'TWO', 'THREE', 'FOUR', 'FIVE', 'SIX', 'SEVEN', 'EIGHT', 'NINE', 'TEN', 'ELEVEN', 'TWELVE', 'ONE' | |
] | |
if minute >= 33: | |
return hours[hour] | |
else: | |
return hours[hour - 1] | |
def translate_time(hour, minute, am_or_pm): | |
translated_minute = translate_minute(minute) | |
translated_hour = translate_hour(hour, minute) | |
translated_to_or_past = translate_to_or_past(minute) | |
if translated_to_or_past == '': | |
return "IT IS %s %s %s" % (translated_hour, 'O\'CLOCK', am_or_pm) | |
else: | |
return "IT IS %s %s %s %s" % (translated_minute, translated_to_or_past, translated_hour, am_or_pm) | |
# Run the code. | |
import time | |
current_time = time.localtime() | |
hour = int(time.strftime("%I", current_time)) | |
minute = int(time.strftime("%M", current_time)) | |
am_or_pm = time.strftime("%p", current_time) | |
print(translate_time(hour, minute, am_or_pm)) | |
# Unit test the code. | |
import unittest | |
class TestTimeTranslateMethods(unittest.TestCase): | |
def test_translate_to_or_past(self): | |
self.assertEqual(translate_to_or_past(0), '') | |
self.assertEqual(translate_to_or_past(1), '') | |
self.assertEqual(translate_to_or_past(2), '') | |
self.assertEqual(translate_to_or_past(3), 'PAST') | |
self.assertEqual(translate_to_or_past(15), 'PAST') | |
self.assertEqual(translate_to_or_past(29), 'PAST') | |
self.assertEqual(translate_to_or_past(30), 'PAST') | |
self.assertEqual(translate_to_or_past(31), 'PAST') | |
self.assertEqual(translate_to_or_past(33), 'TO') | |
self.assertEqual(translate_to_or_past(34), 'TO') | |
self.assertEqual(translate_to_or_past(45), 'TO') | |
self.assertEqual(translate_to_or_past(57), 'TO') | |
self.assertEqual(translate_to_or_past(58), '') | |
self.assertEqual(translate_to_or_past(59), '') | |
def test_translate_minute(self): | |
self.assertEqual(translate_minute(1), '') | |
self.assertEqual(translate_minute(2), '') | |
self.assertEqual(translate_minute(3), 'FIVE') | |
self.assertEqual(translate_minute(7), 'FIVE') | |
self.assertEqual(translate_minute(53), 'FIVE') | |
self.assertEqual(translate_minute(57), 'FIVE') | |
self.assertEqual(translate_minute(8), 'TEN') | |
self.assertEqual(translate_minute(12), 'TEN') | |
self.assertEqual(translate_minute(48), 'TEN') | |
self.assertEqual(translate_minute(52), 'TEN') | |
self.assertEqual(translate_minute(13), 'A QUARTER') | |
self.assertEqual(translate_minute(17), 'A QUARTER') | |
self.assertEqual(translate_minute(47), 'A QUARTER') | |
self.assertEqual(translate_minute(43), 'A QUARTER') | |
self.assertEqual(translate_minute(18), 'TWENTY') | |
self.assertEqual(translate_minute(22), 'TWENTY') | |
self.assertEqual(translate_minute(38), 'TWENTY') | |
self.assertEqual(translate_minute(42), 'TWENTY') | |
self.assertEqual(translate_minute(37), 'TWENTYFIVE') | |
self.assertEqual(translate_minute(24), 'TWENTYFIVE') | |
self.assertEqual(translate_minute(27), 'TWENTYFIVE') | |
self.assertEqual(translate_minute(36), 'TWENTYFIVE') | |
self.assertEqual(translate_minute(33), 'TWENTYFIVE') | |
self.assertEqual(translate_minute(28), 'HALF') | |
self.assertEqual(translate_minute(32), 'HALF') | |
def test_translate_hour(self): | |
self.assertEqual(translate_hour(1, 29), 'ONE') | |
self.assertEqual(translate_hour(2, 29), 'TWO') | |
self.assertEqual(translate_hour(3, 29), 'THREE') | |
self.assertEqual(translate_hour(4, 29), 'FOUR') | |
self.assertEqual(translate_hour(5, 29), 'FIVE') | |
self.assertEqual(translate_hour(6, 29), 'SIX') | |
self.assertEqual(translate_hour(7, 29), 'SEVEN') | |
self.assertEqual(translate_hour(8, 29), 'EIGHT') | |
self.assertEqual(translate_hour(9, 29), 'NINE') | |
self.assertEqual(translate_hour(10, 29), 'TEN') | |
self.assertEqual(translate_hour(11, 29), 'ELEVEN') | |
self.assertEqual(translate_hour(12, 29), 'TWELVE') | |
self.assertEqual(translate_hour(1, 34), 'TWO') | |
self.assertEqual(translate_hour(2, 34), 'THREE') | |
self.assertEqual(translate_hour(3, 34), 'FOUR') | |
self.assertEqual(translate_hour(4, 34), 'FIVE') | |
self.assertEqual(translate_hour(5, 34), 'SIX') | |
self.assertEqual(translate_hour(6, 34), 'SEVEN') | |
self.assertEqual(translate_hour(7, 34), 'EIGHT') | |
self.assertEqual(translate_hour(8, 34), 'NINE') | |
self.assertEqual(translate_hour(9, 34), 'TEN') | |
self.assertEqual(translate_hour(10, 34), 'ELEVEN') | |
self.assertEqual(translate_hour(11, 34), 'TWELVE') | |
self.assertEqual(translate_hour(12, 34), 'ONE') | |
def test_translate_time(self): | |
self.assertEqual(translate_time(10, 0, 'AM'), 'IT IS TEN O\'CLOCK AM') | |
self.assertEqual(translate_time(10, 1, 'AM'), 'IT IS TEN O\'CLOCK AM') | |
self.assertEqual(translate_time(10, 2, 'AM'), 'IT IS TEN O\'CLOCK AM') | |
self.assertEqual(translate_time(10, 3, 'AM'), 'IT IS FIVE PAST TEN AM') | |
self.assertEqual(translate_time(10, 58, 'AM'), 'IT IS ELEVEN O\'CLOCK AM') | |
self.assertEqual(translate_time(10, 48, 'AM'), 'IT IS TEN TO ELEVEN AM') | |
self.assertEqual(translate_time(8, 55, 'AM'), 'IT IS FIVE TO NINE AM') | |
self.assertEqual(translate_time(1, 5, 'PM'), 'IT IS FIVE PAST ONE PM') | |
self.assertEqual(translate_time(1, 57, 'PM'), 'IT IS FIVE TO TWO PM') | |
self.assertEqual(translate_time(2, 14, 'PM'), 'IT IS A QUARTER PAST TWO PM') | |
self.assertEqual(translate_time(2, 31, 'PM'), 'IT IS HALF PAST TWO PM') | |
self.assertEqual(translate_time(2, 33, 'PM'), 'IT IS TWENTYFIVE TO THREE PM') | |
if __name__ == '__main__': | |
unittest.main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment