高中数学选修2-3中学习了排列与组合的计算方式,这里按照课本上最基本的公式用python还原下
figure.py
def arrangment(a, b): # a代表取多少元素,b代表总共多少元素
"""排列"""
result = 1 # 设置中间量
for i in range(a): # 经典for循环,从0到a每次使中间量乘b,b再减1
result *= b
b -= 1
return result # 输出
def combination(a, b): # 同上
"""组合"""
result_1 = 1
result_2 = 1 # 两个循环两个中间量
for i in range(a): # 计算排列
result_2 *= b
b -= 1
for i in range(a): # 算除数
result_1 *= i
result = result_2/result_1
return result # 完成
直接尝试
main.py
from figure import *
print(arrangment(5, 5))
print(combination(5, 5))
不出意料报错了
120是说排列没问题,那么问题就出在组合了,根据报错division by zero说明是除0了,也就是说result_1是0,是因为在循环的时候是从0到a
稍作修改
figure.py
def arrangment(a, b): # a代表取多少元素,b代表总共多少元素
"""排列"""
result = 1 # 设置中间量
for i in range(a): # 经典for循环,从0到a每次使中间量乘b,b再减1
result *= b
b -= 1
return result # 输出
def combination(a, b): # 同上
"""组合"""
result_1 = 1
result_2 = 1 # 两个循环两个中间量
for i in range(a): # 计算排列
result_2 *= b
b -= 1
for i in range(1, a): # 算除数
result_1 *= i
result = result_2/result_1
return result # 完成
main.py
from figure import *
print(arrangment(5, 5))
print(combination(5, 5))
再试一次
没有报错,但是结果有问题
因为刚才把range的范围改成了1到a,所以少了一个
再改一次,把范围改为1到a+1
def arrangment(a, b): # a代表取多少元素,b代表总共多少元素
"""排列"""
result = 1 # 设置中间量
for i in range(a): # 经典for循环,从0到a每次使中间量乘b,b再减1
result *= b
b -= 1
return result # 输出
def combination(a, b): # 同上
"""组合"""
result_1 = 1
result_2 = 1 # 两个循环两个中间量
for i in range(a): # 计算排列
result_2 *= b
b -= 1
for i in range(1, a+1): # 算除数
result_1 *= i
result = result_2/result_1
return result # 完成
终于对了