添加关联题目 编写进行中

This commit is contained in:
weiye.wang 2024-04-15 00:21:16 +08:00
parent f98b98663a
commit 12e54a7759
2 changed files with 37 additions and 47 deletions

View File

@ -399,7 +399,8 @@ def CreateNewProblem(id,content,origin,dict,editor): # 构建一道新题目的
NewProblem["edit"] = [editor]
return NewProblem # 返回一道新题目的字典, 已赋新的ID, 内容, 来源和编辑者
def AddRelatedProblemToDB(id,content,oid,editor):
pass
def AddProblemstoDict2024(startingid,raworigin,problems,editor,indexed): #将来自GenerateProblemListFromString的列表中的题目添加到thedict字典, 返回题号列表(包括用老题号替代的题目)
mydb = connect(hostname = "wwylss.synology.me", port = "13306", username="root", pwd="Wwy@0018705", db = "tikutest")
@ -477,23 +478,18 @@ def CreateIDLinks(old_id_list,new_id_list): #建立已有id和新id之间的联
return id_links # 返回id联系, 每个元组表示一对id, 前者是旧id, 后者是新id
def CreateRelatedProblems(links,thedict,filepath,editor): # 根据links关联生成待编辑的新题目字典, 等待编辑修改
try:
new_dict = {}
for item in links:
old_id,new_id = item
new_dict[old_id] = thedict[old_id].copy()
new_dict[old_id]["id"] = new_id + "待替换"
new_dict[old_id]["content"] = new_dict[old_id]["content"]
new_dict[old_id]["usages"] = []
new_dict[old_id]["same"] = []
new_dict[old_id]["unrelated"] = []
new_dict[old_id]["edit"] = new_dict[old_id]["edit"].copy() + [GetDate()+"\t"+editor]
new_dict[old_id]["origin"] = {"来源": "改编题目", "前序": old_id}
save_dict(new_dict,filepath)
except:
return 1 #异常返回1
return 0 #正常返回0
def CreateRelatedProblems(links): # 根据links关联生成待编辑的新题目字典, 等待编辑修改
output = "\\begin{enumerate}\n"
mydb = connect(hostname = "wwylss.synology.me", port = "13306", username="root", pwd="Wwy@0018705", db = "tikutest")
mycursor = mydb.cursor()
sql = "SELECT content FROM problems WHERE ID = %s;"
for id,rid in links:
val = (id,)
mycursor.execute(sql,val)
ret = mycursor.fetchone()[0]
output += f"\\item ({id}->{rid}) {ret}\n\n"
output = f"{output}\n\\end{{enumerate}}\n"
return output #正常返回0
def ImportRelatedProblems(new_json,main_json): # 导入编辑过的关联题目json文件到主数据库
pro_dict = load_dict(main_json)
@ -1000,11 +996,11 @@ def StudentsGetAfterContent(id,prodict,answered,spaceflag): #生成学生版讲
string += "\\vspace*{%s}\n\n"%prodict[id]["space"]
return string #生成学生讲义后的答案及空格
def XeLaTeXCompile(filedir,filename): #在filedir目录中用XeLaTeX编译filename文件两次能编译出正确的引用和页码
def XeLaTeXCompile(filedir,filename,times = 2): #在filedir目录中用XeLaTeX编译filename文件两次能编译出正确的引用和页码
flagsuc = True
for i in range(2):
for i in range(times):
if os.system("xelatex -interaction=batchmode -output-directory=%s %s"%(filedir,filename)) == 0:
print("%d次编译成功."%(i+1))
print(f"{i+1} 次编译 {filename} 成功.")
else:
flagsuc = False
return flagsuc # 若第二次编译成功则返回True, 否则返回False

View File

@ -17,35 +17,29 @@ class MyWindow(QWidget,Ui_Form):
editor = self.lineEdit_editor.text().strip() # 修改人姓名
new_ids = NextSpareIDBlock(starting_id)
links = CreateIDLinks(generate_number_set(old_ids),generate_number_set(new_ids))
print(old_ids,new_ids,editor)
bodydata = CreateRelatedProblems(links)
tempfilepath = "临时文件/problem_edit.tex"
latextemplate = "模板文件/题目编辑.txt"
latexdata = ReadTextFile(latextemplate)
latexdata = StringSubstitute("<<待替换>>",latexdata,(bodydata,))
SaveTextFile(latexdata,tempfilepath)
print("编辑完毕后, 保存关闭文件继续.")
os.system(f"code -w -g {tempfilepath}") #-w表示关闭窗口后继续下一步
if XeLaTeXCompile("临时文件",tempfilepath,times=1):
problems = GenerateProblemListFromString2024(ReadTextFile(tempfilepath))
for problem in problems:
id_and_content = problem[0]
oid = re.findall(r"^\((\d{6})->",id_and_content)[0]
id = re.findall(r"^\(\d{6}->(\d{6})\)",id_and_content)[0]
content = re.findall(r"->\d{6}\)([\S\s]*)$",id_and_content)[0].strip()
print(id,content)
AddRelatedProblemToDB(id,content,oid,editor)
print("编译成功, 已汇入题库")
else:
print("编译失败, 未汇入题库")
# tempfilepath = "临时文件/problem_edit.json"
# pro_dict = load_dict("../题库0.3/Problems.json")
# obj_dict = load_dict("../题库0.3/LessonObj.json")
# pro_dict_raw_string = ReadTextFile("../题库0.3/Problems.json")
# configjson = BuildFullScheme
CreateRelatedProblems(links,pro_dict,tempfilepath,editor)
# print("编辑完毕后, 保存关闭文件继续.")
# os.system("code -w -g "+tempfilepath) #-w表示关闭窗口后继续下一步
# editedid_list = ImportRelatedProblems(tempfilepath,"../题库0.3/Problems.json")
# pro_dict = load_dict("../题库0.3/Problems.json")
# if not XeLaTeXTest(editedid_list,pro_dict,obj_dict,configjson,templatepath="模板文件/讲义模板.txt",outdir = "临时文件",outfile = "problems_test.tex"):
# SaveTextFile(pro_dict_raw_string,"../题库0.3/Problems.json")
# print("编译失败, 题库文件退回原状")
# else:
# print("编译成功, 已汇入题库")
# self.close()