76 lines
1.7 KiB
Python
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])
|
|
|