Symbolic Constants

A second improvement is possible. Looking at our program we see that several calculations are performed more than once, i.e. (24 * 60 * 60) and (60 * 60). There should be a way to avoid the unnecessary recalculation, and there is. All we have to do is to calculate the quantities and store them so we can reuse the pre-calculated quantity. We could store them in a variable, but the quantity shouldn't change, so it would be wise to prevent it from changing if we can.

A second small concern is that it may not be clear to a someone reading our program (say someone maintaining it, or even ourselves rereading it a few months later) what the quantity 60 * 60 is.

Python has a convention we will adhere to to help deal with these issues. We will calculate our reused values once near the top of the program and give them names in all caps to indicate that these values are intended to remain unchanged.

SECS_PER_DAY = 24 * 60 * 60
SECS_PER_HOUR = 60 * 60
SECS_PER_MINUTE = 60

days = tot_seconds // SECS_PER_DAY
remainder = tot_seconds % SECS_PER_DAY
hours = remainder // SECS_PER_HOUR
remainder = remainder % SECS_PER_HOUR
minutes = remainder // SECS_PER_MIN
remainder = remainder % SECS_PER_MIN

Notes:

Putting all these changes together and adding the declarations, overhead, and some instructions gives us the following complete program.

# s2dhms.py -- converts a time in seconds to
# its equivalent in days, hours, minutes and seconds.
#
# CPSC 128 Demonstration Program
#
# Kate Chatfield-Reed, Winter 2023

SECS_PER_DAY = 24 * 60 * 60
SECS_PER_HOUR = 60 * 60
SECS_PER_MINUTE = 60

# Input.
print("=====================================================")
print("     Seconds to Days, Hours, Minutes and Seconds")
print("-----------------------------------------------------")
print()
print("This program converts a number of seconds to its")
print("equivalent in days, hours, minutes and seconds.")
tot_seconds = int(input("Enter the number of seconds now (e.g. 116529): "))
print()

# Processing.
days = tot_seconds // SECS_PER_DAY
remainder = tot_seconds % SECS_PER_DAY
hours = remainder // SECS_PER_HOUR
remainder = remainder % SECS_PER_HOUR
minutes = remainder // SECS_PER_MINUTE
remainder = remainder % SECS_PER_MINUTE

# Output.
print(tot_seconds, "seconds =", days, "days,", hours, "hours,",end=' ')
print(minutes, "minutes and", remainder, "seconds")

Notes:

Summary

Symbolic constants can be used to avoid repeating calculations unnecessarily and to increase readability. They are identified by being given names in ALLCAPS.