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()