hnc-eduard/Excercises/ДЗ рекурсия 1/main.py

82 lines
1.9 KiB
Python

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