当前位置:   article > 正文

【安安教具】-【数学】-【实数】模拟器 教你如何用python制作实数模拟器 python小项目创作_python如何生成一个无理数

python如何生成一个无理数

哈喽~今天开始分享数学类模拟器,首先展示的是实数模拟器~~~

主界面:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5a6J5a6J5pWZ5YW3,size_20,color_FFFFFF,t_70,g_se,x_16

功能页面如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5a6J5a6J5pWZ5YW3,size_20,color_FFFFFF,t_70,g_se,x_16

简单来说就是随机生成一个数,然后根据这个数字进行判断选择合适的类别,像上图就是一个无理数,而且是负无理数。。。因为其属于无限不循环小数。

接下来演示使用:

实数模拟器

那么这样一个实数模拟器要如何进行开发呢?

首先我们分析一下:

实数按类别可分为:1.正有理数 2.零 3.负有理数 4.正无理数 5.负无理数

而其中,正有理数和负有理数有两种表现形式:1.分数形式 2.无限循环小数形式

这样分析,就很清晰啦~

开始展示源代码:

前端页面:

  1. class basedesk():#底板
  2. def __init__(self, master):
  3. self.master = master
  4. self.master.title("实数模拟器")
  5. self.master.configure(bg='#B1FFF9')
  6. self.master.geometry("1000x600")
  7. mainwindow(self.master)
  8. class mainwindow():#主界面
  9. def __init__(self, master):
  10. self.master = master
  11. self.window = tk.Frame(self.master, bg='#e5ffe5')
  12. self.window.place(x=0,y=0,width=1000,height=600)
  13. 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)
  14. 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)
  15. def changetofunction(self,):
  16. self.window.destroy()
  17. functionwindow(self.master)
  18. class functionwindow():
  19. def __init__(self, master):
  20. self.master = master
  21. self.window = tk.Frame(self.master, bg='#e5f9ff')
  22. self.window.place(x=0, y=0, width=1000, height=600)
  23. self.window.shownumber_listbox = tk.Listbox(self.window, font=("Helvetica", 20),justify='center')
  24. self.window.shownumber_listbox.place(x=100, y=50, width=800, height=200)
  25. self.master.name_label = tk.Label(self.master, text="请选择该数字的类别:", font=("Helvetic", 30, "bold"), bg='#e5f9ff').place(x=10, y=450)
  26. 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)
  27. 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)
  28. 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)
  29. 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)
  30. 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)
  31. self.make_a_new_number()

 生成新数字:

  1. def make_a_new_number(self):
  2. #首先50%的概率生成有理数,50%的概率生成无理数
  3. if np.random.rand()>=0.5:
  4. self.make_a_rational_number()
  5. else:
  6. self.make_a_irrational_number()
  7. self.make_a_new_show()
  8. def make_a_new_show(self):
  9. self.window.shownumber_listbox.delete(0,END)
  10. self.window.shownumber_listbox.insert(END,self.shownum)

各个选项的函数:

  1. def choose_1(self):
  2. if self.answer==1:
  3. messagebox.showinfo("提示","回答正确!")
  4. else:
  5. messagebox.showerror("错误","回答错误!")
  6. return
  7. self.make_a_new_number()
  8. def choose_2(self):
  9. if self.answer==2:
  10. messagebox.showinfo("提示","回答正确!")
  11. else:
  12. messagebox.showerror("错误","回答错误!")
  13. return
  14. self.make_a_new_number()
  15. def choose_3(self):
  16. if self.answer==3:
  17. messagebox.showinfo("提示","回答正确!")
  18. else:
  19. messagebox.showerror("错误","回答错误!")
  20. return
  21. self.make_a_new_number()
  22. def choose_4(self):
  23. if self.answer==4:
  24. messagebox.showinfo("提示","回答正确!")
  25. else:
  26. messagebox.showerror("错误","回答错误!")
  27. return
  28. self.make_a_new_number()
  29. def choose_5(self):
  30. if self.answer==5:
  31. messagebox.showinfo("提示","回答正确!")
  32. else:
  33. messagebox.showerror("错误","回答错误!")
  34. return
  35. self.make_a_new_number()

