python20211225-时政测验,给定题库做测验

题目要求:

http://qiniu.konny.space/py20211225-1.jpeg

http://qiniu.konny.space/py20211225-2.jpeg

http://qiniu.konny.space/py20211225-3.jpeg

http://qiniu.konny.space/py20211225-4.jpeg

直接上代码吧:

import random,csv
import time  # 引入time模块

# 时政测验函数
def doTest():
    ## 在下方完成doTest()函数 ##
    
    #1.输入题目数量
    qnum=input('请输入组卷的题数N(4<=N<=10),若N值错误或者不在范围内,则默认N=5:')
    try:
        qnum=int(qnum)
    except (TypeError, ValueError):
        qnum=5;
    if qnum<4 or qnum>10 :
        qnum=5;
    print('*********本次测试开始*********')
    print('随机抽取',qnum,'道测试题,答对1题得20分,答错不得分\n')
    
    #2.读取csv里面的题目,写入数组data,每个记录是一个对象record
    data=[]
    with open('时政测验.csv','r') as f:
        reader=csv.reader(f)
        count=0
        for line in reader:
            ##print(line)
            if count>0 and len(line)==6:
                record={"question":line[0],"a":line[1],"b":line[2]
                        ,"c":line[3],"d":line[4],"zzz":line[5]}
                data.append(record);
            count=count+1

    #3.生成5个随机数indexDict,且不重复!
    indexDict={};
    count = 0
    while (count < qnum):
        index=random.randint(0,len(data)-1) #randint(a,b),从a到b,包含a,b,所以b是:数组长度-1
        if index not in indexDict:  #通过dict去重复题号
            indexDict[index]=index;
            count = count + 1
    #print('生成的',qnum,'个随机数是:\n',indexDict)

    #4.开始做题目
    ok=0;
    notok=0;
    count=1;
    answerArr=["A","B","C","D"]
    for key in indexDict:
        #print("kkey",key)
        record =data[key]
        print("(%d)%s"%(count,record["question"]))
        print("<A>%s"%record["a"])
        print("<B>%s"%record["b"])
        print("<C>%s"%record["c"])
        print("<D>%s"%record["d"])
        while True:
            answer=input("请选择:")
            if answer.upper() in answerArr:
                break;
            else:
                print("答案格式错误,请重新输入:abcdABCD中的一个值!")
        count = count + 1
        if answer.upper()==record["zzz"].upper():
            ok=ok+1
            print("正确\n")
        else:
            notok=notok+1
            print("错误\n")
            
    print("本次测验,答对",ok,"题,答错",notok,"题,成绩为",ok*20,"分。")

    #5.写入日志
    logstr="时间:%s,成绩:%d分。\n"%(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),ok*20)
    log="TestLog.txt"
    with open(log,"a") as file:
        file.write(logstr)
    #print('*********本次时政测验结束*********\n\n')
        
    ## 在上方完成doTest()函数 ##

# 主程序
# 为避免互评时出错,在编程时务必将代码文件和CSV文件放在同一目录下,
# 并以相对路径的方式读取文件,测试通过后再提交结果。
while True: 
    print('1:时政测验\n2:退出')
    print('-----------------------------')
    oprate=input('请输入操作选项:')
    ## 在下方完成对于输入选项的判断 ##
    if oprate=='1':
        doTest()
        break
    elif oprate=='2':
        break
    else:
        print('输入操作选项错误,请重试……')
        continue
    
    ## 在上方完成对于输入选项的判断 ##
        
print('===程序执行结束===')

end