用python写一个概率模拟器

雨啸青锋 发布于 2020-03-12 1321 次阅读


这是用python写的概率模拟器

[pay point="20"]

from tkinter import Frame,Tk,Entry,END,IntVar,StringVar,Label,Button,Scrollbar,OptionMenu,mainloop
from tkinter import ttk
from random import randint
from _thread import start_new_thread
from  time import sleep

def ran():
    #maxt最大mint最小c次数
    ok1.configure(state='disabled')
    det.configure(state='disabled')
    ok3.configure(state='disabled')
    det.configure(state='disabled')
    det1.configure('disabled')
    ok4.configure('disabled')
    try:
        x=tr.get_children()
        for item in x:
            tr.delete(item)

        max = float(maxe.get())
        min = float(mine.get())
        t = int(c.get())
        ran1.set("0")
        count = 0

        if TF.get() == "否":
            if max < min:
                r = max
                max = min
                min = r
            i = 1
            while i<=t:
                p = randint(min,max)
                li = [i,p]
                tr.insert("",END,values=li)
                i = i+1
                count =  count+1
                ran1.set(count)
                #sleep(0.000001)
            ran1.set("完成")
            win22.place_forget()
            win21.place(relx = 0,rely = 0,relwidth = 1,relheight = 1)
        if TF.get() == "是":
            co = []
            if max < min:
                r = max
                max = min
                min = r
            if max - min >= t:
                i = 1
                p = max + 1
                while i <= t:
                    while True:
                        print("1")
                        p = randint(min,max)
                        if p not in co:
                            co.append(p)
                            li = [i,p]
                            tr.insert("",END,values=li)
                            break
                    count = count+1
                    ran1.set(count)
                    i = i+1
                ran1.set("完成")
                win22.place_forget()
                win21.place(relx = 0,rely = 0,relwidth = 1,relheight = 1)
    except:
        """"""
    ok1.configure(state='normal')
    det.configure(state='normal')
    ok3.configure(state='normal')
    det.configure(state='normal')
    det1.configure(state='normal')
    ok4.configure(state='normal')


def coin():#硬币
    ok3.configure(state='disabled')
    det.configure(state='disabled')
    ok1.configure(state='disabled')
    det.configure(state='disabled')
    ok4.configure(state='disabled')
    try:
        coin1.set("0")
        count = 0
        t = int(n.get())
        i = 1
        x=tr.get_children()
        for item in x:
            tr.delete(item)
        coit = 0
        coif = 0
        print()

        while i<=t:
            p = randint(0,1)
            if p == 0:
                coif = coif + 1
                li = [i,"反面"]
                tr.insert("",END,values=li)
            if p == 1:
                coit = coit + 1
                li = [i,"正面"]
                tr.insert("",END,values=li)
            count = count+1
            coin1.set(count)
            i = i+1
        coin1.set("完成")
            #反面
        coinf.set(coif/t)
        coint.set(coit/t)
    except:
        """"""
    ok3.configure(state='normal')
    det.configure(state='normal')
    ok1.configure(state='normal')
    det.configure(state='normal')
    det1.configure(state='normal')
    ok4.configure(state='normal')

def dice():
    try:
        ok3.configure(state='disabled')
        det.configure(state='disabled')
        ok1.configure(state='disabled')
        det.configure(state='disabled')
        ok4.configure(state='disabled')
        det1.configure(state='disabled')
        n = int(dice1.get())
        i = 1
        x=tr.get_children()
        cou1 = cou2 = cou3 = cou4 = cou5 = cou6 = 0
        for item in x:
            tr.delete(item)
        while i<=n:
            p = randint(1,6)
            li = [i,p]
            if p == 1:
                cou1 = cou1 + 1
            if p == 2:
                cou2 = cou2 +1
            if p == 3:
                cou3 = cou3 +1
            if p == 4:
                cou4 = cou4 +1
            if p == 5:
                cou5 =cou5 +1
            if p == 6:
                cou6= cou6 + 1
            li = [i,p]
            tr.insert("",END,values=li)
            dicet.set(i)
            i = i+1
        dicet.set("完成")

        dic1.set(cou1/n)
        dic2.set(cou2/n)
        dic3.set(cou3/n)
        dic4.set(cou4/n)
        dic5.set(cou5/n)
        dic6.set(cou6/n)
    except:
        """"""
    ok3.configure(state='normal')
    det.configure(state='normal')
    ok1.configure(state='normal')
    det.configure(state='normal')
    det1.configure(state='normal')
    ok4.configure(state='normal')


