python课程设计——单项选择标准化考试

功能要求

  1. 本系统采用序列或字典保存单个试题,每个数据应当包括:题干、选项、答案等信息
  2. 本系统功能:
    (1)试题录入:可以随时添加试题
    (2)试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)
    (3)答题:用户可实现输入自己的答案
    (4)自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。
    (5)将试题信息保存到文件中。
    (6)进入系统之前要先输入密码
    (7)退出系统

功能截图

  1. 登陆界面
  2. 部分功能
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 保存功能
    在这里插入图片描述
    在这里插入图片描述

代码如下

import openpyxl 
from openpyxl import Workbook
from openpyxl import load_workbook
import time
import random
import sys


#设置题目
questions = [{'问题':'1+1','A':'2','B':'25','答案':'B'},
            {'问题':'1+2','A':'3','B':'26','答案':'B'},
            {'问题':'1+3','A':'4','B':'27','答案':'B'},
            {'问题':'1+4','A':'5','B':'28','答案':'B'},
            {'问题':'1+5','A':'6','B':'29','答案':'B'},
            {'问题':'1+6','A':'7','B':'30','答案':'B'},
            {'问题':'1+7','A':'8','B':'25','答案':'B'},
            {'问题':'1+8','A':'9','B':'25','答案':'B'},
            {'问题':'1+9','A':'10','B':'25','答案':'B'},
            {'问题':'1+0','A':'1','B':'25','答案':'B'}
]
wrong_questions  = []#错题本




#设置菜单
def menu42():
    print('[1]添加题目')
    print('[2]开始答题')
    print('[3]查看错题本')
    print('[4]保存题目与错题')
    print('[5]查看题库')
    print('[6]导入题库')
    print('[7]退出程序')

#添加题目
def add_question():
    dic_question = {}
    while True:#添加并判断题目是否相等
        dic_question['问题'] = input('请输入新添加的问题:')
        for question in questions:
            if question['问题'] == dic_question['问题']:
                print('问题已存在')
                break
        else:
            dic_question['A'] = input('请输入A选项:')
            dic_question['B'] = input('请输入B选项:')
            dic_question['答案'] = input('请输入答案:')
            questions.append(dic_question)
            print('添加成功')
            a = input('请选择是否再次添加,回答是或否:')
            if a=='是':
                add_question()
            else:
                pass
        break


#开始答题,答题结束10秒后系统将完成阅卷
def answer_questions42():
    a = eval(input('请输入你将测试题目的数量:'))#设置题目数量
    
    s = 0#分数储存
    i = 1#循环控制
    copy_questions = questions.copy()#复制题库
    while i <= a and a< len(questions):#循环控制:首先要小于题目数量;而且不超过题目数量
        question = random.choice(copy_questions)#随机抽取
        copy_questions.remove(question)#删除出现过的题目,去重
        print('问题{}:'.format(i),question['问题'])#打印问题
        print('-------------')
        print('选项:','A、',question['A'],'B、',question['B'])#打印选项
        print('---------------')
        answer = input('请输入答案:')#用户输入答案
        if answer == question['答案']:#判断用户输入的正确性
            print('回答正确,加1000分')
            s = s+1000#单个题目正确就加1000分
        else:
            print('答错了,放入错题本,记得复习。')#打印出错的提示

            wrong_questions.append(question)#错题加入错题本
        i = i+1#循环控制,使输出题目为用户输入题目数量 
    print('请耐心等待5秒钟,你的总分是-------')#增加真实感      
    time.sleep(5)#让用户等待5秒钟
    print(s)#打印用户总分数


#查看错题本
def showwrong_questions42():
    if len(wrong_questions) == 0:
        print('牛皮,您没有错题')
    else:
        for i in wrong_questions:
            print('-------------------')
            print('问题是:',i['问题'])
            
            print('选项A:',i['A'],'选项B:',i['B'],)
            
            print('答案是',i['答案'])
            print('---------------------')