生成有理数:

  1. def make_a_rational_number(self):
  2. if np.random.rand() >= 0.6:
  3. self.make_a_positive_rational_number()#生成正有理数
  4. elif np.random.rand() >= 0.2:
  5. self.make_a_negative_rational_number()#生成负有理数
  6. else:
  7. self.make_a_zero()#生成零

生成无理数:

  1. def make_a_irrational_number(self):
  2. if np.random.rand() >= 0.66:
  3. self.make_a_positive_irrational_number() # 生成正无理数
  4. elif np.random.rand() >= 0.33:
  5. self.make_a_negative_irrational_number() # 生成负无理数
  6. else:
  7. self.make_a_zero() # 生成零

每个类别都有一定的概率被选取

生成正有理数:

  1. def make_a_positive_rational_number(self):
  2. self.answer=1#设置正确答案为选项1
  3. a=np.random.randint(1,10)
  4. b = np.random.randint(1, 10)
  5. if np.random.rand()>=0.5:#生成分数
  6. self.shownum=str(a)+'/'+str(b)
  7. else:#生成小数
  8. self.shownum=str(a/b)+'...'

生成0:

  1. def make_a_zero(self):
  2. self.answer=2#设置正确答案为选项2
  3. self.shownum ='0'

生成负有理数:

  1. def make_a_negative_rational_number(self):
  2. self.answer=3#设置正确答案为选项3
  3. a = np.random.randint(1, 10)
  4. b = np.random.randint(1, 10)
  5. if np.random.rand() >= 0.5: # 生成分数
  6. self.shownum = '-'+str(a) + '/' + str(b)
  7. else: # 生成小数
  8. self.shownum = '-'+str(a / b) + '...'

生成正无理数:

  1. def make_a_positive_irrational_number(self):
  2. self.answer=4#设置正确答案为选项4
  3. a=np.random.random()*10
  4. self.shownum =str(a)+ '...'

生成负无理数:

  1. def make_a_negative_irrational_number(self):
  2. self.answer=5#设置正确答案为选项5
  3. a=np.random.random()*10
  4. self.shownum ='-'+str(a)+ '...'

由于在数学中认为无理数的数量远远远远远大于有理数的数量,因此我们不用担心随机生成的数是有理数,因为这个概率实在是太小了。。。

