【最近更新2版:11-30】单选+双选试题程序完美诞生

让代码服务教育,让科技创造美好生活!

一直以来不断的学习,也在不断的成长,代码是一个神奇的世界,这里你收获了快乐,成长了自我,实现了价值,放飞了梦想!
没有什么比一个想法通过一段文字能够释放出来更快乐的事情了,在学习的路上,一晃已经四年了,人生需要努力,教育需要助力,为了心中的梦想,加油!

先给各个好朋友们看代码,然后后面再进行简单的解说:

#-*- encoding:utf-8 -*-
import re,os,random,xlrd,html
from collections import Counter
wrong_list = []
correct_list = []
pd = ''

class Zuhe_xuanze:

    #选择路径函数
    def path_ori():
        global cur_dir,xt
        xt = input('八年级--b 九年级--j 高中政治--z')
        if xt.lower() == 'b' :
            cur_dir = r'F:\物理练习图\八年级\八年级组题'
        elif xt.lower() == 'j' :
            cur_dir = r'F:\物理练习图\九年级\九年级组题'
        elif xt.lower() == 'z' :
            cur_dir = r'F:\物理练习图\高中政治'
        files = os.listdir(cur_dir)
        return files

    #选择文件函数
    def choice_file(files):
        for index,file in enumerate(files):
            print(index,file.strip('.txt'))
            if index%4 == 0:
                print()
        xz = int(input('输入训练文件序号-->0\n start:'))
        files = files[xz]
        return files

    def correct_wrong_total(files):

        with open(os.path.join(cur_dir,files)) as f:

            lines = f.readlines()
            for line in lines:

                wrong = re.findall(r'#2',line)
                correct = re.findall(r'#1',line)

                if wrong:
                    wrong_list.append(line.replace('#2\n',''))
                if correct:
                    correct_list.append(line.replace('#1\n',''))



    cor_ans = []
    def show_que():
        global correct_after
        correct_after = []
        choice_correct = random.sample(correct_list,3)
        choice_wrong =  random.sample(wrong_list,1)
        choice_correct.extend(choice_wrong)
        random.shuffle(choice_correct)
        xh = ['A','B','C','D']

        print('从以下说法中选出与另外三项不同的一项(   )')

        for index,que in enumerate(choice_correct):
            que_each = f'{xh[index]}、{que}'

            correct_after.append(que_each)
            print(que_each)
            #返回一个答案项,再返回一个全选项。
        return (choice_wrong,correct_after)


    def panduan(choice_wrong):

        ans = input('输入答案:') + '、'
        print(choice_wrong)
        input()
        cor_ans = ''.join(choice_wrong)
        ans_chuli = ans + cor_ans
        #看双选展示规则
        print("........",ans_chuli)
        if ans_chuli in correct_after:
            print('恭喜你答对了哦!\n')
        else:
            print('对不起,你的答案不正确哦!')

    # 双选部分练习判断展示
    def show_two_que():
        global choice_after,choice_correct,choice_wrong
        #把两个正确的,两个错误的分别保存到变量,把全部选项保存到一个变量,并使用函数打乱选项顺序。
        choice_after = []
        choice_correct = random.sample(correct_list, 2)
        choice_wrong = random.sample(wrong_list, 2)

        choice_after.extend(choice_wrong)
        choice_after.extend(choice_correct)
        random.shuffle(choice_after)

        xh = ['A', 'B', 'C', 'D']

        print('从以下说法中选出正确的两项(   )')

        for index, que in enumerate(choice_after):
            que_each = f'{xh[index]}、{que}'

            print(que_each,end='\n')
            # 返回一个正确的列表变量_correct,再返回一个四个选项的变量_after。
        return (choice_correct, choice_after,xh)

    def panduan_two(choice_correct,xh):
        cor_ans = []
        #print('正确答案',choice_correct)
        #构造一个A、/B、/C、/D、
        while True:

            ans = input('输入答案:') + '、'

            #完成正确选项+ABCD、的拼合效果
            cor_ans.append(choice_after[xh.index(ans[0])])
            cor_ans.append(choice_after[xh.index(ans[1].strip('、'))])
            #这是通过前面导入一个比较列表的方法collections,把我们自己的答案和已知的标准答案,通过列表比较,得出反馈
            if Counter(cor_ans) == Counter(choice_correct):
                print('本双选题,恭喜你答对了哦!\n')
            else :
                print('本双选题回答错误哟!\n')

            print('这是正确答案---1', choice_correct[0])
            print('这是正确答案---2', choice_correct[1],"\n")

            break


    xz = input("请选择科目及练习类型:单选--d 双选--s")
    path_files = path_ori()
    files = choice_file(path_files)
    while True:

        if xz == 'd':

            correct_wrong_total(files)

            #2 问题装饰后重组
            choice_wrong,correct_after = show_que()
            #3 回答问题后判断
            panduan(choice_wrong)

        elif xz == 's':

            correct_wrong_total(files)

            # 2 问题装饰后重组
            choice_correct, correct_after,xh = show_two_que()
            # 3 回答问题后判断
            panduan_two(choice_correct,xh)


zh = Zuhe_xuanze

简单解释一下,本程序实现功能如下:

  1. 随机从试题库中抽取试题,给了我们很大的组题空间
  2. 通过功能设置单选,双选试题,当然其他的多选项,原理是一样的,读者可以自行开发。
  3. 代码结构:建立一个类,七个函数
  4. 中间在如何处理学生输入两个正确答案和标准答案比较时,出了一点插曲,最后反复研究通过一个新的模块解决了这个问题:from collections import Counter,因为我们可以利用这个模块来比较两个列表内的元素是不是完全一样,这样就可以判断学生的选择项是不是对的了。一个中午没有吃东西,终于搞定了,不容易。
  5. 缺少一个系统的评分系统,后面有时间继续完善,敬请大家关注!
增加成绩统计功能(11-30更新):
  1. 通过在类内的函数中增加一个成绩统计变量,来计算学生答题正确得分:类外增加变量初始设置
    score = 0
  2. 在函数内开始定义全局变量
   def panduan(choice_wrong):
       global score
  1. 开始使用这个变量score
    在函数内的变量分支中,如果答对试题,就自动增加2分,答错不加分
       if ans_chuli in correct_after:
            score+=2
            print(f'恭喜你答对了哦!当前总成绩:累加得{score}分\n')
        else:
            print('对不起,你的答案不正确哦!')

因为很多东西是边学习,边完善,难免有不理想或者更好的解决方案,欢迎大神们指点江山,一起为教育助力,为教师解放双手而努力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值