diff --git a/Age Calculator/calculate.py b/Age Calculator/calculate.py index 83134f0..a5756bb 100644 --- a/Age Calculator/calculate.py +++ b/Age Calculator/calculate.py @@ -1,25 +1,25 @@ import time from calendar import isleap -def judge_leap_year(year): - if isleap(year): - return True - else: - return False +# Check if a year is a leap year +def judge_leap(year: int) -> bool: + return isleap(year) -def month_days(month, leap_year): +# Return number of days in a month, considering leap years +def month_days(month: int, leap_year: bool) -> int: if month in [1, 3, 5, 7, 8, 10, 12]: return 31 elif month in [4, 6, 9, 11]: return 30 elif month == 2 and leap_year: return 29 - elif month == 2 and (not leap_year): + else: return 28 - +# User input name = input("Please enter your name: ") -age = input("Please enter your age: ") +age = int(input("Please enter your age: ")) + localtime = time.localtime(time.time()) year = int(age) @@ -29,16 +29,25 @@ def month_days(month, leap_year): begin_year = int(localtime.tm_year) - year end_year = begin_year + year +# Count days in past years for y in range(begin_year, end_year): - if (judge_leap_year(y)): - day = day + 366 + if judge_leap(y): + day += 366 else: - day = day + 365 + day += 365 -leap_year = judge_leap_year(localtime.tm_year) +# Add days from current year +leap_year = judge_leap(localtime.tm_year) for m in range(1, localtime.tm_mon): - day = day + month_days(m, leap_year) - -day = day + localtime.tm_mday -print("\n\t%s's age is %d years or " % (name, year), end="") -print("%d months or %d days" % (month, day)) + day += month_days(m, leap_year) + +# Approximate breakdown (ignores time of day) +hours = day * 24 +minutes = hours * 60 +seconds = minutes * 60 + +print(f"\nHello {name}, you are approximately:") +print(f" {day:,} days") +print(f" {hours:,} hours") +print(f" {minutes:,} minutes") +print(f" {seconds:,} seconds old!") diff --git a/Digital Clock/main.py b/Digital Clock/main.py index 831562b..632af37 100644 --- a/Digital Clock/main.py +++ b/Digital Clock/main.py @@ -1,5 +1,5 @@ from time import strftime -from tkinter import Label, Tk +from tkinter import Label, Tk , Button window = Tk() window.title("Digital Clock") @@ -7,17 +7,44 @@ window.configure(bg="green") window.resizable(False, False) +use_24h = True + clock_label = Label( window, bg="black", fg="green", font=("Arial", 30, "bold"), relief="flat" ) clock_label.place(x=50, y=50) +date_label = Label( + window, bg="black", fg="white", font=("Arial", 14) +) +date_label.pack(pady=(0, 10), anchor="center") + + + +def toggle_format(_evt=None): + global use_24h + use_24h = not use_24h + fmt_btn.config(text="Switch to 24-hour" if not use_24h else "Switch to 12-hour") + +fmt_btn = Button(window, text="Switch to 12-hour", command=toggle_format) +fmt_btn.pack(pady=(0, 8)) +window.bind("", toggle_format) # press 'f' to toggle + + + def update_label(): - current_time = strftime("%H: %M: %S\n %d-%m-%Y ") - clock_label.configure(text=current_time) - clock_label.after(80, update_label) - clock_label.pack(anchor="center") + + if use_24h: + time_text = strftime("%H:%M:%S") + else: + # strip leading zero in 12h mode for a cleaner look + time_text = strftime("%I:%M:%S %p").lstrip("0") + clock_label.configure(text=time_text) + date_label.configure(text=strftime("%A, %b %d, %Y")) + window.after(1000, update_label) update_label() -window.mainloop() \ No newline at end of file +window.mainloop() + + diff --git a/Geographic Distance/geographic_distance.py b/Geographic Distance/geographic_distance.py index bf6a0e2..c91889e 100644 --- a/Geographic Distance/geographic_distance.py +++ b/Geographic Distance/geographic_distance.py @@ -17,6 +17,32 @@ def calculate_distance_and_time(coord1, coord2, avg_speed): return distance, travel_time + def validate_coordinates(coord): + """Ensure latitude and longitude are within valid ranges.""" + lat, lon = coord + if not (-90 <= lat <= 90): + raise ValueError(f"Latitude {lat} out of range (-90..90)") + if not (-180 <= lon <= 180): + raise ValueError(f"Longitude {lon} out of range (-180..180)") + return coord + + def km_to_miles(km: float) -> float: + """Convert kilometers to miles.""" + return km * 0.621371 + + def format_travel_time(hours: float) -> str: + """Format fractional hours as 'Hh Mm'.""" + h = int(hours) + m = int(round((hours - h) * 60)) + if m == 60: + h += 1 + m = 0 + return f"{h}h {m}m" + + + + + def main(): # Coordinates (latitude, longitude)