-2

I want to take seconds as inputs and convert them into days, hours, minutes and seconds. The condition is that if any of those is 0, it should not be displayed.

Example: Input: 86400 Output: 1 Days

Input: 90 Output: 1 Minutes 30 Seconds

Input: 5400 Output: 1 Hours 30 Minutes

Observe that if the value of hours, minutes, etc is zero, they are not diaplayed.

I have solved it like this but I am wondering if there is a more efficient way.

seconds = int(input())
if seconds <= 60:
    print(f'{seconds} Seconds')
elif seconds > 60 and seconds < 3600:
    minutes = seconds // 60
    seconds = seconds % 60
    print(f'{minutes} Minutes {seconds} Seconds')
elif seconds == 3600:
    print("1 Hours")
elif seconds > 3600 and seconds < 86400:
    minutes = seconds // 60
    seconds = seconds % 60
    hours = minutes // 60
    minutes = minutes % 60
    if minutes > 0 and seconds > 0:
        print(f'{hours} Hours {minutes} Minutes {seconds} Seconds')
    elif minutes > 0:
        print(f'{hours} Hours {minutes} Minutes')
    elif seconds > 0:
        print(f'{hours} Hours {seconds} Seconds')
elif seconds == 86400:
    print("1 Days")
elif seconds > 86400:
    minutes = seconds // 60
    seconds = seconds % 60
    hours = minutes // 60
    minutes = minutes % 60
    days = hours // 24
    hours = hours - (days * 24)
    if seconds > 0 and minutes > 0 and hours > 0:
        print(f'{days} Days {hours} Hours {minutes} Minutes {seconds} Seconds')
    elif minutes > 0 and hours > 0:
        print(f'{days} Days {hours} Hours {minutes} Minutes')
    elif minutes > 0 and seconds > 0:
        print(f'{days} Days {hours} Minutes {seconds} Seconds')
    elif hours > 0 and seconds > 0:
        print(f'{days} Days {hours} Hours {seconds} Seconds')
    elif hours > 0:
        print(f'{days} Days {hours} Hours')
    elif minutes > 0:
        print(f'{days} Days {minutes} Minutes')
    elif seconds > 0:
        print(f'{days} Days {seconds} Seconds')
  • There are many more efficient ways. How did you find them when you searched the web for solutions? See [How much research?](https://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users). – Prune Apr 05 '21 at 19:04
  • Does this answer your question? [Python function to convert seconds into minutes, hours, and days](https://stackoverflow.com/questions/4048651/python-function-to-convert-seconds-into-minutes-hours-and-days) – Cute Panda Apr 05 '21 at 19:10

1 Answers1

0

Try this:

def time_converter(seconds):
    units = {'day': 86400, 'hour': 3600, 'min': 60}

    # Get days
    days = int(seconds / units['day'])
    seconds = seconds % units['day']

    # Get hours
    hours = int(seconds / units['hour'])
    seconds = seconds % units['hour']

    # Get minutes
    minutes = int(seconds / units['min'])
    seconds = seconds % units['min']

    # Compile output
    output = f'{days} Days ' if days > 0 else ''
    output += f'{hours} Hours ' if hours > 0 else ''
    output += f'{minutes} Minutes ' if minutes > 0 else ''
    output += f'{seconds} Seconds ' if seconds > 0 else ''

    print(output)


time_converter(86400)  # 1 Days
time_converter(90)  # 1 Minutes 30 Seconds
time_converter(5400)  # 1 Hours 30 Minutes

First divide to get the days, then use modulo to get the remaining seconds and repeat for the hours, etc. Now I'm wondering if there's a way to make this even smaller...

dlever
  • 21
  • 5