def factorial(n): if type(n) is int or type(n) is float: if n == 1 or n == 0: return 1 elif n < 0: return None else: return factorial(int(n-1)) * int(n) else: return None def digits_r2l(n): if type(n) is not int or n < 0: return None elif n < 10: return str(n) else: s = str(n % 10) return s + " " + digits_r2l(n // 10) def digits_l2r(n): if type(n) is not int or n < 0: return None elif n < 10: return str(n) else: s = str(n % 10) return digits_l2r(n // 10) + " " + s ################################################# def verifier(test_name, actual, expected): print(test_name) if actual != expected: print("=======> FAILED! <=======") print(f"Got value <{actual}>") print(f"Expected value is <{expected}>") else: print("PASSED") print() fact_tests = [(0, 1), (1, 1), (7, 5040), (-1, None), (1.1, 1), (5.4, 120), ("Str", None), (True, None)] dr2l_tests = [(100, "0 0 1"), (9871, "1 7 8 9"), (1, "1"), (-100, None), (1.1, None), (5.4, None), ("Str", None), (True, None)] dl2r_tests = [(100, "1 0 0"), (9871, "9 8 7 1"), (1, "1"), (-100, None), (1.1, None), (5.4, None), ("Str", None), (True, None)] for i in range(len(fact_tests)): verifier(f"Factorial test {i+1}", factorial(fact_tests[i][0]), fact_tests[i][1]) for i in range(len(dr2l_tests)): verifier(f"DR2L test {i+1}", digits_r2l(dr2l_tests[i][0]), dr2l_tests[i][1]) for i in range(len(dl2r_tests)): verifier(f"DL2R test {i+1}", digits_l2r(dl2r_tests[i][0]), dl2r_tests[i][1])