From 9da5420a350e490e87ec65f8321619aa07496227 Mon Sep 17 00:00:00 2001 From: dragdra Date: Thu, 6 Nov 2025 17:40:57 +0900 Subject: [PATCH] =?UTF-8?q?2510=ED=9A=8C=20=EC=B1=84=EC=A0=90=EC=9E=90?= =?UTF-8?q?=EB=A3=8C=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20/=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EB=B8=94=EB=9F=AD=20?= =?UTF-8?q?=EC=88=9C=EC=84=9C=20=EC=9E=AC=EC=A0=95=EB=A0=AC=20=EB=B0=A9?= =?UTF-8?q?=EC=8B=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 01_copyFiles.py | 4 +- 02_extract_project_json.py | 3 +- 251002_2509_CAT_3_A_채점결과.xlsx | Bin 0 -> 18059 bytes 251030_2510_CAS_2_A_채점결과.xlsx | Bin 0 -> 5456 bytes 251031_2510_CAS_2_A_채점결과.xlsx | Bin 0 -> 5453 bytes 251103_2510_CAS_2_A_채점결과.xlsx | Bin 0 -> 5434 bytes 251104_2510_CAS_2_A_채점결과.xlsx | Bin 0 -> 72854 bytes 251105_2510_CAS_2_A_TEST.xlsx | Bin 0 -> 5482 bytes 251105_2510_CAS_2_A_채점결과.xlsx | Bin 0 -> 74965 bytes correct/2510_CAS_2_A.json | 1008 +++++++++++++++++++++++++++++ logs/cat.log | 223 +++++++ main.py | 195 ++++-- 12 files changed, 1383 insertions(+), 50 deletions(-) create mode 100644 251002_2509_CAT_3_A_채점결과.xlsx create mode 100644 251030_2510_CAS_2_A_채점결과.xlsx create mode 100644 251031_2510_CAS_2_A_채점결과.xlsx create mode 100644 251103_2510_CAS_2_A_채점결과.xlsx create mode 100644 251104_2510_CAS_2_A_채점결과.xlsx create mode 100644 251105_2510_CAS_2_A_TEST.xlsx create mode 100644 251105_2510_CAS_2_A_채점결과.xlsx create mode 100644 correct/2510_CAS_2_A.json diff --git a/01_copyFiles.py b/01_copyFiles.py index 5cfff00..f5e2892 100644 --- a/01_copyFiles.py +++ b/01_copyFiles.py @@ -47,8 +47,8 @@ def copy_ent_files(source_root, target_root): # 사용법 -source_directory = r"D:\project\Entry\Entry-Scoring\시험자료\2509\A" # 원본 디렉토리 경로 -target_directory = r".\ent\2509_CAT_3_A" +source_directory = r"D:\project\data\CAS_제2510회 정기\제2510회 코딩활용능력 2급 정기 답안파일" # 원본 디렉토리 경로 +target_directory = r".\ent\2510_CAS_2_A" # target_directory_a = r"./output/A" # '1교시'의 타겟 경로 # target_directory_b = r"./output/B" # '2교시'의 타겟 경로 # target_directory_c = r"./output/C" # '3교시'의 타겟 경로 diff --git a/02_extract_project_json.py b/02_extract_project_json.py index 201daef..5b78f66 100644 --- a/02_extract_project_json.py +++ b/02_extract_project_json.py @@ -50,8 +50,9 @@ def process_ent_files(ent_dir, output_dir): # 실행 예 if __name__ == "__main__": - test_names = ["2509_CAT_3_A"] + # test_names = ["2509_CAT_3_A"] # test_names = ["2508_CAS_2_A","2508_CAS_2_B"] + test_names = ["2510_CAS_2_A"] for test_name in test_names: ent_dir = f".\\ent\\{test_name}" output_dir = f".\\output\\{test_name}" diff --git a/251002_2509_CAT_3_A_채점결과.xlsx b/251002_2509_CAT_3_A_채점결과.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8d782af834aac3b436fc4bea51aa6181c0362f6b GIT binary patch literal 18059 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 literal 0 HcmV?d00001 diff --git a/251030_2510_CAS_2_A_채점결과.xlsx b/251030_2510_CAS_2_A_채점결과.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..90172849d46bd68fd9f61ccb40789cb41621b646 GIT binary patch literal 5456 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 literal 0 HcmV?d00001 diff --git a/251031_2510_CAS_2_A_채점결과.xlsx b/251031_2510_CAS_2_A_채점결과.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ffea7a39b8c5a876d1fcbb5a476b3b79c3b1b66b GIT binary patch literal 5453 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 G2>1`Y@ZU=S literal 0 HcmV?d00001 diff --git a/251105_2510_CAS_2_A_채점결과.xlsx b/251105_2510_CAS_2_A_채점결과.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c22c57b3916bbb89b43ca378ede1077a914656ba GIT binary patch literal 74965 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 LBKQ>n2qymrx?D@6 literal 0 HcmV?d00001 diff --git a/correct/2510_CAS_2_A.json b/correct/2510_CAS_2_A.json new file mode 100644 index 0000000..0107be5 --- /dev/null +++ b/correct/2510_CAS_2_A.json @@ -0,0 +1,1008 @@ +{ + "1-1": { + "type": "scene", + "ele": "$..objects[?(@.name=='별이 빛나는 숲')]", + "point": 1.5, + "desc": "문제 1/장면 1/[배경] 이름 설정 1/이름 변경 없음", + "sort": 11 + }, + "1-2": { + "type": "scene", + "ele": "$..objects[?(@.name=='우주')]", + "point": 1.7, + "desc": "문제 1/장면 2/[배경] 이름 설정 2/이름을 '우주'로 변경하기", + "sort": 12 + }, + "1-3": { + "type": "scene", + "ele": "$..objects[?(@.name=='번개')]", + "point": 1.7, + "desc": "문제 1/번개(1)/[개체] 이름 설정 1/이름을 '번개'로 변경하기", + "sort": 13 + }, + "1-4": { + "type": "scene", + "ele": "$..objects[?(@.name=='별')]", + "point": 1.7, + "desc": "문제 1/큰별(빨강)/[개체] 이름 설정 2/이름을 '별'로 변경하기", + "sort": 14 + }, + "1-5": { + "type": "scene", + "ele": "$..objects[?(@.name=='공')]", + "point": 1.7, + "desc": "문제 1/신호/[개체] 이름 설정 3/이름을 '공'으로 변경하기", + "sort": 15 + }, + "1-6": { + "type": "scene", + "ele": "$..objects[?(@.name=='막대')]", + "point": 1.7, + "desc": "문제 1/진행 상태 바/[개체] 이름 설정 4/이름을 '막대'로 변경하기", + "sort": 16 + }, + "1-0": { + "ele": "$.messages[?(@.name=='게임시작')]", + "point": 0.95, + "desc": "문제 2/번개/신호/'게임시작' 신호 만들기", + "type": "scene", + "sort": 101 + }, + "2-0": { + "ele": "$.messages[?(@.name=='미션성공')]", + "point": 0.95, + "desc": "문제 2/번개/신호/'미션성공' 신호 만들기", + "type": "scene", + "sort": 102 + }, + "3-0": { + "ele": "$.variables[?(@.name=='점수')]", + "point": 0.95, + "desc": "문제 2/번개/변수/'점수' 변수 만들기", + "type": "scene", + "sort": 102 + }, + "4-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'번개')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "point": 0.95, + "desc": "문제 2/번개/시작/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[0][1].type", + "$[0][1].params[0].params[0]" + ], + "answer": [ + "set_scale_size", + 30 + ], + "point": 0.95, + "desc": "문제 2/번개/[시작]의 세부 동작 1/크기를 '30' 으로 정하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0].params[0]", + "$[0][2].params[1].params[0]" + ], + "answer": [ + "locate_xy", + "-205", + 105 + ], + "point": 0.95, + "desc": "문제 2/번개/[시작]의 세부 동작 2/x: '-205' y: '105' 위치로 이동하기", + "type": "list" + }, + { + "ele": "$[0][3].type", + "answer": "hide", + "point": 0.95, + "desc": "문제 2/번개/[시작]의 세부 동작 3/모양 숨기기" + }, + { + "ele": "$[1][0].type", + "answer": "when_message_cast", + "point": 0.95, + "desc": "문제 2/번개/신호/'게임시작' 신호를 받았을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "point": 0.95, + "desc": "문제 2/번개/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].type", + "$[1][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "repeat_basic", + 3 + ], + "point": 0.95, + "desc": "문제 2/번개/반복/'3' 번 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].statements[0][0].type", + "$[1][1].statements[0][0].statements[0][0].params[0]" + ], + "answer": [ + "create_clone", + "self" + ], + "point": 0.95, + "desc": "문제 2/번개/[반복]의 세부 동작 1/'자신' 의 복제본 만들기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][1].type", + "$[1][1].statements[0][1].params[0].params[0]" + ], + "answer": [ + "wait_second", + 3 + ], + "point": 0.95, + "desc": "문제 2/번개/반복/'3' 초 기다리기", + "type": "list" + }, + { + "ele": "$[2][0].type", + "answer": "when_clone_start", + "point": 0.95, + "desc": "문제 2/번개/복제본/복제본이 처음 생성되었을 때" + }, + { + "ele": [ + "$[2][1].type", + "$[2][1].params[0].params[1].params[0]", + "$[2][1].params[0].params[3].params[0]", + "$[2][1].params[1].params[0]" + ], + "answer": [ + "locate_xy", + "-220", + 220, + 150 + ], + "point": 0.95, + "desc": "문제 2/번개/[복제본]의 세부 동작1/x: '-220 부터 220 사이의 무작위 수' y: '150' 위치로 이동하기", + "type": "list" + }, + { + "ele": "$[2][2].type", + "answer": "show", + "point": 0.95, + "desc": "문제 2/번개/[복제본]의 세부 동작2/모양 보이기" + }, + { + "ele": [ + "$[2][3].type", + "$[2][3].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "point": 0.95, + "desc": "문제 2/번개/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[2][3].statements[0][0].type", + "$[2][3].statements[0][0].params[0].params[1].params[0]", + "$[2][3].statements[0][0].params[0].params[3].params[0]" + ], + "answer": [ + "move_y", + "-1", + "-2" + ], + "point": 0.95, + "desc": "문제 2/번개/[반복]의 세부 동작 1/y 좌표를 '-1 부터 -2 사이의 무작위 수' 만큼 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[2][3].statements[0][1].type", + "$[2][3].statements[0][1].params[0].type" + ], + "answer": [ + "_if", + "reach_something" + ], + "point": 0.95, + "desc": "문제 2/번개/만일/만일 '공' 에 닿았는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[2][3].statements[0][1].statements[0][0].type", + "$[2][3].statements[0][1].statements[0][0].params[1].params[0]" + ], + "answer": [ + "change_variable", + "-2" + ], + "point": 0.95, + "desc": "문제 2/번개/[만일]의 세부 동작 1/'점수' 에 '-2' 만큼 더하기", + "type": "list" + }, + { + "ele": [ + "$[2][3].statements[0][1].statements[0][1].type", + "$[2][3].statements[0][1].statements[0][1].params[0].params[0]" + ], + "answer": [ + "wait_second", + 0.1 + ], + "point": 0.95, + "desc": "문제 2/번개/[만일]의 세부 동작 2/'0.1' 초 기다리기", + "type": "list" + }, + { + "ele": "$[2][3].statements[0][1].statements[0][2].type", + "answer": "delete_clone", + "point": 0.95, + "desc": "문제 2/번개/[만일]의 세부 동작 3/이 복제본 삭제하기" + }, + { + "ele": "$[3][0].type", + "answer": "when_message_cast", + "point": 0.95, + "desc": "문제 2/번개/신호/'미션성공' 신호를 받았을 때" + }, + { + "ele": [ + "$[3][1].type", + "$[3][1].params[0]" + ], + "answer": [ + "stop_object", + "otherThread" + ], + "point": 0.95, + "desc": "문제 2/번개/[신호]의 세부 동작 1/'자신의 다른' 코드 멈추기", + "type": "list" + } + ], + "sort": 106 + }, + "5-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'별')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "point": 0.95, + "desc": "문제 2/별/시작/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[0][1].type", + "$[0][1].params[0].params[0]" + ], + "answer": [ + "set_scale_size", + "10" + ], + "point": 0.95, + "desc": "문제 2/별/[시작]의 세부 동작 1/크기를 '10' 으로 정하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0].params[0]", + "$[0][2].params[1].params[0]" + ], + "answer": [ + "locate_xy", + "-205", + "105" + ], + "point": 0.95, + "desc": "문제 2/별/[시작]의 세부 동작 2/x: '-205' y: '105' 위치로 이동하기", + "type": "list" + }, + { + "ele": "$[0][3].type", + "answer": "hide", + "point": 0.95, + "desc": "문제 2/별/[시작]의 세부 동작 3/모양 숨기기" + }, + { + "ele": "$[1][0].type", + "answer": "when_message_cast", + "point": 0.95, + "desc": "문제 2/별/신호/'게임시작' 신호를 받았을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "point": 0.95, + "desc": "문제 2/별/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].type", + "$[1][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "repeat_basic", + "3" + ], + "point": 0.95, + "desc": "문제 2/별/반복/'3' 번 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].statements[0][0].type", + "$[1][1].statements[0][0].statements[0][0].params[0]" + ], + "answer": [ + "create_clone", + "self" + ], + "point": 0.95, + "desc": "문제 2/별/[반복]의 세부 동작 1/'자신' 의 복제본 만들기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][1].type", + "$[1][1].statements[0][1].params[0].params[0]" + ], + "answer": [ + "wait_second", + "3" + ], + "point": 0.95, + "desc": "문제 2/별/반복/'3' 초 기다리기", + "type": "list" + }, + { + "ele": "$[2][0].type", + "answer": "when_clone_start", + "point": 0.95, + "desc": "문제 2/별/복제본/복제본이 처음 생성되었을 때" + }, + { + "ele": [ + "$[2][1].type", + "$[2][1].params[0].params[1].params[0]", + "$[2][1].params[0].params[3].params[0]" + ], + "answer": [ + "set_scale_size", + "10", + "40" + ], + "point": 0.95, + "desc": "문제 2/별/[복제본]의 세부 동작1/크기를 '10 부터 40 사이의 무작위 수' 로 정하기 ", + "type": "list" + }, + { + "ele": [ + "$[2][2].type", + "$[2][2].params[0].params[1].params[0]", + "$[2][2].params[0].params[3].params[0]", + "$[2][2].params[1].params[0]" + ], + "answer": [ + "locate_xy", + "-220", + "220", + "150" + ], + "point": 0.95, + "desc": "문제 2/별/[복제본]의 세부 동작2/x: '-220부터 220 사이의 무작위 수' y: '150' 위치로 이동하기", + "type": "list" + }, + { + "ele": "$[2][3].type", + "answer": "show", + "point": 0.95, + "desc": "문제 2/별/[복제본]의 세부 동작3/모양 보이기" + }, + { + "ele": [ + "$[2][4].type", + "$[2][4].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "point": 0.95, + "desc": "문제 2/별/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[2][4].statements[0][0].type", + "$[2][4].statements[0][0].params[0].params[1].params[0]", + "$[2][4].statements[0][0].params[0].params[3].params[0]" + ], + "answer": [ + "move_y", + "-1", + "-2" + ], + "point": 0.95, + "desc": "문제 2/별/[반복]의 세부 동작 1/y 좌표를 '-1 부터 -2 사이의 무작위 수' 만큼 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[2][4].statements[0][1].type", + "$[2][4].statements[0][1].params[0].type" + ], + "answer": [ + "_if", + "reach_something" + ], + "point": 0.95, + "desc": "문제 2/별/만일/만일 '공' 에 닿았는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[2][4].statements[0][1].statements[0][0].type", + "$[2][4].statements[0][1].statements[0][0].params[1].params[0]" + ], + "answer": [ + "change_variable", + "2" + ], + "point": 0.95, + "desc": "문제 2/별/[만일]의 세부 동작 1/'점수' 에 '2' 만큼 더하기", + "type": "list" + }, + { + "ele": [ + "$[2][4].statements[0][1].statements[0][1].type", + "$[2][4].statements[0][1].statements[0][1].params[0].params[0]" + ], + "answer": [ + "wait_second", + "0.1" + ], + "point": 0.95, + "desc": "문제 2/별/[만일]의 세부 동작 2/'0.1' 초 기다리기", + "type": "list" + }, + { + "ele": "$[2][4].statements[0][1].statements[0][2].type", + "answer": "delete_clone", + "point": 0.95, + "desc": "문제 2/별/[만일]의 세부 동작 3/이 복제본 삭제하기" + }, + { + "ele": [ + "$[2][4].statements[0][2].type", + "$[2][4].statements[0][2].params[0].type", + "$[2][4].statements[0][2].params[0].params[0].type", + "$[2][4].statements[0][2].params[0].params[1]", + "$[2][4].statements[0][2].params[0].params[2].params[0]" + ], + "answer": [ + "_if", + "boolean_basic_operator", + "get_variable", + "GREATER_OR_EQUAL", + "10" + ], + "point": 0.95, + "desc": "문제 2/별/만일/만일 '점수' 값 ≥ '10' 이라면", + "type": "list" + }, + { + "ele": "$[2][4].statements[0][2].statements[0][0].type", + "answer": "message_cast", + "point": 0.95, + "desc": "문제 2/별/신호/'미션성공' 신호 보내기" + }, + { + "ele": "$[3][0].type", + "answer": "when_message_cast", + "point": 0.95, + "desc": "문제 2/별/신호/'미션성공' 신호를 받았을 때" + }, + { + "ele": [ + "$[3][1].type", + "$[3][1].params[0]" + ], + "answer": [ + "stop_object", + "otherThread" + ], + "point": 0.95, + "desc": "문제 2/별/[신호]의 세부 동작 1/'자신의 다른' 코드 멈추기", + "type": "list" + } + ], + "sort": 125 + }, + "6-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'공|신')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "point": 0.95, + "desc": "문제 2/공/시작/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[0][1].type", + "$[0][1].params[0].params[0]" + ], + "answer": [ + "set_scale_size", + "15" + ], + "point": 0.95, + "desc": "문제 2/공/[시작]의 세부 동작 1/크기를 '15' 로 정하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0].params[0]", + "$[0][2].params[1].params[0]" + ], + "answer": [ + "locate_xy", + "0", + "0" + ], + "point": 0.95, + "desc": "문제 2/공/[시작]의 세부 동작 2/x: '0' y: '0' 위치로 이동하기", + "type": "list" + }, + { + "ele": "$[0][3].type", + "answer": "hide", + "point": 0.95, + "desc": "문제 2/공/[시작]의 세부 동작 3/모양 숨기기" + }, + { + "ele": "$[1][0].type", + "answer": "when_message_cast", + "point": 0.95, + "desc": "문제 2/공/신호/'게임시작' 신호를 받았을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "point": 0.95, + "desc": "문제 2/공/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].type", + "$[1][1].statements[0][0].params[0].type", + "$[1][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "32" + ], + "point": 0.95, + "desc": "문제 2/공/만일/만일 '스페이스' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].statements[0][0].type", + "$[1][1].statements[0][0].statements[0][0].params[0]" + ], + "answer": [ + "create_clone", + "self" + ], + "point": 0.95, + "desc": "문제 2/공/[만일]의 세부 동작 1/'자신' 의 복제본 만들기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].statements[0][1].type", + "$[1][1].statements[0][0].statements[0][1].params[0]", + "$[1][1].statements[0][0].statements[0][1].params[1].params[0]" + ], + "answer": [ + "add_effect_amount", + "color", + "10" + ], + "point": 0.95, + "desc": "문제 2/공/[만일]의 세부 동작 2/'색깔' 효과를 '10' 만큼 주기", + "type": "list" + }, + { + "ele": [ + "$[1][1].statements[0][0].statements[0][2].type", + "$[1][1].statements[0][0].statements[0][2].params[0].params[0]" + ], + "answer": [ + "wait_second", + "0.1" + ], + "point": 0.95, + "desc": "문제 2/공/[만일]의 세부 동작 3/'0.1' 초 기다리기", + "type": "list" + }, + { + "ele": "$[2][0].type", + "answer": "when_clone_start", + "point": 0.95, + "desc": "문제 2/공/복제본/복제본이 처음 생성되었을 때" + }, + { + "ele": "$[2][1].type", + "answer": "locate", + "point": 0.95, + "desc": "문제 2/공/[복제본]의 세부 동작1/'막대' 위치로 이동하기" + }, + { + "ele": "$[2][2].type", + "answer": "show", + "point": 0.95, + "desc": "문제 2/공/[복제본]의 세부 동작2/모양 보이기" + }, + { + "ele": [ + "$[2][3].type", + "$[2][3].params[0].params[0].params[3]", + "$[2][3].params[0].params[1]", + "$[2][3].params[0].params[2].params[0]" + ], + "answer": [ + "repeat_while_true", + null, + "wall_up", + null + ], + "point": 0.95, + "desc": "문제 2/공/반복/'위쪽 벽' 에 닿았는가? '이 될 때까지' 반복하기", + "type": "list" + }, + { + "ele": [ + "$[2][3].statements[0][0].type", + "$[2][3].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_y", + 10 + ], + "point": 0.95, + "desc": "문제 2/공/[반복]의 세부 동작 1/y 좌표를 '10' 만큼 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[2][3].statements[0][1].type", + "$[2][3].statements[0][1].params[0].type" + ], + "answer": [ + "_if", + "reach_something" + ], + "point": 0.95, + "desc": "문제 2/공/만일/만일 '별' 에 닿았는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[2][3].statements[0][1].statements[0][0].type", + "$[2][3].statements[0][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "wait_second", + "0.1" + ], + "point": 0.95, + "desc": "문제 2/공/[만일]의 세부 동작 1/'0.1' 초 기다리기", + "type": "list" + }, + { + "ele": "$[2][3].statements[0][1].statements[0][1].type", + "answer": "delete_clone", + "point": 0.95, + "desc": "문제 2/공/[만일]의 세부 동작 2/이 복제본 삭제하기" + }, + { + "ele": "$[2][4].type", + "answer": "delete_clone", + "point": 0.95, + "desc": "문제 2/공/복제본/이 복제본 삭제하기" + }, + { + "ele": "$[3][0].type", + "answer": "when_message_cast", + "point": 0.95, + "desc": "문제 2/공/신호/'미션성공' 신호를 받았을 때" + }, + { + "ele": [ + "$[3][1].type", + "$[3][1].params[0]" + ], + "answer": [ + "stop_object", + "otherThread" + ], + "point": 0.95, + "desc": "문제 2/공/[신호]의 세부 동작/'자신의 다른' 코드 멈추기", + "type": "list" + } + ], + "sort": 148 + }, + "7-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'막대|진행 상태 ')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "point": 0.95, + "desc": "문제 2/막대/시작/시작하기 버튼을 클릭했을 때" + }, + { + "ele": [ + "$[0][1].type", + "$[0][1].params[0].params[0]" + ], + "answer": [ + "set_scale_size", + "60" + ], + "point": 0.95, + "desc": "문제 2/막대/[시작]의 세부 동작 1/크기를 'h60' 으로 정하기", + "type": "list" + }, + { + "ele": [ + "$[0][2].type", + "$[0][2].params[0].params[0]", + "$[0][2].params[1].params[0]" + ], + "answer": [ + "locate_xy", + "0", + "-110" + ], + "point": 0.95, + "desc": "문제 2/막대/[시작]의 세부 동작 2/x: '0' y: '-110' 위치로 이동하기", + "type": "list" + }, + { + "ele": "$[0][3].type", + "answer": "message_cast", + "point": 0.95, + "desc": "문제 2/막대/신호/'게임시작' 신호 보내기" + }, + { + "ele": "$[1][0].type", + "answer": "when_message_cast", + "point": 0.95, + "desc": "문제 2/막대/신호/'게임시작' 신호를 받았을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0].params[0]" + ], + "answer": [ + "wait_second", + "0.3" + ], + "point": 0.95, + "desc": "문제 2/막대/[신호]의 세부 동작 1/'0.3' 초 기다리기", + "type": "list" + }, + { + "ele": [ + "$[1][2].type", + "$[1][2].params[0]" + ], + "answer": [ + "repeat_inf", + null + ], + "point": 0.95, + "desc": "문제 2/막대/반복/계속 반복하기", + "type": "list" + }, + { + "ele": [ + "$[1][2].statements[0][0].type", + "$[1][2].statements[0][0].params[0].type", + "$[1][2].statements[0][0].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "37" + ], + "point": 0.95, + "desc": "문제 2/막대/만일/만일 '왼쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[1][2].statements[0][0].statements[0][0].type", + "$[1][2].statements[0][0].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_x", + "-10" + ], + "point": 0.95, + "desc": "문제 2/막대/[만일]의 세부 동작 1/x 좌표를 '-10' 만큼 바꾸기", + "type": "list" + }, + { + "ele": [ + "$[1][2].statements[0][1].type", + "$[1][2].statements[0][1].params[0].type", + "$[1][2].statements[0][1].params[0].params[0]" + ], + "answer": [ + "_if", + "is_press_some_key", + "39" + ], + "point": 0.95, + "desc": "문제 2/막대/만일/만일 '오른쪽 화살표' 키가 눌러져 있는가? 라면", + "type": "list" + }, + { + "ele": [ + "$[1][2].statements[0][1].statements[0][0].type", + "$[1][2].statements[0][1].statements[0][0].params[0].params[0]" + ], + "answer": [ + "move_x", + "10" + ], + "point": 0.95, + "desc": "문제 2/막대/[만일2]의 세부 동작 1/x 좌표를 '10' 만큼 바꾸기", + "type": "list" + }, + { + "ele": "$[2][0].type", + "answer": "when_message_cast", + "point": 0.95, + "desc": "문제 2/막대/신호/'미션성공' 신호를 받았을 때" + }, + { + "ele": [ + "$[2][1].type", + "$[2][1].params[0]" + ], + "answer": [ + "stop_object", + "otherThread" + ], + "point": 0.95, + "desc": "문제 2/막대/[신호]의 세부 동작 1/'자신의 다른' 코드 멈추기", + "type": "list" + }, + { + "ele": "$[2][2].params[*].params", + "answer": [ + "미션성공!", + "2" + ], + "point": 0.95, + "desc": "문제 2/막대/[신호]의 세부 동작 1/'미션성공!' 을 '2' 초 동안 '말하기'" + }, + { + "ele": "$[2][3].type", + "answer": "start_neighbor_scene", + "point": 0.95, + "desc": "문제 2/막대/[신호]의 세부 동작 1/'다음' 장면 시작하기" + } + ], + "sort": 168 + }, + "8-0": { + "type": "script", + "ele": "$.objects[?(@.name=~'우주|장면 ')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_scene_start", + "point": 0.95, + "desc": "문제 2/우주/장면 2/장면이 시작되었을 때" + }, + { + "ele": "$[0][1].type", + "answer": "hide_variable", + "point": 0.95, + "desc": "문제 2/우주/[장면 2]의 세부 동작 1/변수 '점수' 숨기기" + }, + { + "ele": "$[1][0].type", + "answer": "when_object_click", + "point": 2.5, + "desc": "문제 3/우주/오브젝트/오브젝트를 클릭했을 때" + }, + { + "ele": [ + "$[1][1].type", + "$[1][1].params[0]", + "$[1][1].params[1].params[0]" + ], + "answer": [ + "add_effect_amount", + "color", + 30 + ], + "point": 2.5, + "desc": "문제 3/우주/[오브젝트]의 세부 동작 1/'색깔' 효과를 '30' 만큼 주기", + "type": "list" + }, + { + "ele": "$[1][2].params[*].params", + "answer": [ + "다시시작!", + 2 + ], + "point": 2.5, + "desc": "문제 3/우주/[오브젝트]의 세부 동작 2/'다시시작!' 을 '2' 초 동안 '말하기'" + }, + { + "ele": "$[1][3].type", + "answer": "restart_project", + "point": 2.5, + "desc": "문제 3/우주/[오브젝트]의 세부 동작 3/처음부터 다시 실행하기" + } + ], + "sort": 183 + } +} \ No newline at end of file diff --git a/logs/cat.log b/logs/cat.log index ba67d25..dbccd48 100644 --- a/logs/cat.log +++ b/logs/cat.log @@ -34,3 +34,226 @@ Traceback (most recent call last): File "D:\project\Entry\Entry-Scoring\main.py", line 162, in process_project total_points += question_points TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType' +[2025-10-30 16:24:04] [ERROR] [main:301] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: unsupported operand type(s) for +=: 'int' and 'NoneType' +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 296, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 162, in process_project + total_points += question_points +TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType' +[2025-10-30 16:26:32] [ERROR] [main:301] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: unsupported operand type(s) for +=: 'float' and 'NoneType' +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 296, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 212, in process_project + total_points += block_points +TypeError: unsupported operand type(s) for +=: 'float' and 'NoneType' +[2025-10-31 17:08:00] [ERROR] [main:322] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 'NoneType' object is not iterable +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 317, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 167, in process_project + for block in block_list + ^^^^^^^^^^ +TypeError: 'NoneType' object is not iterable +[2025-10-31 17:14:04] [ERROR] [main:324] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: unhashable type: 'list' +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 319, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 168, in process_project + if block.get("answer") in target_event_answers + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: unhashable type: 'list' +[2025-10-31 17:17:42] [ERROR] [main:327] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: unhashable type: 'list' +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 322, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 171, in process_project + if answer in target_event_answers: # 조건에 맞는지 확인 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +TypeError: unhashable type: 'list' +[2025-10-31 17:51:14] [ERROR] [main:360] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 'list' object has no attribute 'get' +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 355, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 234, in process_project + script_data = reorder_script_by_event_order(script_json, block_event_order) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 149, in reorder_script_by_event_order + if script.get("type") == event_type: + ^^^^^^^^^^ +AttributeError: 'list' object has no attribute 'get' +[2025-10-31 17:56:20] [ERROR] [main:360] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 'list' object has no attribute 'get' +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 355, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 234, in process_project + script_data = reorder_script_by_event_order(script_json, block_event_order) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 149, in reorder_script_by_event_order + if script.get("type") == event_type: + ^^^^^^^^^^ +AttributeError: 'list' object has no attribute 'get' +[2025-10-31 17:56:40] [ERROR] [main:360] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 'list' object has no attribute 'get' +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 355, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 234, in process_project + script_data = reorder_script_by_event_order(script_json, block_event_order) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 149, in reorder_script_by_event_order + if script.get("type") == event_type: + ^^^^^^^^^^ +AttributeError: 'list' object has no attribute 'get' +[2025-10-31 17:58:18] [ERROR] [main:361] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 'list' object has no attribute 'get' +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 356, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 235, in process_project + script_data = reorder_script_by_event_order(script_json, block_event_order) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 150, in reorder_script_by_event_order + if script.get("type") == event_type: + ^^^^^^^^^^ +AttributeError: 'list' object has no attribute 'get' +[2025-11-03 16:09:35] [ERROR] [main:399] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: list indices must be integers or slices, not str +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 394, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 270, in process_project + script_data = reorder_script_all_cases(script_json, block_event_order) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 167, in reorder_script_all_cases + type_map.setdefault(s["type"], []).append(s) + ~^^^^^^^^ +TypeError: list indices must be integers or slices, not str +[2025-11-03 17:15:12] [ERROR] [main:433] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 0 +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 428, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 310, in process_project + block_elements = find_element(single_script, block_path) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 33, in find_element + for match in jsonpath_expr.find(item): + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 268, in find + for subdata in self.left.find(datum) + ^^^^^^^^^^^^^^^^^^^^^ + File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 270, in find + for submatch in self.right.find(subdata)] + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 680, in find + return self._find_base(datum, create=False) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 692, in _find_base + return [DatumInContext(datum.value[self.index], path=self, context=datum)] + ~~~~~~~~~~~^^^^^^^^^^^^ +KeyError: 0 +[2025-11-03 17:20:20] [ERROR] [main:417] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 0 +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 412, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 300, in process_project + block_elements = find_element(data, block_path) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 33, in find_element + for match in jsonpath_expr.find(item): + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 268, in find + for subdata in self.left.find(datum) + ^^^^^^^^^^^^^^^^^^^^^ + File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 270, in find + for submatch in self.right.find(subdata)] + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 680, in find + return self._find_base(datum, create=False) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 692, in _find_base + return [DatumInContext(datum.value[self.index], path=self, context=datum)] + ~~~~~~~~~~~^^^^^^^^^^^^ +KeyError: 0 +[2025-11-03 17:21:39] [ERROR] [main:407] 🚫Error processing ./output/2510_CAS_2_A/2510_CAS_2_A(정답)\project.json: 1 +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 402, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 288, in process_project + block_elements = find_list_element(data, block_path) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 48, in find_list_element + result.append([match.value for match in jsonpath_expr.find(data)]) + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 268, in find + for subdata in self.left.find(datum) + ^^^^^^^^^^^^^^^^^^^^^ + File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 270, in find + for submatch in self.right.find(subdata)] + ^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 680, in find + return self._find_base(datum, create=False) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "d:\project\Entry\Entry-Scoring\.venv\Lib\site-packages\jsonpath_ng\jsonpath.py", line 692, in _find_base + return [DatumInContext(datum.value[self.index], path=self, context=datum)] + ~~~~~~~~~~~^^^^^^^^^^^^ +KeyError: 1 +[2025-11-04 15:36:56] [ERROR] [main:423] 🚫Error processing ./output/2510_CAS_2_A/코딩활용능력2급(엔트리)-000139-성지환\project.json: 'NoneType' object is not iterable +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 418, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 268, in process_project + script_data = reorder_script_all_cases(script_json, block_event_order) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 167, in reorder_script_all_cases + for s in script_json: + ^^^^^^^^^^^ +TypeError: 'NoneType' object is not iterable +[2025-11-04 16:20:44] [ERROR] [main:423] 🚫Error processing ./output/2510_CAS_2_A/코딩활용능력2급(엔트리)-000139-성지환\project.json: 'NoneType' object is not iterable +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 418, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 268, in process_project + script_data = reorder_script_all_cases(script_json, block_event_order) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 167, in reorder_script_all_cases + for s in script_json: + ^^^^^^^^^^^ +TypeError: 'NoneType' object is not iterable +[2025-11-04 17:11:33] [ERROR] [main:423] 🚫Error processing ./output/2510_CAS_2_A/코딩활용능력2급(엔트리)-000139-성지환\project.json: 'NoneType' object is not iterable +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 418, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 268, in process_project + script_data = reorder_script_all_cases(script_json, block_event_order) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 167, in reorder_script_all_cases + for s in script_json: + ^^^^^^^^^^^ +TypeError: 'NoneType' object is not iterable +[2025-11-05 16:02:42] [ERROR] [main:423] 🚫Error processing ./output/00_test/코딩활용능력2급(엔트리)-000139-성지환\project.json: 'NoneType' object is not iterable +Traceback (most recent call last): + File "D:\project\Entry\Entry-Scoring\main.py", line 418, in main + points = process_project(project_data, scoring_data) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 268, in process_project + script_data = reorder_script_all_cases(script_json, block_event_order) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "D:\project\Entry\Entry-Scoring\main.py", line 167, in reorder_script_all_cases + for s in script_json: + ^^^^^^^^^^^ +TypeError: 'NoneType' object is not iterable diff --git a/main.py b/main.py index 1564411..a3c49e6 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,5 @@ from jsonpath_ng.ext import parse import json -from itertools import chain import os import pandas as pd # 추가된 import import unicodedata # 상단에 import 추가 @@ -9,6 +8,8 @@ from datetime import datetime import logging from logging_config import setup_logging # logging 설정을 위한 import import traceback +import itertools +import copy from script_utils import extract_and_format_scripts # 스크립트 추출 함수 import @@ -21,13 +22,13 @@ def read_json(file_path): # 요소 탐색 함수 def find_element(project_data, jsonpath_expr): - jsonpath_expr = parse(jsonpath_expr) - result = [] - for match in jsonpath_expr.find(project_data): - value = match.value - result.append(value) - return result - + """ + 주어진 데이터(project_data)에서 jsonpath 표현식에 일치하는 모든 값들을 찾아 + 리스트로 반환합니다. + """ + parsed_expr = parse(jsonpath_expr) + return [match.value for match in parsed_expr.find(project_data)] + # 요소 탐색 함수 def find_script_element(project_data, jsonpath_expr): jsonpath_expr = parse(jsonpath_expr) @@ -40,13 +41,14 @@ def find_script_element(project_data, jsonpath_expr): # jsonpath_expr_list 로 넘어온 jsonpath들을 하나씩 parse 해주고 결과를 result 리스트로 반환 def find_list_element(data, jsonpath_expr_list): - result = [] - - for jsonpath_expr in jsonpath_expr_list: - jsonpath_expr = parse(jsonpath_expr) - result.append([match.value for match in jsonpath_expr.find(data)]) - - return result + """ + 주어진 데이터(data)에서 여러 jsonpath 표현식들에 일치하는 값들을 찾아 + 결과를 리스트의 리스트 형태로 반환합니다. + """ + return [ + [match.value for match in parse(expr).find(data)] + for expr in jsonpath_expr_list + ] # 스크립트 채점 진행 전 스크립트 블럭 순서가 when_run_button_click 1번째, when_clone_start 2번째 배열에 없으면 # 리스트 순서 스왑해서 각각 0, 1번 순서로 배치될 수 있도록 함 @@ -113,10 +115,11 @@ def swap_script(origin): result.extend([block for _, block in key_press_blocks]) # 3. clone_start와 message_cast 블록 추가 - if clone_start_block: - result.append(clone_start_block) if message_cast_block: result.extend(message_cast_block) + if clone_start_block: + result.append(clone_start_block) + # 4. 나머지 블록 추가 result.extend(other_blocks) @@ -124,6 +127,49 @@ def swap_script(origin): # 결과가 비어있으면 원본 반환 return result if result else origin +def reorder_script_all_cases(script_json, block_event_order): + """ + script_json의 'type' 순서를 block_event_order 순서에 맞게 재정렬합니다. + + Args: + script_json (list[dict]): 각 요소가 {'type': '...', ...} 형태의 리스트 + block_event_order (list[str]): 원하는 type 순서 예: ['when_run_button_click', 'when_message_cast'] + + Returns: + list[dict]: block_event_order 순서대로 재정렬된 리스트 + """ + # 타입별로 스크립트를 분류 + type_map = {} + for s in script_json: + type_map.setdefault(s[0]["type"], []).append(s) + + results = [] + + def backtrack(order_idx, used_counts, current): + # ✅ 모든 이벤트 순서를 처리했으면 결과에 추가 + if order_idx == len(block_event_order): + results.append(copy.deepcopy(current)) + return + + event_type = block_event_order[order_idx] + available_scripts = type_map.get(event_type, []) + + # 아직 사용하지 않은 script만 선택 + for i, script in enumerate(available_scripts): + if used_counts[event_type][i]: + continue + used_counts[event_type][i] = True + current.append(script) + backtrack(order_idx + 1, used_counts, current) + current.pop() + used_counts[event_type][i] = False + + # 사용 여부 초기화 + used_counts = {t: [False] * len(lst) for t, lst in type_map.items()} + backtrack(0, used_counts, []) + + return results + def clean_string(text): """문자열 끝의 . 또는 ! 제거""" if isinstance(text, str): @@ -140,14 +186,36 @@ def convert_to_str(value): def process_project(project_data, scoring_data): total_points = 0 score_list = [] + + # - 시작하기 버튼을 클릭했을 때 : when_run_button_click + # - (특정) 신호를 받았을 때 : when_message_cast + # - 복제본이 생성 되었을 때 : when_clone_start + # - 장면이 시작 되었을 때 : when_scene_start + # - 오브젝트를 클릭 했을 때 : when_object_click + # 이벤트 블록이 존재하는지 여부 확인용 변수 + target_event_type = { + "when_run_button_click", + "when_message_cast", + "when_clone_start", + "when_scene_start", + "when_object_click" + } for question_key, question_info in scoring_data.items(): element_path = question_info.get('ele') question_type = question_info.get('type') block_list = question_info.get('blocks') expected_answer = question_info.get('answer') - question_points = question_info.get('points') + question_points = question_info.get('point') + + block_event_order = [] # 결과를 저장할 리스트 생성 + if isinstance(block_list, list) and block_list: + for block in block_list: + answer = block.get("answer") # answer 키값을 안전하게 가져오기 + if isinstance(answer, str) and answer in target_event_type: + block_event_order.append(answer) # 리스트에 추가 + print(f"▶ Processing question: {question_key}") # ✅ SCENE TYPE 처리 @@ -173,50 +241,82 @@ def process_project(project_data, scoring_data): elif question_type == "script": script_raw = find_script_element(project_data, element_path) script_json = json.loads(script_raw) if script_raw else None - script_data = swap_script(script_json) if script_json else None + + # 스크립트 블록 순서 재정렬 + script_data = reorder_script_all_cases(script_json, block_event_order) if script_json else None block_index = 1 for block in block_list: block_type = block.get('type') block_path = block.get('ele') block_answer = block.get('answer', None) - block_points = block.get('points') + block_points = block.get('point') if script_data is None: print(f"{question_key}-{block_index}: Script Not Found") score_list.append("확인 필요") block_index += 1 continue + + # 1. 현재 블록(문제)이 정답인지 판별하는 플래그 + is_block_correct = False + + # 2. 로깅을 위해 마지막으로 찾은 값을 저장할 변수 + last_found_values = None + + # 3. script_data가 단일 객체여도 처리 가능하도록 리스트로 통일 + scripts_to_check = script_data if isinstance(script_data, list) else [script_data] - # 블록 요소 검색 - if block_type == "list": - block_elements = find_list_element(script_data, block_path) - else: - block_elements = find_element(script_data, block_path) + # 4. 여러 스크립트 뭉치를 순회하며 정답이 하나라도 있는지 확인 + for single_script in scripts_to_check: + # 단일 스크립트 객체(single_script)에 대해 블록 요소 검색 + if block_type == "list": + block_elements = find_list_element(single_script, block_path) + else: + block_elements = find_element(single_script, block_path) + + # 결과값 정리 + if block_elements and isinstance(block_answer, list): + # 1. 비어있는 sublist를 ['None']으로 먼저 치환합니다. + # - sublist가 비어있지 않으면(if sublist) sublist를 그대로 사용하고, + # - 비어있으면 ['None']으로 대체합니다. + processed_elements = [sublist if sublist else ['None'] for sublist in block_elements] + found_values = [convert_to_str(x) for x in itertools.chain.from_iterable(processed_elements)] + else: + found_values = convert_to_str(block_elements[0]) if block_elements else None + + # 실패 시 출력할 값을 위해 마지막으로 찾은 값을 저장 + last_found_values = found_values + expected_str = convert_to_str(block_answer) if block_answer is not None else None - # 결과값 정리 - if block_elements and isinstance(block_answer, list): - found_values = [convert_to_str(x) for x in chain.from_iterable(block_elements)] - else: - found_values = convert_to_str(block_elements[0]) if block_elements else None + # 정답 조건 확인 + if block_elements: + # 5-1. 정답(block_answer)이 없고, 요소만 찾으면 되는 경우 + if block_answer is None: + is_block_correct = True + # 5-2. 정답이 있고, 찾은 값과 일치하는 경우 + elif expected_str == found_values: + is_block_correct = True + + # 6. 정답을 찾았으면, 더 이상 다른 스크립트를 확인할 필요 없이 내부 반복문 탈출 + if is_block_correct: + break # for single_script in scripts_to_check: 루프를 중단 - expected_str = convert_to_str(block_answer) if block_answer is not None else None - - # 비교 및 점수 처리 - if block_elements: - if block_answer is not None and expected_str != found_values: - print(f"{question_key}-{block_index}: ❌ {expected_str} != {found_values}") - score_list.append(0) - elif block_answer is not None and expected_str == found_values: - print(f"{question_key}-{block_index}: ✅ {expected_str} == {found_values}") - total_points += block_points - score_list.append(block_points) - elif block_answer is None: - total_points += block_points - score_list.append(block_points) + # 7. 내부 반복문 종료 후, 플래그를 기반으로 최종 점수 처리 + if is_block_correct: + # 정답을 맞힌 경우 + if block_answer is not None: + print(f"{question_key}-{block_index}: ✅ {expected_str} == {last_found_values}") + else: print(f"{question_key}-{block_index}: Element Exists") + total_points += block_points + score_list.append(block_points) else: - print(f"{question_key}-{block_index}: No elements found for {block_path}") + # 모든 스크립트를 확인했지만 정답이 없는 경우 + if last_found_values is not None: # 요소는 찾았으나 값이 틀린 경우 + print(f"{question_key}-{block_index}: ❌ {expected_str} != {last_found_values}") + else: # 요소를 전혀 찾지 못한 경우 + print(f"{question_key}-{block_index}: No elements found for {block_path}") score_list.append(0) block_index += 1 @@ -234,8 +334,9 @@ def main(): timestamp = datetime.now().strftime("%y%m%d") test_mode = False # 테스트 모드 설정 # test_mode = True # 테스트 모드 설정 - exam_round = "2509" - exam_names = ["CAT_3_A"] # 여러 시험명을 리스트로 설정 + exam_round = "2510" + # exam_names = ["CAT_3_A"] # 여러 시험명을 리스트로 설정 + exam_names = ["CAS_2_A"] # 여러 시험명을 리스트로 설정 excel_list = [] for exam_name in exam_names: