#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import math
import itertools
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="所有元素:").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):
self.a1.set("")
self.a2.set("")
m =int(self.e2.get())
self.temp=list(range(m))
self.allArrangement(index=0,m=m)
self.arr=list(self.e1.get())
self.arrangement(index=0,m=m)
#可重复排列
def allArrangement(self,index,m):
if(m==0):
for i in range(len(self.temp)):
self.a1.set(self.a1.get()+self.temp[i])
self.a1.set(self.a1.get()+" ")
return
for i in range(len(self.e1.get())):
self.temp[index]=self.e1.get()[i]
self.allArrangement(index=index+1,m=m-1)
#不可重复排列
def arrangement(self,index,m):
if(index == self.arr.__len__()-1):
for i in range(m):
self.a2.set(self.a2.get()+self.arr[i])
self.a2.set(self.a2.get()+" ")
return
for i in range(index,self.arr.__len__()):
self.swap(index, i)
self.arrangement(index=index+1,m=m)
self.swap(index, i)
def swap(self,index,i):
temp = self.arr[index];
self.arr[index] = self.arr[i];
self.arr[i] = temp;
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()
微信截图_20170110233210.png
不可重复排列:abc acb bac bca cba cab
可重复排列:aaa aab aac aba abb abc aca acb acc baa bab bac bba bbb bbc bca bcb bcc caa cab cac cba cbb cbc cca ccb ccc