diff options
| author | crupest <crupest@outlook.com> | 2020-10-25 01:08:34 +0800 | 
|---|---|---|
| committer | crupest <crupest@outlook.com> | 2020-10-25 01:08:34 +0800 | 
| commit | 277d60c91ced882e445c05a37be13e4af9f5d692 (patch) | |
| tree | 128a10e390a5a2cdc878d894bd3313768493d3dc /works | |
| parent | a8e4766c95e86ff2c48f0d17bf5060eccd70b249 (diff) | |
| download | crupest-277d60c91ced882e445c05a37be13e4af9f5d692.tar.gz crupest-277d60c91ced882e445c05a37be13e4af9f5d692.tar.bz2 crupest-277d60c91ced882e445c05a37be13e4af9f5d692.zip | |
import(life): (question-pptx) Makes parsing regex more "general", add problem id, and add a script to generate 10 pptx.
Diffstat (limited to 'works')
| -rw-r--r-- | works/life/question-pptx/.gitignore | 4 | ||||
| -rw-r--r-- | works/life/question-pptx/gen.ps1 | 4 | ||||
| -rw-r--r-- | works/life/question-pptx/main.py | 49 | 
3 files changed, 46 insertions, 11 deletions
| diff --git a/works/life/question-pptx/.gitignore b/works/life/question-pptx/.gitignore index 365e45e..1400b46 100644 --- a/works/life/question-pptx/.gitignore +++ b/works/life/question-pptx/.gitignore @@ -1 +1,5 @@  test.pptx
 +real-choose.txt
 +real-judge.txt
 +*.pptx
 +question-pptx.zip
 diff --git a/works/life/question-pptx/gen.ps1 b/works/life/question-pptx/gen.ps1 new file mode 100644 index 0000000..e7903c9 --- /dev/null +++ b/works/life/question-pptx/gen.ps1 @@ -0,0 +1,4 @@ +foreach ($i in 1..10) {
 +    py ./main.py
 +    mv test.pptx "$i.pptx"
 +}
 diff --git a/works/life/question-pptx/main.py b/works/life/question-pptx/main.py index b854060..6c4e9bb 100644 --- a/works/life/question-pptx/main.py +++ b/works/life/question-pptx/main.py @@ -6,38 +6,56 @@ from typing import Iterable  # Chinese colon and English colon is different but both should be supported with love!
  choice_question_regex = re.compile(
 -    r'(?P<problem_1>\S*?)[\((](?P<answer>[a-dA-D])[\))](?P<problem_2>\S*?)\s*[aA]\s+(?P<choice_a>\S+?)\s+[bB]\s*(?P<choice_b>\S+?)\s+[cC]\s*(?P<choice_c>\S+?)\s+[dD]\s*(?P<choice_d>\S+?)\s+', re.MULTILINE)
 +    r'(?P<problem_id>\d+)\s*[\.、.]?\s*(?P<problem_1>.*?)[\((]\s*(?P<answer>[a-eA-E])\s*[\))](?P<problem_2>.*?)\s*[aA]\s*[\.、.]?\s*(?P<choice_a>\S+?)\s*[bB]\s*[\.、.]?\s*(?P<choice_b>\S+?)\s*[cC]\s*[\.、.]?\s*(?P<choice_c>\S+?)\s+([dD]\s*[\.、.]?\s*(?P<choice_d>\S+?)\s+)?([eE]\s*[\.、.]?\s*(?P<choice_e>\S+?)\s+)?', re.MULTILINE)
 -choice_text = open('./choose.txt', 'r', encoding='utf-8').read()
 +choice_text = open('./real-choose.txt', 'r', encoding='utf-8').read()
  questions = []
  for match in choice_question_regex.finditer(choice_text):
 -    questions.append({
 +    q = {
 +        'id': int(match.group('problem_id')),
          'type': 'c',
          'problem': match.group('problem_1') + "( )" + match.group('problem_2'),
          'answer': match.group('answer').lower(),
          'choices': {
              'a': match.group('choice_a'),
              'b': match.group('choice_b'),
 -            'c': match.group('choice_c'),
 -            'd': match.group('choice_d')
 +            'c': match.group('choice_c')
          }
 -    })
 +    }
 +
 +    if match.group('choice_d') != None:
 +        q['choices']['d'] = match.group('choice_d')
 +
 +    if match.group('choice_e') != None:
 +        q['choices']['e'] = match.group('choice_e')
 +
 +    questions.append(q)
 +
 +print(len(questions))
  judge_question_regex = re.compile(
 -    r'(?P<problem>\S+?)\s*[\((](?P<answer>[a-bA-B])[\))]', re.MULTILINE)
 +    r'(?P<problem_id>\d+)\s*[\.、.]?\s*(?P<problem>.+)\s*[\((]\s*(?P<answer>[✓√×xX])\s*[\))]', re.MULTILINE)
 -judge_text = open('./judge.txt', 'r', encoding='utf-8').read()
 +judge_text = open('./real-judge.txt', 'r', encoding='utf-8').read()
  for match in judge_question_regex.finditer(judge_text):
      questions.append({
 +        'id': int(match.group('problem_id')),
          'type': 'j',
          'problem': match.group('problem'),
 -        'answer': match.group('answer').lower()
 +        'answer': '×' if match.group('answer') in '×xX' else '✓'
      })
 +print(len(questions))
 +
 +id_list = [q['id'] for q in questions]
 +id_list.sort()
 +for i in range(606):
 +    if not i in id_list:
 +        print(i)
  random.shuffle(questions)
 @@ -52,16 +70,19 @@ for question in questions:      title = slide.shapes.add_textbox(Pt(20), Pt(40), Pt(680), Pt(50))
      problem = slide.shapes.add_textbox(Pt(20), Pt(120), Pt(680), Pt(350))
      answer = slide.shapes.add_textbox(Pt(560), Pt(450), Pt(40), Pt(40))
 +    id = slide.shapes.add_textbox(Pt(20), Pt(480), Pt(80), Pt(40))
      if question['type'] == 'c':
          title.text = '选择题'
          problem.text = question['problem'] + '\n' + '\n'.join(
 -            [choice.upper() + '. ' + question['choices'][choice]for choice in 'abcd'])
 +            [choice.upper() + '. ' + question['choices'][choice]for choice in question['choices'].keys()])
          answer.text = question['answer'].upper()
      else:
          title.text = '判断题'
          problem.text = question['problem']
 -        answer.text = '√' if question['answer'] == 'a' else '×'
 +        answer.text = question['answer']
 +
 +    id.text = str(question['id'])
      title_text_frame: pptx.text.text.TextFrame = title.text_frame
      para: pptx.text.text._Paragraph
 @@ -83,6 +104,12 @@ for question in questions:          para.font.size = Pt(40)
          para.font.color.rgb = pptx.dml.color.RGBColor(255, 0, 0)
 +    id_text_frame: pptx.text.text.TextFrame = id.text_frame
 +    para: pptx.text.text._Paragraph
 +    for para in id_text_frame.paragraphs:
 +        para.font.size = Pt(20)
 +        para.font.color.rgb = pptx.dml.color.RGBColor(128, 128, 128)
 +
      buttons.append(slide.shapes.add_shape(pptx.enum.shapes.MSO_SHAPE.OVAL, Pt(
          660), Pt(460), Pt(40), Pt(40)))
 | 
