美文网首页
python可重复、不可重复排列生成器

python可重复、不可重复排列生成器

作者: 勇赴 | 来源:发表于2017-01-10 23:36 被阅读507次
    #!/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

    相关文章

      网友评论

          本文标题:python可重复、不可重复排列生成器

          本文链接:https://www.haomeiwen.com/subject/gejkbttx.html