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)
界面,方便阅读和使用