测试环境:
Python 3.12.4
PyCharm Community Edition 2024.1.4
依赖的 Python 内置模块函数:
random.randint
准备工作:
1.定义阶乘;
阶乘定义有很多种方法,如果你想使用其他方法,可参考这篇文章:
Python计算阶乘(5种方法)_用python编写阶乘函数-CSDN博客https://blog.csdn.net/weixin_52651466/article/details/120231273
代码示例:
def factorial(arg: int) -> int | None:
if arg < 0:
return None
elif arg == 0 or arg == 1:
return 1
elif arg > 1:
return arg*factorial(arg-1)
2.定义逆序数。
def inverse_ordinal_number(arg: list[int]) -> int:
inversions = 0
for i in range(len(arg)):
for j in range(i+1, len(arg)):
if arg[i] > arg[j]:
inversions += 1
return inversions
计算行列式:
重构:
为使代码整齐,我将以上两个函数放在类 Determinant 中,主方法为 determinant:
类代码:
class Determinant:
from random import randint
@classmethod
def inverse_ordinal_number(cls, arg: list[int]) -> int:
inversions = 0
for i in range(len(arg)):
for j in range(i+1, len(arg)):
if arg[i] > arg[j]:
inversions += 1
return inversions
@classmethod
def factorial(cls, arg: int) -> int | None:
if arg < 0:
return None
elif arg == 0 or arg == 1:
return 1
elif arg > 1:
return arg*cls.factorial(arg-1)
def determinant(self, order: int, array: list[list[float]]):
addth = 0
result = 0
random_list_list: list[list[int]] = []
while addth < self.factorial(order):
re = 1
random_list: list[int] = []
while len(random_list) < order:
ran = self.randint(0,order-1)
if ran not in random_list:
random_list.append(ran)
if random_list not in random_list_list:
addth += 1
random_list_list.append(random_list)
for i in range(0, order):
re*=array[i][random_list[i]]
re*=(-1)**self.inverse_ordinal_number(random_list)
result += re
return result
调用示例:
print(Determinant().determinant(4, [[4,5,6,3],
[7,8,9,3],
[1,2.9,10,3],
[1,2,5,8]]))