唉唉唉,今天下午刚刚去了学校之后就被紧急叫回来了。那怎么办呢?在家学习的效果肯定没有学校学习效果好啊!说不定我连六点钟起床的基本要求的做不到。那可怎么办,于是,我决定在今天晚上做一个简陋的闹钟程序,提醒我起床!
功能实现
咱们把这个程序分成两个部分,一个是让它能够发出声音,提醒我们起床。另一个就是我们在起床之后关停闹钟的部分。所以话不多说,我们立马开始!
关停闹钟
在这里呢,我们要来一个100以内的加减乘除,因为超出100的数字可能会太难,我们在这里并不常用。为了实现我们数据的随机性,我们在这里直接导用Python系统库中的Random
咱么把这个文件命名成为“MathClock”数学方程,在程序的第一行导入Random
接下来,咱么将要创建三个值,用来接收随机产生的数据。那么为了方便我们在后面的调用,我们把这整一个过程写成一个函数。
紧随着我们要确定第一个数和第二个数之间的运算符号,同时我们也要确定第二个数与第三个数之间的标点符号。这里我们使用Random中Choice的方法,从列表中随机抽取两个元素。那么要注意的是,我们在这里需要使用字符串类型,如果不使用字符串类型,程序将会报错
我们来检测一下这个函数是否能够成功运行。咱么先在下面调用函数
当我们改正错误后,我们可以看到程序随机选出了一种符号
接下来,我们将使用最简单的IF语句,来实现四则运算,就像这样
但是我们完全不知道题目呀!所以我们应该要加入一行题目信息
让它变得更美观
然后我们用同样的方法创造第二个四则运算
那么我们的运算部分就这样做完了!
P.S. 在这里实际上还是有一个小BUG 我们在一定程度上可能会遇到一个数不整除。这样我们的工作量就会增加。咱们就会与我们的理念相违背。所以我们在后续程序中解决问题的办法就是设置重新选择按键,进行重新的组合排列!
声音实现
在声音部分,我一直都很喜欢使用这一个轻量的Python第三方库。因为真的是十分简洁,我们在写代码的时候一行就能搞定调用。
pip install audioplayer
接下来我们将在我们的程序中导入这样一个模块。我们按照官网的提示信息导入
我们按照应用文件当中给出的支持的声音文件,随机在我们电脑上面选择一下
然后我使用了在我电脑上歌曲最靠前的Teeth。咱么更改一下文件名
并与我们的Python文件放在同一目录下,更改文件名为MathsSong
当我们的电脑中有对应的歌曲且我们能够听到声音时,我们的播放程序就没有问题
GUI界面设计
咱们为了整洁度和实用度,我们在本次实例中选择了Python自带的GUI 界面库 Tkinter
首先我们创建Tkinter对象,设置标题,接下来再放一个文本在窗口中。最后我们在最后一行加上window.mainloop()
这样就OK 啦
咱么先设置一下窗口的居中显示,这里借鉴了大神confusedlxx的代码
比如说我们这个问题太难了,用户并不能回答出来,这个时候我们要创建一个按钮,来让用户重新获得题目。我们编写函数RETRY_CLICK
由于我们要刷新题目,所以我们重写我们的代码,把它改成这样
进一步修整代码,使得我们代码能够同时获得答案和题目
我们将会在整个窗口中放上一个输入框,这样用来接受用户传递给我们的答案
为了后续程序检验的方便,我们在这里简化程序
当我们运行程序时,我们会出现以下界面
最后代码
由于这一次完成时间比较仓促,很多问题还没有处理好,希望大家能指出,谢谢
import random
from audioplayer import AudioPlayer
import tkinter
player = AudioPlayer("./MathsSong.mp3")
player.play()
window = tkinter.Tk()
window.title("MathsClock 数学闹钟") # 设置标题
# 设置居中显示,代码来自 https://blog.csdn.net/weixin_48690683/article/details/122773297
width = 300
height = 300
screen_height = window.winfo_screenheight()
screen_width = window.winfo_screenwidth()
x = int(screen_width / 2 - width / 2)
y = int(screen_height / 2 - height / 2)
size = '{}x{}+{}+{}'.format(width, height, x, y)
window.geometry(size)
# 创建一个Label 在上面放上表达的文字
clocking = tkinter.Label(window, text = "THE ALARM GOES OFF 闹钟响了").pack()
def make_maths_question():
first_number = random.randint(1,10)
second_number = random.randint(1,10)
third_number = random.randint(1,10)
symbol_list_1 = ["+","-","*","/"]
symbol_list_2 = ["+","-"]
first_symbol = random.choice(symbol_list_1)
if first_symbol == "+":
order_1 = str(first_number) + " + " + str(second_number)
count_1 = first_number + second_number
elif first_symbol == "-":
order_1 = str(first_number) + " - " + str(second_number)
count_1 = first_number - second_number
elif first_symbol == "*":
order_1 = str(first_number) + " * " + str(second_number)
count_1 = first_number * second_number
elif first_symbol == "/":
order_1 = str(first_number) + " / " + str(second_number)
count_1 = first_number / second_number
second_symbol = random.choice(symbol_list_2)
if second_symbol == "+":
order_2 = order_1 + " + " + str(third_number) + " = ?"
count_2 = count_1 + third_number
elif second_symbol == "-":
order_2 = order_1 + " - " + str(third_number) + " = ?"
count_2 = count_1 - third_number
return order_2,count_2
global CORRECT_ANSWER
maths_question = tkinter.StringVar()
question_text, correct_answer = make_maths_question()
CORRECT_ANSWER = correct_answer
maths_question.set(question_text)
def retry_click():
question_text, correct_answer = make_maths_question()
CORRECT_ANSWER = correct_answer
print(CORRECT_ANSWER)
maths_question.set(question_text)
def stop_click():
player.stop()
window.quit()
def enter_click():
user_answer = maths_question_enter.get()
print(user_answer)
print(CORRECT_ANSWER)
if int(user_answer) == int(CORRECT_ANSWER):
good = tkinter.StringVar()
good.set("YOU ARE RIGHT! 回答正确")
good_label = tkinter.Label(window, textvariable = good).pack()
stop_music_button = tkinter.Button(window, text = "STOP 停止", bg = "green", fg = "black", command = stop_click).pack()
else:
warning = tkinter.StringVar()
warning.set("YOU ARE WRONG! 回答错误")
warning_label = tkinter.Label(window, textvariable = warning).pack()
maths_label = tkinter.Label(window, textvariable = maths_question).pack()
retry = tkinter.Button(window, text = "RETRY 重试", bg = "green", fg = "black", command = retry_click).pack()
maths_question_enter = tkinter.Entry(window, width = 10)
maths_question_enter.pack()
maths_question_button = tkinter.Button(window, text = "ENTER 输入", bg = "green", fg = "black", command = enter_click).pack()
window.mainloop()
window.update()