hnc-eduard/HNC/Excercises/Задача по рекурсии/main.py

76 lines
1.7 KiB
Python

def factorial(n):
if type(n) is not int:
if type(n) is float:
m = int(n)
return factorial(m - 1) * m
if type(n) is str:
return None
else:
if n < 0:
return None
if n == 0:
return 1
return factorial(n - 1) * n
def digits_r2l(n):
if n % 1 != 0 or n <= 0:
return None
else:
return str(n % 10)
def digits_l2r(n):
pass
#################################################
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])