Build a Time Calculator Project - Build a Time Calculator Project

Tell us what’s happening:

I’m attempting to complete the project to build a time calculator. I’ve written my code using Spyder (python) and it fully works. It returns all the correct values for each test when I call the function and manually enter the required parameters. However, when I copy and paste my code into the freecodecamp IDE and run the tests, they all fail. I’m not sure why, it returns exactly what it asks for, the exact same punctuation, the exact same values. Any help would be much appreciated!

Your code so far

def add_time(start, duration, day=True):

    starting_hours = int(start[:start.find(':')])
    starting_minutes = int(start[start.find(':') + 1:start.find(' ')])
    meridiem = start[start.find(' ') + 1:]
    duration_hours = int(duration[:duration.find(':')])
    duration_minutes = int(duration[duration.find(':') + 1:])

    total_minutes = starting_minutes + duration_minutes
    minutes = total_minutes % 60

    total_hours, number_of_days, meridiem = add_hours(starting_hours, duration_hours, total_minutes, meridiem)

    if total_hours == 0:
        total_hours = 12

    if day != True:
        weekday = day_of_week(day, number_of_days)
        if number_of_days == 0:
            if minutes < 10:
                print(f'{total_hours}:0{minutes} {meridiem}, {weekday}')
            else:
                print(f'{total_hours}:{minutes} {meridiem}, {weekday}')
        if number_of_days == 1:
            if minutes < 10:
                print(f'{total_hours}:0{minutes} {meridiem}, {weekday} (next day)')
            else:
                print(f'{total_hours}:{minutes} {meridiem}, {weekday} (next day)')
        if number_of_days > 1:
            if minutes < 10:
                print(f'{total_hours}:0{minutes} {meridiem}, {weekday} ({number_of_days} days later)')
            else:
                print(f'{total_hours}:{minutes} {meridiem}, {weekday} ({number_of_days} days later)')
    else:
        if number_of_days == 0:
            if minutes < 10:
                print(f'{total_hours}:0{minutes} {meridiem}')
            else:
                print(f'{total_hours}:{minutes} {meridiem}')
        if number_of_days == 1:
            if minutes < 10:
                print(f'{total_hours}:0{minutes} {meridiem} (next day)')
            else:
                print(f'{total_hours}:{minutes} {meridiem} (next day)')
        if number_of_days > 1:
            if minutes < 10:
                print(f'{total_hours}:0{minutes} {meridiem} ({number_of_days} days later)')
            else:
                print(f'{total_hours}:{minutes} {meridiem} ({number_of_days} days later)')

    return


def add_hours(start, duration, total_minutes, meridiem):

    days_passed = 0
    total_hours = start + duration + (total_minutes // 60)

    days_passed += total_hours // 24
    total_hours = total_hours % 24

    if meridiem == 'AM':
        meridiem_counter = 1
    elif meridiem == 'PM':
        meridiem_counter = -1

    while total_hours >= 12:
        total_hours -= 12
        meridiem_counter *= -1
        if meridiem_counter == 1:  
            days_passed += 1

    if meridiem_counter == 1:
        meridiem = 'AM'
    else:
        meridiem = 'PM'

    return total_hours, days_passed, meridiem


def day_of_week(weekday, days_passed):
    
    days_of_week = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday')
                    
    
    weekday = weekday.lower().capitalize()
    index = days_of_week.index(weekday)
    new_index = index + days_passed

    while new_index > 6:
        new_index -= 7

    weekday = days_of_week[new_index]


    return weekday


Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36

Challenge Information:

Build a Time Calculator Project - Build a Time Calculator Project

Hi and welcome to the forum :wave:

print(add_time('3:30 PM', '2:12'))

5:42 PM
None

Your function needs to return the string, not print it.

The function should add the duration time to the start time and return the result.

2 Likes

So I have just have to replace all the print statements with return statements?

Yes, you will need to do that.

1 Like