最后展示完整代码:

  1. from tkinter import *
  2. from tkinter import messagebox
  3. import tkinter as tk
  4. import numpy as np
  5. class basedesk():#底板
  6. def __init__(self, master):
  7. self.master = master
  8. self.master.title("实数模拟器")
  9. self.master.configure(bg='#B1FFF9')
  10. self.master.geometry("1000x600")
  11. mainwindow(self.master)
  12. class mainwindow():#主界面
  13. def __init__(self, master):
  14. self.master = master
  15. self.window = tk.Frame(self.master, bg='#e5ffe5')
  16. self.window.place(x=0,y=0,width=1000,height=600)
  17. 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)
  18. 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)
  19. def changetofunction(self,):
  20. self.window.destroy()
  21. functionwindow(self.master)
  22. class functionwindow():
  23. def __init__(self, master):
  24. self.master = master
  25. self.window = tk.Frame(self.master, bg='#e5f9ff')
  26. self.window.place(x=0, y=0, width=1000, height=600)
  27. self.window.shownumber_listbox = tk.Listbox(self.window, font=("Helvetica", 20),justify='center')
  28. self.window.shownumber_listbox.place(x=100, y=50, width=800, height=200)
  29. self.master.name_label = tk.Label(self.master, text="请选择该数字的类别:", font=("Helvetic", 30, "bold"), bg='#e5f9ff').place(x=10, y=450)
  30. 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)
  31. 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)
  32. 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)
  33. 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)
  34. 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)
  35. self.make_a_new_number()
  36. def choose_1(self):
  37. if self.answer==1:
  38. messagebox.showinfo("提示","回答正确!")
  39. else:
  40. messagebox.showerror("错误","回答错误!")
  41. return
  42. self.make_a_new_number()
  43. def choose_2(self):
  44. if self.answer==2:
  45. messagebox.showinfo("提示","回答正确!")
  46. else:
  47. messagebox.showerror("错误","回答错误!")
  48. return
  49. self.make_a_new_number()
  50. def choose_3(self):
  51. if self.answer==3:
  52. messagebox.showinfo("提示","回答正确!")
  53. else:
  54. messagebox.showerror("错误","回答错误!")
  55. return
  56. self.make_a_new_number()
  57. def choose_4(self):
  58. if self.answer==4:
  59. messagebox.showinfo("提示","回答正确!")
  60. else:
  61. messagebox.showerror("错误","回答错误!")
  62. return
  63. self.make_a_new_number()
  64. def choose_5(self):
  65. if self.answer==5:
  66. messagebox.showinfo("提示","回答正确!")
  67. else:
  68. messagebox.showerror("错误","回答错误!")
  69. return
  70. self.make_a_new_number()
  71. def make_a_new_number(self):
  72. #首先50%的概率生成有理数,50%的概率生成无理数
  73. if np.random.rand()>=0.5:
  74. self.make_a_rational_number()
  75. else:
  76. self.make_a_irrational_number()
  77. self.make_a_new_show()
  78. def make_a_new_show(self):
  79. self.window.shownumber_listbox.delete(0,END)
  80. self.window.shownumber_listbox.insert(END,self.shownum)
  81. def make_a_rational_number(self):
  82. if np.random.rand() >= 0.6:
  83. self.make_a_positive_rational_number()#生成正有理数
  84. elif np.random.rand() >= 0.2:
  85. self.make_a_negative_rational_number()#生成负有理数
  86. else:
  87. self.make_a_zero()#生成零
  88. def make_a_irrational_number(self):
  89. if np.random.rand() >= 0.66:
  90. self.make_a_positive_irrational_number() # 生成正无理数
  91. elif np.random.rand() >= 0.33:
  92. self.make_a_negative_irrational_number() # 生成负无理数
  93. else:
  94. self.make_a_zero() # 生成零
  95. def make_a_positive_rational_number(self):
  96. self.answer=1#设置正确答案为选项1
  97. a=np.random.randint(1,10)
  98. b = np.random.randint(1, 10)
  99. if np.random.rand()>=0.5:#生成分数
  100. self.shownum=str(a)+'/'+str(b)
  101. else:#生成小数
  102. self.shownum=str(a/b)+'...'
  103. def make_a_zero(self):
  104. self.answer=2#设置正确答案为选项2
  105. self.shownum ='0'
  106. def make_a_negative_rational_number(self):
  107. self.answer=3#设置正确答案为选项3
  108. a = np.random.randint(1, 10)
  109. b = np.random.randint(1, 10)
  110. if np.random.rand() >= 0.5: # 生成分数
  111. self.shownum = '-'+str(a) + '/' + str(b)
  112. else: # 生成小数
  113. self.shownum = '-'+str(a / b) + '...'
  114. def make_a_positive_irrational_number(self):
  115. self.answer=4#设置正确答案为选项4
  116. a=np.random.random()*10
  117. self.shownum =str(a)+ '...'
  118. def make_a_negative_irrational_number(self):
  119. self.answer=5#设置正确答案为选项5
  120. a=np.random.random()*10
  121. self.shownum ='-'+str(a)+ '...'
  122. if __name__ == '__main__':#主函数
  123. root = tk.Tk()
  124. root.resizable(False, False)
  125. basedesk(root)
  126. root.mainloop()

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/643183
推荐阅读
相关标签
  

闽ICP备14008679号