赞
踩
哈喽~今天开始分享数学类模拟器,首先展示的是实数模拟器~~~
主界面:
功能页面如下:
简单来说就是随机生成一个数,然后根据这个数字进行判断选择合适的类别,像上图就是一个无理数,而且是负无理数。。。因为其属于无限不循环小数。
接下来演示使用:
实数模拟器
那么这样一个实数模拟器要如何进行开发呢?
首先我们分析一下:
实数按类别可分为:1.正有理数 2.零 3.负有理数 4.正无理数 5.负无理数
而其中,正有理数和负有理数有两种表现形式:1.分数形式 2.无限循环小数形式
这样分析,就很清晰啦~
开始展示源代码:
前端页面:
- class basedesk():#底板
- def __init__(self, master):
- self.master = master
- self.master.title("实数模拟器")
- self.master.configure(bg='#B1FFF9')
- self.master.geometry("1000x600")
- mainwindow(self.master)
- class mainwindow():#主界面
- def __init__(self, master):
- self.master = master
- self.window = tk.Frame(self.master, bg='#e5ffe5')
- self.window.place(x=0,y=0,width=1000,height=600)
- self.window.showname_label=tk.Label(self.window,text="实数模拟器",fg='#26734d', bg='#ffe5ff',font=("Helvetic",60,"bold"),relief=RAISED).place(x=0, y=10,width=1000, height=150)
- self.window.enter_btn=tk.Button(self.window,text="开始",bg='#ffffe5',fg='#333399',font=("Helvetic", 60, "bold"),command=self.changetofunction).place(x=360, y=300,width=250, height=150)
- def changetofunction(self,):
- self.window.destroy()
- functionwindow(self.master)
- class functionwindow():
- def __init__(self, master):
- self.master = master
- self.window = tk.Frame(self.master, bg='#e5f9ff')
- self.window.place(x=0, y=0, width=1000, height=600)
- self.window.shownumber_listbox = tk.Listbox(self.window, font=("Helvetica", 20),justify='center')
- self.window.shownumber_listbox.place(x=100, y=50, width=800, height=200)
- self.master.name_label = tk.Label(self.master, text="请选择该数字的类别:", font=("Helvetic", 30, "bold"), bg='#e5f9ff').place(x=10, y=450)
- self.window.btn1 = tk.Button(self.window, text="正有理数", bg='#A5BF2F', fg='#FFFFFF',font=("Helvetic", 20, "bold"),command=self.choose_1).place(x=25, y=536,width=150,height=50)
- self.window.btn2 = tk.Button(self.window, text="零", bg='#A5BF2F', fg='#FFFFFF',font=("Helvetic", 20, "bold"),command=self.choose_2).place(x=225, y=536, width=150, height=50)
- self.window.btn3 = tk.Button(self.window, text="负有理数", bg='#A5BF2F', fg='#FFFFFF',font=("Helvetic", 20, "bold"),command=self.choose_3).place(x=425, y=536, width=150, height=50)
- self.window.btn4 = tk.Button(self.window, text="正无理数", bg='#A5BF2F', fg='#FFFFFF',font=("Helvetic", 20, "bold"),command=self.choose_4).place(x=625, y=536, width=150, height=50)
- self.window.btn5 = tk.Button(self.window, text="负无理数", bg='#A5BF2F', fg='#FFFFFF',font=("Helvetic", 20, "bold"),command=self.choose_5).place(x=825, y=536, width=150, height=50)
- self.make_a_new_number()
生成新数字:
- def make_a_new_number(self):
- #首先50%的概率生成有理数,50%的概率生成无理数
- if np.random.rand()>=0.5:
- self.make_a_rational_number()
- else:
- self.make_a_irrational_number()
- self.make_a_new_show()
- def make_a_new_show(self):
- self.window.shownumber_listbox.delete(0,END)
- self.window.shownumber_listbox.insert(END,self.shownum)
各个选项的函数:
- def choose_1(self):
- if self.answer==1:
- messagebox.showinfo("提示","回答正确!")
- else:
- messagebox.showerror("错误","回答错误!")
- return
- self.make_a_new_number()
- def choose_2(self):
- if self.answer==2:
- messagebox.showinfo("提示","回答正确!")
- else:
- messagebox.showerror("错误","回答错误!")
- return
- self.make_a_new_number()
- def choose_3(self):
- if self.answer==3:
- messagebox.showinfo("提示","回答正确!")
- else:
- messagebox.showerror("错误","回答错误!")
- return
- self.make_a_new_number()
- def choose_4(self):
- if self.answer==4:
- messagebox.showinfo("提示","回答正确!")
- else:
- messagebox.showerror("错误","回答错误!")
- return
- self.make_a_new_number()
- def choose_5(self):
- if self.answer==5:
- messagebox.showinfo("提示","回答正确!")
- else:
- messagebox.showerror("错误","回答错误!")
- return
- self.make_a_new_number()
生成有理数:
- def make_a_rational_number(self):
- if np.random.rand() >= 0.6:
- self.make_a_positive_rational_number()#生成正有理数
- elif np.random.rand() >= 0.2:
- self.make_a_negative_rational_number()#生成负有理数
- else:
- self.make_a_zero()#生成零
生成无理数:
- def make_a_irrational_number(self):
- if np.random.rand() >= 0.66:
- self.make_a_positive_irrational_number() # 生成正无理数
- elif np.random.rand() >= 0.33:
- self.make_a_negative_irrational_number() # 生成负无理数
- else:
- self.make_a_zero() # 生成零
每个类别都有一定的概率被选取
生成正有理数:
- def make_a_positive_rational_number(self):
- self.answer=1#设置正确答案为选项1
- a=np.random.randint(1,10)
- b = np.random.randint(1, 10)
- if np.random.rand()>=0.5:#生成分数
- self.shownum=str(a)+'/'+str(b)
- else:#生成小数
- self.shownum=str(a/b)+'...'
生成0:
- def make_a_zero(self):
- self.answer=2#设置正确答案为选项2
- self.shownum ='0'
生成负有理数:
- def make_a_negative_rational_number(self):
- self.answer=3#设置正确答案为选项3
- a = np.random.randint(1, 10)
- b = np.random.randint(1, 10)
- if np.random.rand() >= 0.5: # 生成分数
- self.shownum = '-'+str(a) + '/' + str(b)
- else: # 生成小数
- self.shownum = '-'+str(a / b) + '...'
生成正无理数:
- def make_a_positive_irrational_number(self):
- self.answer=4#设置正确答案为选项4
- a=np.random.random()*10
- self.shownum =str(a)+ '...'
生成负无理数:
- def make_a_negative_irrational_number(self):
- self.answer=5#设置正确答案为选项5
- a=np.random.random()*10
- self.shownum ='-'+str(a)+ '...'
由于在数学中认为无理数的数量远远远远远大于有理数的数量,因此我们不用担心随机生成的数是有理数,因为这个概率实在是太小了。。。
最后展示完整代码:
- from tkinter import *
- from tkinter import messagebox
- import tkinter as tk
- import numpy as np
- class basedesk():#底板
- def __init__(self, master):
- self.master = master
- self.master.title("实数模拟器")
- self.master.configure(bg='#B1FFF9')
- self.master.geometry("1000x600")
- mainwindow(self.master)
- class mainwindow():#主界面
- def __init__(self, master):
- self.master = master
- self.window = tk.Frame(self.master, bg='#e5ffe5')
- self.window.place(x=0,y=0,width=1000,height=600)
- self.window.showname_label=tk.Label(self.window,text="实数模拟器",fg='#26734d', bg='#ffe5ff',font=("Helvetic",60,"bold"),relief=RAISED).place(x=0, y=10,width=1000, height=150)
- self.window.enter_btn=tk.Button(self.window,text="开始",bg='#ffffe5',fg='#333399',font=("Helvetic", 60, "bold"),command=self.changetofunction).place(x=360, y=300,width=250, height=150)
- def changetofunction(self,):
- self.window.destroy()
- functionwindow(self.master)
- class functionwindow():
- def __init__(self, master):
- self.master = master
- self.window = tk.Frame(self.master, bg='#e5f9ff')
- self.window.place(x=0, y=0, width=1000, height=600)
- self.window.shownumber_listbox = tk.Listbox(self.window, font=("Helvetica", 20),justify='center')
- self.window.shownumber_listbox.place(x=100, y=50, width=800, height=200)
- self.master.name_label = tk.Label(self.master, text="请选择该数字的类别:", font=("Helvetic", 30, "bold"), bg='#e5f9ff').place(x=10, y=450)
- self.window.btn1 = tk.Button(self.window, text="正有理数", bg='#A5BF2F', fg='#FFFFFF',font=("Helvetic", 20, "bold"),command=self.choose_1).place(x=25, y=536,width=150,height=50)
- self.window.btn2 = tk.Button(self.window, text="零", bg='#A5BF2F', fg='#FFFFFF',font=("Helvetic", 20, "bold"),command=self.choose_2).place(x=225, y=536, width=150, height=50)
- self.window.btn3 = tk.Button(self.window, text="负有理数", bg='#A5BF2F', fg='#FFFFFF',font=("Helvetic", 20, "bold"),command=self.choose_3).place(x=425, y=536, width=150, height=50)
- self.window.btn4 = tk.Button(self.window, text="正无理数", bg='#A5BF2F', fg='#FFFFFF',font=("Helvetic", 20, "bold"),command=self.choose_4).place(x=625, y=536, width=150, height=50)
- self.window.btn5 = tk.Button(self.window, text="负无理数", bg='#A5BF2F', fg='#FFFFFF',font=("Helvetic", 20, "bold"),command=self.choose_5).place(x=825, y=536, width=150, height=50)
- self.make_a_new_number()
- def choose_1(self):
- if self.answer==1:
- messagebox.showinfo("提示","回答正确!")
- else:
- messagebox.showerror("错误","回答错误!")
- return
- self.make_a_new_number()
- def choose_2(self):
- if self.answer==2:
- messagebox.showinfo("提示","回答正确!")
- else:
- messagebox.showerror("错误","回答错误!")
- return
- self.make_a_new_number()
- def choose_3(self):
- if self.answer==3:
- messagebox.showinfo("提示","回答正确!")
- else:
- messagebox.showerror("错误","回答错误!")
- return
- self.make_a_new_number()
- def choose_4(self):
- if self.answer==4:
- messagebox.showinfo("提示","回答正确!")
- else:
- messagebox.showerror("错误","回答错误!")
- return
- self.make_a_new_number()
- def choose_5(self):
- if self.answer==5:
- messagebox.showinfo("提示","回答正确!")
- else:
- messagebox.showerror("错误","回答错误!")
- return
- self.make_a_new_number()
- def make_a_new_number(self):
- #首先50%的概率生成有理数,50%的概率生成无理数
- if np.random.rand()>=0.5:
- self.make_a_rational_number()
- else:
- self.make_a_irrational_number()
- self.make_a_new_show()
- def make_a_new_show(self):
- self.window.shownumber_listbox.delete(0,END)
- self.window.shownumber_listbox.insert(END,self.shownum)
- def make_a_rational_number(self):
- if np.random.rand() >= 0.6:
- self.make_a_positive_rational_number()#生成正有理数
- elif np.random.rand() >= 0.2:
- self.make_a_negative_rational_number()#生成负有理数
- else:
- self.make_a_zero()#生成零
- def make_a_irrational_number(self):
- if np.random.rand() >= 0.66:
- self.make_a_positive_irrational_number() # 生成正无理数
- elif np.random.rand() >= 0.33:
- self.make_a_negative_irrational_number() # 生成负无理数
- else:
- self.make_a_zero() # 生成零
- def make_a_positive_rational_number(self):
- self.answer=1#设置正确答案为选项1
- a=np.random.randint(1,10)
- b = np.random.randint(1, 10)
- if np.random.rand()>=0.5:#生成分数
- self.shownum=str(a)+'/'+str(b)
- else:#生成小数
- self.shownum=str(a/b)+'...'
- def make_a_zero(self):
- self.answer=2#设置正确答案为选项2
- self.shownum ='0'
- def make_a_negative_rational_number(self):
- self.answer=3#设置正确答案为选项3
- a = np.random.randint(1, 10)
- b = np.random.randint(1, 10)
- if np.random.rand() >= 0.5: # 生成分数
- self.shownum = '-'+str(a) + '/' + str(b)
- else: # 生成小数
- self.shownum = '-'+str(a / b) + '...'
- def make_a_positive_irrational_number(self):
- self.answer=4#设置正确答案为选项4
- a=np.random.random()*10
- self.shownum =str(a)+ '...'
- def make_a_negative_irrational_number(self):
- self.answer=5#设置正确答案为选项5
- a=np.random.random()*10
- self.shownum ='-'+str(a)+ '...'
-
-
- if __name__ == '__main__':#主函数
- root = tk.Tk()
- root.resizable(False, False)
- basedesk(root)
- root.mainloop()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。