Here's a break timer that I created in jupyter notebook/lab for a python class I teach at various universities.
import time import datetime as dt try:from IPython.display import clear_output except:pass import subprocess
def clear_out(): '''quick and dirty multi-platform way to clear output''' try:subprocess.run('clear'.split()) except:pass try:clear_output(wait=True) except:pass try:subprocess.run('cls'.split()) except:pass
def typewriter(input_str, pause_time=.22): '''simulate a typewriter''' for i in str(input_str): print(i, end='', flush=True) time.sleep(pause_time) # typewriter('Demo')
def what_time(): '''Create a DateTime Object from User Input''' try: break_time_over = input(''' Enter an "end time" in one of these formats: 10:30 PM (12 hour clock) HH:MM AM|PM 22:30 (24 hour clock) HH:MM 30 (minutes only) MM ''').upper().strip() cur_time = dt.datetime.now().replace(microsecond=0) if 'AM' in break_time_over or 'PM' in break_time_over: end_dt_obj = dt.datetime.strptime(break_time_over, '%I:%M %p') end_dt_obj = cur_time.replace(hour=end_dt_obj.hour,\ minute=end_dt_obj.minute) elif ':' in break_time_over: end_dt_obj = dt.datetime.strptime(break_time_over, '%H:%M') end_dt_obj = cur_time.replace(hour=end_dt_obj.hour,\ minute=end_dt_obj.minute) else: end_dt_obj = cur_time + dt.timedelta(minutes=float(break_time_over)) return end_dt_obj except Exception as e: clear_out() print(f'Invalid Input: {e}') return what_time() # what_time()
def break_timer(): try: end_dt_obj = what_time() while True: cur_time = dt.datetime.now().replace(microsecond=0) clear_out() remaining_time = end_dt_obj - cur_time info = f''' \t{"Python Break Timer":.^37} \tEnd Time:{end_dt_obj.strftime("%I:%M:%S %p"):_>28} \tCurrent Time:{cur_time.strftime("%I:%M:%S %p"):_>24} \tTime Remaining:{str(remaining_time):_>19} '''.replace(' ','') print(info) if cur_time >= end_dt_obj: info = f'\t{" BREAK TIME IS OVER! ":=^37}\n\n' typewriter(info) break time.sleep(1) except Exception as error: print(f'ERROR: {error}')
if __name__ == '__main__': break_timer()