今天我来把一个我最近做的挺完善的、可以和某某软件(比如学xx)做对比的一个程序。我先声明一下,这个代码未经允许不可转载!
导入库
考虑到本程序只是一个口算题卡的实验品,所以我在倒库时使用了入门级python程序猿必会的easygui库和标准库datetime、random库。如果没有easygui就下一个。不会?那就打开pip敲下pip install easygui。什么?连pip都没有?那好吧,快到easygui download | SourceForge.net去下载一个!好了,废话不多说,快开始写代码吧!
import easygui, datetime, random
写入乘、除法类
如果你还没学过类与对象,也没有关系,以后这种代码看多了,也会写一点点。我们今天要创建2个类,分别是乘、除法类(加减就不用了,增加难度嘛)。我们先讲一下思路:乘法的思路很简单,创建两个随机数(这儿用的是随机数除以10,因为有可能是小数),将他们相乘得到答案。出发也不难,创建出结果和除数,求出被除数。
class Times:
def __init__(self):
pass
def get(self):
self.fn = random.randint(11, 99) / 10
self.sn = random.randint(11, 99) / 10
self.r = self.fn * self.sn
return ['{:g}'.format(self.fn), '×', '{:g}'.format(self.sn), '{:g}'.format(self.r), 2]
class DividedBy:
def __init__(self):
pass
def get(self):
self.r = random.randint(11, 99) / 10
self.fn = random.randint(11, 99) / 10
self.sn = round(self.r * self.fn, 2)
return ['{:g}'.format(self.sn), '÷', '{:g}'.format(self.fn), '{:g}'.format(self.r), 2]
实例化类
我们现在要把类实例化。我使用了与类名字相近的名字命名。其实这是很自然的一个过程,我们总不好一直切换大小写吧,对不对?
times = Times()
divided_by = DividedBy()
主代码,终于等到你了!
现在我们终于可以开始定义我们的main函数了!废了不少功夫啊!代码比较多,我先展示代码。
def main():
times = Times()
divided_by = DividedBy()
correct = 0
mistake_list = []
start = datetime.datetime.now()
for i in range(20):
nl = random.choice([times.get(), divided_by.get()])
answer = easygui.enterbox('%s%s%s=?' %(nl[0], nl[1], nl[2]), title='第%i题' %(i+1))
if answer == nl[3]:
correct += 1
continue
if answer == None or answer == '': answer = '未答题'
mistake_list.append('第%i题:%s%s%s=?\t你的答案:%s\t正确答案:%s' %(i+1, nl[0], nl[1], nl[2], answer, nl[3]))
end = datetime.datetime.now()
time = (end-start).seconds
if correct == 20 and time < 600: name = '大神'
elif correct == 20 and time < 800: name = '专家'
elif correct >= 15 and time < 1200: name = '高手'
elif correct >= 10 and time < 1800: name = '新手'
else: name = '菜鸟'
easygui.msgbox('做对:%i题\n做错:%i题\n错题:\n%s\n正确率:%i%%\n总时长:%i秒\n每题平均时 长:%i秒\n称号:%s' %(correct, 20-correct, '\n'.join(mistake_list), correct*5, time, round(time/20), name), title='答题统计')
if __name__ == '__main__':
main()
注意把实例化的代码也放进main函数中。除此之外,我们还需要定义几个变量。首先是计算我们作对多少题的correct变量,再是用来存放错题的列表(其实最后我们是吧它当成字符串使用的)。紧接着我们定义了开始计时变量,在主循环的后面,定义了结束计时变量与时间变量,还有称号变量。现在我们来讲讲主循环。
首先我们获得一个随机的对象,可能是乘法也可能是除法。紧接着,我们输出题目并让玩家回答。再然后,我们判断答案是否正确,如果正确给用户加分(说是加分,其实就是统计正确率)。最后,我们按照用户情况给予其反馈。反馈界面是我“设计”过的(不过只是把列表转字符串好看些罢了),现在看觉得挺不错的。
好了,如果您对本次课程还满意的话,记得点赞加关注哦~~~