def wind(x):
    win21.place_forget()
    win22.place_forget()
    win3.place_forget()
    win4.place_forget()
    if x == 1:
        win21.place(relx = 0,rely = 0,relwidth = 1,relheight = 1)
    if x == 2:
        win22.place(relx = 0.2,rely = 0.1,relwidth = 0.6,relheight = 0.8)
    if x == 3:
        win3.place(relx = 0.2,rely = 0.1,relwidth = 0.6,relheight = 0.8)
    if x == 4:
        win4.place(relx = 0.2,rely = 0.1,relwidth = 0.6,relheight = 0.8)





if __name__ == '__main__':
    win = Tk()
    win.title("概率")
    win.update()#刷新窗口信息
    sd = win.winfo_screenwidth()   #得到屏幕宽度
    sh = win.winfo_screenheight()  #得到屏幕高度
    wd = 1000
    wh = 600
    x = (sd-wd) / 2   #居中
    y = (sh-wh) / 2   #居中
    win.geometry("%dx%d+%d+%d" %(wd,wh,x,y))
    pn = IntVar()
    pn1 = StringVar()
    n = IntVar()
    ran1 = StringVar()
    coin1 = StringVar()
    dic6 = StringVar()
    dic5 = StringVar()
    dic4 = StringVar()
    dic3 = StringVar()
    dic2 = StringVar()
    dic1 = StringVar()

    win1 = Frame(win,bg = "#FFFFFF")
    Label(win1,text = "  ",bg = "#FFFFFF",height = 1).grid(row = 0,column = 0)
    win1.place(relx = 0,rely = 0,relwidth = 1,relheight = 0.1)
    Button(win1,text = "随机数",width = 6,command = lambda :wind(2)).grid(row = 1,column = 1,padx = 5)
    Button(win1,text = "抛硬币",width = 6,command = lambda :wind(3)).grid(row = 1,column = 2,padx = 5)
    Button(win1,text = "骰子",width = 6,command = lambda :wind(4)).grid(row = 1,column = 3,padx = 5)
    #Button(win1,text = "抽奖",width = 6,command = lambda :wind(5)).grid(row = 1,column = 4,padx = 5)
    #Button(win1,text = "随机点名",width = 6,command = lambda :wind(6)).grid(row = 1,column = 4,padx = 5)
    Label(win1,text = "版本:V0.01",bg ="#FFFFFF").grid(row = 0,column = 4,padx = 650)
    Label(win1,text = "作者博客:yxqfx.cn",bg ="#FFFFFF").grid(row = 1,column = 4)



    win2 = Frame(win)
    win2.place(relx = 0,rely = 0.1,relwidth = 1,relheight = 0.9)

    #...随机数

    #表格
    win21 = Frame(win2,bg = "#FFFFFF")
    win21.place(relx = 0,rely = 0,relwidth = 1,relheight = 1)

    sc = Scrollbar(win21)
    tr = ttk.Treeview(win21, height=5, show="headings", columns=("序号","值"),yscrollcommand= sc.set)#表格
    tr.column("序号", width=5, anchor='center') # 表示列,不显示
    tr.column("值", width=10, anchor='center')
    tr.heading("序号", text="序号") # 显示表头
    tr.heading("值", text="值")
    tr.place(relx = 0,rely = 0,relwidth = 0.95,relheight = 1)
    sc.config(command = tr.yview)
    sc.place(relx = 0.98,rely = 0,relwidth = 0.02,relheight = 1)
    win21.place_forget()#隐藏

    #....随机数
    win22 = Frame(win2,bg = "#FFFFFF")
    win22.place(relx = 0.2,rely = 0.1,relwidth = 0.6,relheight = 0.8)
    win221 = Frame(win22,bg = "#FFFFFF")
    win221.place(relx = 0.2,rely = 0,relwidth = 0.4,relheight = 0.4)
    maxt = Label(win221,text = "   最大值:",font =("楷体",15),bg = "#FFFFFF")
    maxt.grid(row = 1,column = 1,padx = 10,pady = 5)
    mint = Label(win221,text = "   最小值:",font =("楷体",15),bg = "#FFFFFF")
    mint.grid(row = 2,column = 1)
    maxe = Entry(win221)
    maxe.grid(row = 1,column = 2)
    mine = Entry(win221)
    mine.grid(row = 2,column = 2)
    Label(win221,text = "    次数:",font =("楷体",15),bg = "#FFFFFF").grid(row = 3,column = 1)
    c = Entry(win221)
    c.grid(row = 3,column = 2)

    Label(win221,text = "知否唯一",font =("楷体",15),bg = "#FFFFFF").grid(row = 5,column = 1)
    TF = StringVar()
    TF.set("否")
    var = ["是","否"]
    OptionMenu(win221,TF,* var).grid(row = 5,column = 2)

    win23 = Frame(win22,bg = "#FFFFFF")
    win23.place(relx = 0.3,rely = 0.4,relwidth = 0.3,relheight = 0.4)
    ok1 = Button(win23,text ="开始",command = lambda :start_new_thread(ran,()))
    ok1.place(relx = 0.3,rely = 0.4,relwidth = 0.3,relheight = 0.2)
    re = Label(win23,textvariable = ran1)
    re.place(relx = 0.4,rely = 0.7,relwidth = 0.2,relheight = 0.1)

    #win22.place_forget()

    #...硬币
    coint = StringVar()
    coinf = StringVar()
    win3 = Frame(win2,bg = "#FFFFFF")
    win3.place(relx = 0.2,rely = 0.1,relwidth = 0.6,relheight = 0.8)
    Label(win3,text = "次数",font =("楷体",15),bg = "#FFFFFF").grid(row = 1,column = 1,pady = 40,padx = 20)
    Entry(win3,textvariable = n,bg = "#FFFFFF").grid(row = 1,column = 2,padx = 0)
    ok3 = Button(win3,text = "开始",command = lambda :start_new_thread(coin,()))
    ok3.grid(row = 2,column = 3)
    Label(win3,textvariable = coin1,width = 5).grid(row = 3,column = 3)

    Label(win3,text = "正面:",bg = "#FFFFFF").grid(row= 4,column = 1)
    Label(win3,textvariable = coint,bg = "#FFFFFF" ).grid(row = 4,column = 2)
    Label(win3,text = "反面",bg = "#FFFFFF" ).grid(row = 5,column = 1)
    Label(win3,textvariable = coinf,bg = "#FFFFFF").grid(row = 5,column = 2)
    det = Button(win3,text = "详情",command =  lambda :wind(1))
    det.grid(row = 6,column = 3)
    win3.place_forget()

    #...骰子
    dicet = StringVar()
    win4 = Frame(win2,bg = "#FFFFFF")
    win4.place(relx = 0.2,rely = 0.1,relwidth = 0.6,relheight = 0.8)
    Label(win4,text = "次数",font =("楷体",15),bg = "#FFFFFF").grid(row = 1,column = 1,pady = 40,padx = 20)
    dice1 = Entry(win4,bg = "#FFFFFF")
    dice1.grid(row = 1,column = 2,padx = 0)
    ok4 = Button(win4,text = "开始",command = lambda :start_new_thread(dice,()))
    ok4.grid(row = 2,column = 3)
    Label(win4,textvariable = dicet,width = 5).grid(row = 3,column = 3)
    Label(win4,text = "1:",bg = "#FFFFFF" ).grid(row= 4,column = 1)
    Label(win4,textvariable = dic1,bg = "#FFFFFF" ).grid(row = 4,column = 2)
    Label(win4,text = "2:",bg = "#FFFFFF" ).grid(row = 5,column = 1)
    Label(win4,textvariable = dic2,bg = "#FFFFFF" ).grid(row = 5,column = 2)
    Label(win4,text = "3:",bg = "#FFFFFF" ).grid(row = 5,column = 1)
    Label(win4,textvariable = dic3,bg = "#FFFFFF" ).grid(row = 5,column = 2)
    Label(win4,text = "4:",bg = "#FFFFFF" ).grid(row = 7,column = 1)
    Label(win4,textvariable = dic4,bg = "#FFFFFF" ).grid(row = 7,column = 2)
    Label(win4,text = "5:",bg = "#FFFFFF" ).grid(row = 8,column = 1)
    Label(win4,textvariable = dic5,bg = "#FFFFFF" ).grid(row = 8,column = 2)
    Label(win4,text = "6:",bg = "#FFFFFF" ).grid(row = 9,column = 1)
    Label(win4,textvariable = dic6,bg = "#FFFFFF" ).grid(row = 9,column = 2)
    det1 = Button(win4,text = "详情",command =  lambda :wind(1))
    det1.grid(row = 10,column = 3)
    win4.place_forget()


mainloop()

 

[/pay]

嘿,大家好,小名尧尧,网名雨啸青锋,00后的小站主,某校高中生
最后更新于 2020-03-13