commonhandle.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. """
  2. 一些共同操作
  3. """
  4. import random
  5. import config
  6. import os
  7. from imagebuilder import imageBuilder
  8. def generateObjectAnswer(rightper,studentdata,object_course_data,single_choice_order,multi_choice_order,choice):
  9. """
  10. 生成客观题作答
  11. """
  12. object_len = len(object_course_data)
  13. if object_len==0:
  14. return ""
  15. choice_num = int(object_len * rightper / 100)
  16. right_sample = object_course_data.sample(choice_num)
  17. right_sample.set_index(["大题号(只能用小写数字)", "小题号(只能用小写数字)"], inplace=True)
  18. right_index = list(right_sample.index)
  19. # 生成作答信息
  20. answerdata = ""
  21. order = 1
  22. for object_key, object_data_single in object_course_data.iterrows():
  23. if (object_data_single["大题号(只能用小写数字)"], object_data_single["小题号(只能用小写数字)"]) in right_index:
  24. answerdata = answerdata + "," + object_data_single["标准答案"]
  25. else:
  26. if order in single_choice_order:
  27. # 单选题时
  28. f = lambda x: [b for b in x if b != object_data_single["标准答案"]]
  29. answerdata = answerdata + "," + random.choice(f(choice))
  30. elif order in multi_choice_order:
  31. # 多选题时
  32. while True:
  33. question_num = random.choice(range(1, len(choice) + 1))
  34. answer = random.sample(choice, question_num)
  35. answer.sort()
  36. if "".join(answer) != object_data_single["标准答案"]:
  37. answerdata = answerdata + "," + "".join(answer)
  38. break
  39. # print("失败继续随机",answer,object_data_single["标准答案"])
  40. else:
  41. # 判断题时
  42. f = lambda x: [b for b in x if b != object_data_single["标准答案"]]
  43. answerdata = answerdata + "," + random.choice(f(["A", "B"]))
  44. order = order + 1
  45. object_answerdata = answerdata[1:]
  46. return object_answerdata
  47. def generateSubjectAnswer(student_data,subject_course_data):
  48. """
  49. 生成主观题作答
  50. """
  51. subject_answer_List = []
  52. subject_len = len(subject_course_data)
  53. if subject_len != 0:
  54. for subject_key, subbject_data_single in subject_course_data.iterrows():
  55. subject_answer_List.append("%s %s %d %d" % (
  56. student_data["准考证号"], student_data["姓名"], int(subbject_data_single["大题号(只能用小写数字)"]),
  57. int(subbject_data_single["小题号(只能用小写数字)"])))
  58. return subject_answer_List
  59. else:
  60. return []
  61. def generategxSubjectAnswer(student_data,subject_course_data):
  62. """
  63. 生成主观题作答
  64. """
  65. subject_answer_List = []
  66. subject_len = len(subject_course_data)
  67. if subject_len != 0:
  68. for subject_key, subbject_data_single in subject_course_data.iterrows():
  69. subject_answer_List.append("%s %s %d %d" % (
  70. student_data["准考证号"], student_data["姓名"], int(subbject_data_single["大题号"]),
  71. int(subbject_data_single["小题号"])))
  72. return subject_answer_List
  73. else:
  74. return []
  75. def generateSignTable(student_data_frame,student_data_signtable_group):
  76. """
  77. 生成签到表
  78. """
  79. for signcode, student_sign_data in student_data_signtable_group:
  80. sign_list = ""
  81. for key, student_data in student_sign_data.iterrows():
  82. #避免超出范围
  83. if student_data["absent"]==False:
  84. sign_list = sign_list + "," + str(student_data["准考证号"])
  85. # 存入文件
  86. print(sign_list)
  87. signoutputpath = str(config.examId) + os.sep + "image" + os.sep + "package" + os.sep + str(config.examId) + os.sep + str(
  88. signcode)
  89. if not os.path.exists(signoutputpath):
  90. os.makedirs(signoutputpath)
  91. signimage = imageBuilder(int(config.image_width) // 2, int(config.image_length), color=(255, 255, 255, 255))
  92. signimage.draw_text(0, 200, sign_list[1:100])
  93. signimage.saveimage(signoutputpath + os.sep + "1.jpg")