123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- """
- 一些共同操作
- """
- import random
- import config
- import os
- from imagebuilder import imageBuilder
- def generateObjectAnswer(rightper,studentdata,object_course_data,single_choice_order,multi_choice_order,choice):
- """
- 生成客观题作答
- """
- object_len = len(object_course_data)
- if object_len==0:
- return ""
- choice_num = int(object_len * rightper / 100)
- right_sample = object_course_data.sample(choice_num)
- right_sample.set_index(["大题号(只能用小写数字)", "小题号(只能用小写数字)"], inplace=True)
- right_index = list(right_sample.index)
- # 生成作答信息
- answerdata = ""
- order = 1
- for object_key, object_data_single in object_course_data.iterrows():
- if (object_data_single["大题号(只能用小写数字)"], object_data_single["小题号(只能用小写数字)"]) in right_index:
- answerdata = answerdata + "," + object_data_single["标准答案"]
- else:
- if order in single_choice_order:
- # 单选题时
- f = lambda x: [b for b in x if b != object_data_single["标准答案"]]
- answerdata = answerdata + "," + random.choice(f(choice))
- elif order in multi_choice_order:
- # 多选题时
- while True:
- question_num = random.choice(range(1, len(choice) + 1))
- answer = random.sample(choice, question_num)
- answer.sort()
- if "".join(answer) != object_data_single["标准答案"]:
- answerdata = answerdata + "," + "".join(answer)
- break
- # print("失败继续随机",answer,object_data_single["标准答案"])
- else:
- # 判断题时
- f = lambda x: [b for b in x if b != object_data_single["标准答案"]]
- answerdata = answerdata + "," + random.choice(f(["A", "B"]))
- order = order + 1
- object_answerdata = answerdata[1:]
- return object_answerdata
- def generateSubjectAnswer(student_data,subject_course_data):
- """
- 生成主观题作答
- """
- subject_answer_List = []
- subject_len = len(subject_course_data)
- if subject_len != 0:
- for subject_key, subbject_data_single in subject_course_data.iterrows():
- subject_answer_List.append("%s %s %d %d" % (
- student_data["准考证号"], student_data["姓名"], int(subbject_data_single["大题号(只能用小写数字)"]),
- int(subbject_data_single["小题号(只能用小写数字)"])))
- return subject_answer_List
- else:
- return []
- def generategxSubjectAnswer(student_data,subject_course_data):
- """
- 生成主观题作答
- """
- subject_answer_List = []
- subject_len = len(subject_course_data)
- if subject_len != 0:
- for subject_key, subbject_data_single in subject_course_data.iterrows():
- subject_answer_List.append("%s %s %d %d" % (
- student_data["准考证号"], student_data["姓名"], int(subbject_data_single["大题号"]),
- int(subbject_data_single["小题号"])))
- return subject_answer_List
- else:
- return []
- def generateSignTable(student_data_frame,student_data_signtable_group):
- """
- 生成签到表
- """
- for signcode, student_sign_data in student_data_signtable_group:
- sign_list = ""
- for key, student_data in student_sign_data.iterrows():
- #避免超出范围
- if student_data["absent"]==False:
- sign_list = sign_list + "," + str(student_data["准考证号"])
- # 存入文件
- print(sign_list)
- signoutputpath = str(config.examId) + os.sep + "image" + os.sep + "package" + os.sep + str(config.examId) + os.sep + str(
- signcode)
- if not os.path.exists(signoutputpath):
- os.makedirs(signoutputpath)
- signimage = imageBuilder(int(config.image_width) // 2, int(config.image_length), color=(255, 255, 255, 255))
- signimage.draw_text(0, 200, sign_list[1:100])
- signimage.saveimage(signoutputpath + os.sep + "1.jpg")
|