口算运行器

今天我来把一个我最近做的挺完善的、可以和某某软件(比如学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变量,再是用来存放错题的列表(其实最后我们是吧它当成字符串使用的)。紧接着我们定义了开始计时变量,在主循环的后面,定义了结束计时变量与时间变量,还有称号变量。现在我们来讲讲主循环。

首先我们获得一个随机的对象,可能是乘法也可能是除法。紧接着,我们输出题目并让玩家回答。再然后,我们判断答案是否正确,如果正确给用户加分(说是加分,其实就是统计正确率)。最后,我们按照用户情况给予其反馈。反馈界面是我“设计”过的(不过只是把列表转字符串好看些罢了),现在看觉得挺不错的。

好了,如果您对本次课程还满意的话,记得点赞加关注哦~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值