# 排列组合——排列公式的推理和组合

……

##### 组合

#!/usr/bin/env python3
# -
- coding: utf-8 -*-

``````import math
from tkinter import *
class Window:
def __init__(self, title='组合数计算器', width=300, height=120, staFunc=bool, stoFunc=bool):
self.w = width
self.h = height
self.stat = True
self.staFunc = staFunc
self.stoFunc = stoFunc
self.staIco = None
self.stoIco = None

self.root = Tk(className=title)

def drawCenter(self):
ws = self.root.winfo_screenwidth()#用户屏幕宽度
hs = self.root.winfo_screenheight()#用户屏幕高度
x = int( (ws/2) - (self.w/2) )#距屏幕左边框的像素点数
y = int( (hs/2) - (self.h/2) )#距屏幕上边框的像素点数
self.root.geometry('{}x{}+{}+{}'.format(self.w, self.h, x, y))

def createWidgets(self):
Label(self.root, text="所有元素数n：").grid(row=0,sticky=E)
Label(self.root, text="取出的元素数m：").grid(row=1,sticky=E)
Label(self.root, text="不可重复组合数：").grid(row=2,sticky=E)
Label(self.root, text="可重复组合数：").grid(row=3,sticky=E)
self.e1 = Entry(self.root)
self.m = StringVar()
self.e2 = Entry(self.root,textvariable=self.m)
self.a1 = StringVar()
self.e3 = Entry(self.root,textvariable=self.a1)
self.a2 = StringVar()
self.e4 = Entry(self.root,textvariable=self.a2)
self.e1.grid(row=0, column=1)
self.e2.grid(row=1, column=1)
self.e3.grid(row=2, column=1)
self.e4.grid(row=3, column=1)
self.btnSer = Button(self.root, command=self.click, width=3, height=1,text='运行')
self.btnSer.grid(row=4,column=1,sticky=E)
btnQuit = Button(self.root, text='关闭窗口', command=self.root.quit, width=8, height=1)
btnQuit.grid(row=4,column=2)

def click(self):
n=int(self.e1.get())
m =int(self.e2.get())
#组合数
a1=math.factorial(n)/math.factorial(m)/math.factorial(n-m)
self.a1.set(int(a1))
#不可重复组合数
a2=math.factorial(n+m-1)/(math.factorial(m)*math.factorial(n-1))
self.a2.set(int(a2))

def loop(self):
self.root.resizable(False, False)   #禁止修改窗口大小
self.createWidgets()
self.drawCenter()                       #窗口居中
self.root.mainloop()

if __name__ == '__main__':
w = Window(width=350, height=150)
w.loop()
``````