#全部题目保存加错题保存
def write_tofile42():
    a = input('输入你要保存的名称:')
    wb = Workbook()#实例化一个对象
    sheet1 = wb.create_sheet('题库',0)#创建一个工作表
    sheet2 = wb.create_sheet('错题本',1)
    
    sheet1.sheet_properties.tabColor = "1072BA"
    sheet2.sheet_properties.tabColor = "1006BA"
    sheet1.cell(row=1,column=1).value='问题'
    sheet1.cell(row=1,column=2).value='选项A'
    sheet1.cell(row=1,column=3).value='选项B'
    sheet1.cell(row=1,column=4).value='答案'
    sheet2.cell(row=1,column=1).value='问题'
    sheet2.cell(row=1,column=2).value='选项A'
    sheet2.cell(row=1,column=3).value='选项B'
    sheet2.cell(row=1,column=4).value='答案'
    for j in range(len(questions)):
        
        sheet1.cell(row=2+j,column=1).value=questions[j]['问题']
        sheet1.cell(row=2+j,column=2).value=questions[j]['A']
        sheet1.cell(row=2+j,column=3).value=questions[j]['B']
        sheet1.cell(row=2+j,column=4).value=questions[j]['答案']
    for m in range(len(wrong_questions)):
        sheet2.cell(row=2+m,column=1).value=wrong_questions[m]['问题']
        sheet2.cell(row=2+m,column=2).value=wrong_questions[m]['A']
        sheet2.cell(row=2+m,column=3).value=wrong_questions[m]['B']
        sheet2.cell(row=2+m,column=4).value=wrong_questions[m]['答案']
    wb.save('{}.xlsx'.format(a))

#关闭程序
def close_file42():
    sys.exit()

#查看题库
def show_questions42():
    print('问题是:','选项A:','选项B:','答案',sep='   ')
    print('--------------------------------------------')
    for i in questions:

        print(i['问题'],i['A'],i['B'],i['答案'],sep='          ')
    print('--------------------------------------')      

#文件式导入题库
def write_questions42():
    print("-通过这种方法,你可以导入上次运行的错题,可以导入新题,还不用在程序里输入-")
    print('----点击后题目会自动导入,可以查看题库中导入的题目------')
    a = input('请输入已存在excel的路径:')
    wb = load_workbook(r'{}'.format(a))
    b = wb.sheetnames[0]
    ws = wb[b]


    s = 1
    while True and s< ws.max_row:

        dic={}
        dic['{}'.format(ws['{}{}'.format('A',1)].value)]='{}'.format(ws['{}{}'.format('A',s+1)].value) 
        dic['{}'.format(ws['{}{}'.format('B',1)].value)]='{}'.format(ws['{}{}'.format('B',s+1)].value) 
        dic['{}'.format(ws['{}{}'.format('C',1)].value)]='{}'.format(ws['{}{}'.format('C',s+1)].value) 
        dic['{}'.format(ws['{}{}'.format('D',1)].value)]='{}'.format(ws['{}{}'.format('D',s+1)].value)
        questions.append(dic) 
        s+=1
    

#设置主函数
def main42():
        while True:
            print('------登陆-------')
            print('账号是学号,密码是学号后五位')
            key_word = input("账号:")
            password = input("密码:")

            while True and password ==  key_word[-5:] and len(key_word) > 5:
                        print('----------------------')
                        
                        print('----------------------')
                        print('------单项选择标准化考试------')
                        menu42()    # 打印菜单
                        num = input('请输入您的选项:')
                        if num == '1':
                            add_question()  
                        elif num == '2':
                            answer_questions42() 
                        elif num == '3':
                            showwrong_questions42() 
                        elif num == '4':
                            write_tofile42()
                        elif num == '5':
                            show_questions42()
                        elif num == '6':
                            write_questions42()
                        elif num == '7':
                            close_file42()
                        else:
                            print('您选择的有误,请重新选择')
            else:
                print('你输入的密码有误,请重新输入')



if __name__=='__main__':
    main42()

函数功能总结

在这里插入图片描述


如果你觉得有用就点个👍呗
关注我,带你领略更多知识

  • 13
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值