题目要求:
直接上代码吧:
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('===程序执行结束===')