用python实现随机生成数

python中主要用random库实现随机生成数据。本文主要利用random和列表操作实现随机生成数,并用tkinter实现图形用户界面,方便阅读和使用。

from tkinter import *
from tkinter import ttk
import random

global 大小状态
大小状态 = False

global 去重状态
去重状态 = False

global 随机列表
随机列表 = []

##设置全局变量

def hp(width,height):
    hp = Tk()
    hp.title("随机生成数")

    w = hp.winfo_screenwidth()#获取屏幕宽度
    h = hp.winfo_screenheight()#获取屏幕高度
    pw = (w - width -120)/2
    ph = (h - height - 120)/2
    hp.geometry("%dx%d+%d+%d"%(width,height,pw,ph))#设置窗口界面

    hp.resizable(False,False)#设置窗口不可拉伸宽度和高度


    标签 = Label(hp,text = "随机生成数",font = ("微软雅黑",17),bg = "green")
    标签.pack()#"随机生成数"标签

    提示1 = Label(hp,text = "请选择要生成数的范围(0-100):",font = ("微软雅黑",10))
    提示1.place(x = 10,y = 60)#"请选择要生成数的范围(0-100):"标签
    
    选择1 = ttk.Spinbox(hp,from_ = 0,to = 99)
    选择1.place(x = 200,y = 63,width = 42,height = 20)
    选择1.insert(END,0)#生成数起始范围数值调整框(0-99)

    选择2 = ttk.Spinbox(hp,from_ = 1,to = 100)
    选择2.place(x = 260,y = 63,width = 42,height = 20)
    选择2.insert(END,10)#生成数终止范围数值调整框(1-100)

    提示杠1 = Label(hp,text = "-")
    提示杠1.place(x = 245,y = 60)#生成数分解线

    提示2 = Label(hp,text = "请选择要生成数的次数(1-10):",font = ("微软雅黑",10))
    提示2.place(x = 10,y = 90)#"请选择要生成数的次数(1-10):"标签

    选择3 = ttk.Spinbox(hp,from_ = 1,to = 10)
    选择3.place(x = 190,y = 93,width = 40,height = 20)
    选择3.insert(END,10)#生成数次数数值调整框(1-10)

    提示3 = Label(hp,text = "请选择要生成数字体颜色:",font = ("微软雅黑",10))
    提示3.place(x = 10,y = 120)#"请选择要生成数字体颜色:"标签

    选择颜色1 = ttk.Combobox(hp)
    选择颜色1["value"] = ("red","yellow","blue","green","purple","brown","white","black")#可选字体颜色列表
    选择颜色1.set("black")#默认初始字体颜色
    选择颜色1.place(x = 166,y = 123,width = 61)

    提示4 = Label(hp,text = "请选择要生成数字背景颜色:",font = ("微软雅黑",10))
    提示4.place(x = 246,y = 121)#"请选择要生成数字背景颜色:"标签

    选择颜色2 = ttk.Combobox(hp)
    选择颜色2["value"] = ("red","yellow","blue","green","purple","brown","white","black")#可选背景颜色列表
    选择颜色2.set("green")#设置初始背景颜色
    选择颜色2.place(x = 416,y = 123,width = 61)
    
    def 大小选择():
        while True:
            global 大小状态
            if 大小状态 == False:
                大小状态 = True
                break
            elif 大小状态 == True:
                大小状态 = False
                break
            else:
                break

    def 去重选择():
        while True:
            global 去重状态
            if 去重状态 == False:
                去重状态 = True
                break
            elif 去重状态 == True:
                去重状态 = False
                break
            else:
                break

    大小提示 = Checkbutton(hp,text = "数字按大小排序",command = 大小选择)
    大小提示.place(x = 250,y = 90)#选择数字大小排序

    去重提示 = Checkbutton(hp,text = "去重",command = 去重选择)
    去重提示.place(x = 380,y = 90)#选择去重

    ##GUI界面设置

    def 开始选择():
        global 随机列表
        global 随机数板
        try:
            随机数板.place_forget()#去除上一次运行的生成数
            随机列表 = []#生成随机列表,存放生成数
        except:
            pass

        随机抽取范围1 = int(选择1.get())
        随机抽取范围2 = int(选择2.get())
        随机抽取次数 = int(选择3.get())
        #获取选择数据

        if 随机抽取范围1 < 0:
            随机抽取范围1 = 0#设置起始最小界限
        if 随机抽取范围1 > 99:
            随机抽取范围1 = 99#设置起始最大界限
        if 随机抽取范围2 < 0:
            随机抽取范围 = 0#设置终止最小界限
        if 随机抽取范围2 > 100:
            随机抽取范围2 = 100#设置终止最大界限
        if 随机抽取次数 < 1:
            随机抽取次数 = 1#设置次数最小界限
        if 随机抽取次数 > 10:
            随机抽取次数 = 10#设置次数最大界限
        if 随机抽取范围1 >= 随机抽取范围2:
            随机抽取范围1 = 随机抽取范围2 - 1#终止范围>起始范围
        if 随机抽取范围2 - 随机抽取范围1 < 随机抽取次数:
            随机抽取次数 = 随机抽取范围2 - 随机抽取范围1#抽取次数<=终止范围-起始范围
        #(规范超范围生成数)

        选择1.delete(0,END)
        选择2.delete(0,END)
        选择3.delete(0,END)
        选择1.insert(END,随机抽取范围1)
        选择2.insert(END,随机抽取范围2)
        选择3.insert(END,随机抽取次数)
        #(刷新数据,防止选择范围卡死)
        

        随机数板 = Label(hp,fg = 选择颜色1.get(),bg = 选择颜色2.get(),font = ("微软雅黑",22))
        随机数板.place(x = 20,y = 270)#生成选择生成数数版

        for x in range(随机抽取次数):
            随机数 = random.randint(随机抽取范围1,随机抽取范围2)
            随机列表.append(随机数)
            #写入生成数
        else:
            print(随机列表)
            if 去重状态 == False:#去重状态为"否"
                if 大小状态 == False:#大小状态为"否"
                    随机数板.configure(text = 随机列表)
                elif 大小状态 == True:#大小状态为"是"
                    随机列表.sort()#列表元素按大小顺序排列
                    随机数板.configure(text = 随机列表)
    

            elif 去重状态 == True:#去重状态为"是"
                if 随机抽取范围2 - 随机抽取范围1 < 随机抽取次数:
                    随机抽取次数 = 随机抽取范围2 - 随机抽取范围1
                    #(当去重范围小于随机抽取次数时,抽取次数等于抽取范围)

                    选择3.delete(0,END)
                    选择3.insert(END,随机抽取次数)#写入去重后抽取次数
            
                随机列表 = list(set(随机列表))#列表去重
                while True:
                    def 随机抽取():
                        global 随机列表
                        随机数 = random.randint(随机抽取范围1,随机抽取范围2)
                        随机列表.append(随机数)
                        随机列表 = list(set(随机列表))#列表去重
                        
                    if len(随机列表) < 随机抽取次数:
                        随机抽取()#去重列表重新随机生成数
                        
                    else:
                        if 大小状态 == False:#大小状态为"否"
                            random.shuffle(随机列表)#将列表内元素重新排序
                            随机数板.configure(text = 随机列表)
                            break
                        elif 大小状态 == True:#大小状态为"是"
                            随机列表.sort()#列表内元素按大小顺序排列
                            随机数板.configure(text = 随机列表)
                            break
                        
        ##开始生成随机数
            
    开始 = Button(hp,text = "开始",font = ("微软雅黑",11),relief = GROOVE,bg = "blue",command = 开始选择)
    开始.place(x = 204,y = 170,width = 120,height = 40)#开始按钮


    hp.mainloop()#主事件循环执行

if __name__ == "__main__":
    hp(530,390)

界面,方便阅读和使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值