课程的大作业,附上链接。

链接: https://pan.baidu.com/s/16SNozUXe7VgrpqGbOul3Uw 提取码: 665r 复制这段内容后打开百度网盘手机App,操作更方便哦

因为是第一次真正做一个应用,所以我先自己手绘了大致的GUI。如下:

 

第一部分,我考虑的是解析题库文件。题库文档按照选择题、判断题、简答题分块编写,因此可以按关键字将文档拆分为三块内容。

 

选择题题目内容为文档从头开始至选择题答案部分,代码截取该部分内容。逐条遍历选择题题目,剔除空格后首字符为数字表示该行为题目;首字符不为字母且不为ABCD,且上一行为题目内容,表明改行为题目次行内容;首字符为ABCD,表明改行为选项;首字母不为ABCD,且上一行为选项,表明改行为选项次行。根据该逻辑,将选择题题目部分再区分为选择题题目,选择题A项,选择题B项,选择题C项,选择题D项。以下为主要代码。

 

选择题答案内容为文档选择题答案开始至判断题开始。选择题答案内容直接提取ABCD(文档中已按顺序排列)。

判断题内容为文档判断题开始至简答题开始内容。判断题需将答案剔除,采用正则表达式提取(x)与(√)作为判断题答案,并转译为错误与正确。剩余部分即为判断题题目部分。此处为了方便处理,对题库部分地方进行了细小的修改。题库存在中英文括号混用,所以处理可能繁琐了一些。

 

简答题内容为简答题开始至文档结束。循环遍历简答题内容,首行带数字且首行数字大于历史已有题目序号,为简答题题目。剩余部分为简答题答案内容。

 

注册登陆界面采用tkinter编写,不再赘述。

登陆逻辑为读取本地用户名文件,文件内存储用户名和密码,如果输入用户名不存在或者密码与存储中的密码不一致,则为注册失败。

 

注册逻辑为判断输入用户名是否在本地用户名文件中,若存在,则注册失败,出现用户名已存在错误;若不存在,显示注册成功,并将注册账号和密码本地存储保存。

 

登陆成功后,关闭注册登陆界面,打开python训练界面。

选择题部分,规定单次最多训练量为20。生成20个50以内的不重复随机数,当点开练习按钮后,遍历这20个随机数,并将对应序号的选择题题目打印至界面上,同时制作单选题按钮,将对应题目的ABCD选项打印至界面。点击选项时触发按钮事件,事件会判断点击的ABCD是否为正确答案,若是,返回答对信息;若不是,返回打错信息并打印正确答案;事件还会记录本次答题数目以及历史该题答题次数,若答案正确还会记录本次答题正确数目以及历史该题答题正确数目,便于后续统计。题目界面包含下一题按钮和退出训练按钮,下一题按钮点击会触发题目遍历,打印第二道随机题目;退出训练按钮关闭答题界面并重新打开python训练界面。

 

选择题正确率部分,记录历史各题答题正确率,程序会读取本地答题历史文件,并累计本地答题情况。点击正确率按钮将打开新界面,展示历史答题正确率情况。

判断题部分实现逻辑与选择题部分一致。

简答题部分题目实现逻辑与选择题一致,答题区域由单选改为文本输入框,输入结束后点击完成答题触发按钮事件,事件逻辑与选择题事件逻辑一致。

绘图部分,根据历史答题的总答题数和正确数计算各题正确率。tkinter提供了从坐标1至坐标2的画线函数,设置基础坐标原点,循环遍历正确率得到连续两点的坐标绘制折线图,根据当前题目的正确率以及对应x轴坐标,并控制线条粗细绘制直方图。