# CS50 Python Problem Set 7 Working 9 to 5 check50 fails

I am attempting to finish the problem set. I have posted the code, and the testing code I've written. The check50 passes my main program, but fails the testing code, I have posted the check50 result below as well. Kindly guide me on what could be the error.

### Main code - working.py

``````import re, sys

def main():
print(convert(input("Hours: ")))

# Check if the string provided is in recognized format
def s_is_valid_format(s):
if (matches := re.search(r'^(1?[1-9](:[0-5][0-9])? [AP]M to 1?[1-9](:[0-5][0-9])? [AP]M)\$', s)) == None:
return True
return False

# Return only the relevant time
def return_time(s):
return re.search(r'^(1?[1-9]):?([0-5][0-9])? ([AP]M) to (1?[1-9]):?([0-5][0-9])? ([AP]M)\$', s).groups()

# Check if the time values are valid
def check_valid_time(time):
if int(time[0]) < 1 or int(time[0]) > 12:
raise ValueError
if int(time[3]) < 1 or int(time[3]) > 12:
raise ValueError

def convert_hour(hour, meridian):
if meridian == 'AM':
if int(hour) == 12:
return '0'.rjust(2, '0')
return hour.rjust(2, '0')
elif meridian == 'PM':
if int(hour) == 12:
return '12'
return str(int(hour) + 12).rjust(2, '0')

def convert(s):
# Check if the s is of valid format
if s_is_valid_format(s):
raise ValueError("Invalid format")

time = return_time(s)

# Get the format type, whether long fmt/short fmt
check_valid_time(time)

# Convert the time
if None in time:
return f'{convert_hour(time[0], time[2])}:00 to {convert_hour(time[3], time[5])}:00'
else:
return f'{convert_hour(time[0], time[2])}:{time[1]} to {convert_hour(time[3], time[5])}:{time[4]}'

if __name__ == '__main__':
main()
``````

## test code - test_working.py

``````from working import convert
import pytest

def test_format():
with pytest.raises(ValueError):
convert('9 AM - 5 PM')

def test_format_2():
with pytest.raises(ValueError):
convert('09:00 AM - 17:00 PM')

def test_time():
with pytest.raises(ValueError):
convert('13 AM to 9 PM')
with pytest.raises(ValueError):
convert('5 AM to 0 PM')
with pytest.raises(ValueError):
convert('5:60 AM to 11:30 PM')
with pytest.raises(ValueError):
convert('5:30 AM to 11:90 PM')

def test_return_value():
assert convert('5 AM to 9 PM') == '05:00 to 21:00'
assert convert('5:30 AM to 9:30 PM') == '05:30 to 21:30'

def test_return_value2():
assert convert('5 AM to 9 PM') != '5:0 to 21:00'
assert convert('5:30 AM to 9:30 PM') != '5 to 9'

def main():
test_format()
test_time()
test_return_value()
test_return_value2()
test_format_2()

if __name__ == '__main__':
main()
``````

## check50 result

The input specification requires space between the hh:mm and AM/PM. For example '`5 AM to 9 PM`' is OK, but '`5AM to 9PM`' is an invalid input. You are missing a test for this invalid time format.