用python的tkinter写一个简单的概率计算器(适合新手练习)

2020-07-01 11:04 来源:易采站长站 作者:易采站长站整理 点击: 评论:

A-A+

原标题:用python的tkinter写一个简单的概率计算器(适合新手练习)

用python的tkinter写一个简单的概率计算器

最近刚学python, 肯定还是有很多不足的地方,欢迎大神指正~

2020年4月4日晚,一位小伙正在苦逼地赶着他的概率论作业。看着用过了一次又一次的公式,他陷入了沉思:每个公式只需要两三个参数,然后进行对应的计算就能拿到结果——这不正好适合编程解决吗?再用tkinter编辑个ui界面发给同学用,岂不是救众生于水火,功德无量吗?就这样,他幻想着同学们投来崇拜的目光,眼(zui)角流着幸福的泪(kou)水,错过了交作业的最后一点时间……

一.编写计算文件

工欲善其事,必先写工具。最重要的部分当然是怎么正确地把结果算出来。
我目前学的部分并没有多少,所以我写了二项分布、泊松分布、指数分布、正态分布四个部分。其中正态分布的概率密度函数不能直接积分,所以我用了第三方的库scipy来计算积分。这个库安装还挺麻烦的,需要先安装numpy+mkl,需要的小伙伴可以自行百度。只要不是编程小白,应该都能看懂下面的代码,就不多解释了。

# base.py
E = 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178
PI = 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825
from scipy.integrate import quad #导入积分函数
#计算阶乘
def far(n):
s = 1
for i in range(1, n+1):
s *= i
return s
#计算最大公因数
def fractor(a, b):
if b:
temp = a % b
return fractor(b, temp)
else:
return a
#约分
def splify(a, b):
x = fractor(a, b)
return [int(a/x), int(b/x)]#排列公式
def pmt(m, n):
s = 1
for i in range(n-m+1, n+1):
s *= i
return s
#组合公式
def cmb(m, n):
return pmt(m, n) // far(m)
#二项分布
def Binomial(p, n):
dic = {}
for i in range(n + 1):
dic[i] = cmb(i, n) * p**i * (1-p)**(n-i)
return dic
#泊松分布
def Poisson(l, k):
return l**k * E**(-1*l) / far(k)
#指数分布
def Exponential(la, x):
return 1 - E**(-1 * la * x)
#标准正态分布
def Nor(x):
coefficient = 1 / ((2 * PI)**(1/2))
f = lambda t : E**(-1 * t*t / 2)
v, err = quad(f, -1000, x) # err为误差
return coefficient * v
#正态分布
def Normal(mu, sigma, x):
z = (x - mu) / sigma
return Nor(z)
if __name__ == "__main__":
pass


二.编写窗口程序

其实有了上面那一部分对于我来说已经够用了,但一来刚学了tkinter想练练手,二来谁不想在同学面前

【易采站长站编辑:秋军】