2509회 채점자료 업데이트
This commit is contained in:
@@ -47,8 +47,8 @@ def copy_ent_files(source_root, target_root):
|
||||
|
||||
# 사용법
|
||||
|
||||
source_directory = r"D:\project\data\CAS_제2508회 정기\답안파일\(전체답안)1교시2교시나눔\B형" # 원본 디렉토리 경로
|
||||
target_directory = r".\ent\2508_CAS_2_B"
|
||||
source_directory = r"D:\project\Entry\Entry-Scoring\시험자료\2509\A" # 원본 디렉토리 경로
|
||||
target_directory = r".\ent\2509_CAT_3_A"
|
||||
# target_directory_a = r"./output/A" # '1교시'의 타겟 경로
|
||||
# target_directory_b = r"./output/B" # '2교시'의 타겟 경로
|
||||
# target_directory_c = r"./output/C" # '3교시'의 타겟 경로
|
||||
|
||||
@@ -50,8 +50,8 @@ def process_ent_files(ent_dir, output_dir):
|
||||
|
||||
# 실행 예
|
||||
if __name__ == "__main__":
|
||||
# test_names = ["2507_CAT_3_A"]
|
||||
test_names = ["2508_CAS_2_A","2508_CAS_2_B"]
|
||||
test_names = ["2509_CAT_3_A"]
|
||||
# test_names = ["2508_CAS_2_A","2508_CAS_2_B"]
|
||||
for test_name in test_names:
|
||||
ent_dir = f".\\ent\\{test_name}"
|
||||
output_dir = f".\\output\\{test_name}"
|
||||
|
||||
BIN
251001_2509_CAT_3_A_채점결과.xlsx
Normal file
BIN
251001_2509_CAT_3_A_채점결과.xlsx
Normal file
Binary file not shown.
Binary file not shown.
557
correct/2509_CAT_3_A.json
Normal file
557
correct/2509_CAT_3_A.json
Normal file
@@ -0,0 +1,557 @@
|
||||
{
|
||||
"1-1": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='화산')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/화산섬/[배경] 이름 설정/이름을 '화산'으로 변경하기",
|
||||
"sort": 11
|
||||
},
|
||||
"1-3": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='불')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/불(2)/[개체] 이름 설정 1/이름을 '불'로 변경하기",
|
||||
"sort": 13
|
||||
},
|
||||
"1-4": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='공룡')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/공룡/[개체] 이름 설정 2/이름 변경 없음",
|
||||
"sort": 14
|
||||
},
|
||||
"1-5": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='알')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/계란/[개체] 이름 설정 3/이름을 '알'로 변경하기",
|
||||
"sort": 15
|
||||
},
|
||||
"1-6": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='바위')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/바위(4)/[개체] 이름 설정 4/이름을 '바위'로 변경하기",
|
||||
"sort": 16
|
||||
},
|
||||
"2-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'불')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"120",
|
||||
"90"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/[시작]의 세부 동작 1/x: '120' y: '90' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "130",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/[시작]의 세부 동작 2/크기를 '130' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].type",
|
||||
"$[0][3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].type",
|
||||
"$[0][3].statements[0][0].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"change_to_some_shape",
|
||||
"get_pictures"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 1/'불(2)_3' 모양으로 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"0.5"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 2/'0.5' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"change_to_some_shape",
|
||||
"get_pictures"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 3/'불(2)_1' 모양으로 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][3].type",
|
||||
"$[0][3].statements[0][3].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"0.5"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 4/'0.5' 초 기다리기",
|
||||
"type": "list"
|
||||
}
|
||||
],
|
||||
"sort": 102
|
||||
},
|
||||
"3-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'공룡')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"0",
|
||||
"-20"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[시작]의 세부 동작 1/x: '0' y: '-20' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[*].params",
|
||||
"answer": [
|
||||
"공룡알을 구하자",
|
||||
"1"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[시작]의 세부 동작 2/'공룡알을 구하자' 를 '1' 초 동안 '말하기'"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].type",
|
||||
"$[0][3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].type",
|
||||
"$[0][3].statements[0][0].params[0].type",
|
||||
"$[0][3].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"is_press_some_key",
|
||||
"38"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/만일 1/만일 '위쪽 화살표' 키가 눌러져 있는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].statements[0][0].type",
|
||||
"$[0][3].statements[0][0].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_y",
|
||||
"5"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[만일 1]의 세부 동작/y 좌표를 '5' 만큼 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0].type",
|
||||
"$[0][3].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"is_press_some_key",
|
||||
"40"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/만일 2/만일 '아래쪽 화살표' 키가 눌러져 있는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].statements[0][0].type",
|
||||
"$[0][3].statements[0][1].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_y",
|
||||
"-5"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[만일 2]의 세부 동작/y 좌표를 '-5' 만큼 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].type",
|
||||
"$[0][3].statements[0][2].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"is_press_some_key",
|
||||
"37"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/만일 3/만일 '왼쪽 화살표' 키가 눌러져 있는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].statements[0][0].type",
|
||||
"$[0][3].statements[0][2].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_x",
|
||||
"-5"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[만일 3]의 세부 동작/x 좌표를 '-5' 만큼 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][3].type",
|
||||
"$[0][3].statements[0][3].params[0].type",
|
||||
"$[0][3].statements[0][3].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"is_press_some_key",
|
||||
"39"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/만일 4/만일 '오른쪽 화살표' 키가 눌러져 있는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][3].statements[0][0].type",
|
||||
"$[0][3].statements[0][3].statements[0][0].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_x",
|
||||
"5"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[만일 4]의 세부 동작/x 좌표를 '5' 만큼 바꾸기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][4].type",
|
||||
"$[0][3].statements[0][4].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"reach_something"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/만일 5/만일 '불' 에 닿았는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][4].statements[0][0].type",
|
||||
"$[0][3].statements[0][4].statements[0][0].params[0].params[0]",
|
||||
"$[0][3].statements[0][4].statements[0][0].params[1]"
|
||||
],
|
||||
"answer": [
|
||||
"dialog",
|
||||
"앗 뜨거워!",
|
||||
"speak"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[만일 5]의 세부 동작 1/'앗 뜨거워!' 를 '말하기'",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][4].statements[0][1].type",
|
||||
"$[0][3].statements[0][4].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"wait_second",
|
||||
"1"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[만일 5]의 세부 동작 2/'1' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][4].statements[0][2].type",
|
||||
"$[0][3].statements[0][4].statements[0][2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"stop_object",
|
||||
"all"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/공룡/[만일 5]의 세부 동작 3/'모든' 코드 멈추기",
|
||||
"type": "list"
|
||||
}
|
||||
],
|
||||
"sort": 110
|
||||
},
|
||||
"4-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'알|계')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][1].params[0].params[0]",
|
||||
"answer": "50",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/[시작]의 세부 동작 1/크기를 '50' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][2].type",
|
||||
"$[0][2].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"rotate_absolute",
|
||||
"270"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/[시작]의 세부 동작 2/방향을 '270°' 로 정하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].type",
|
||||
"$[0][3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][0].type",
|
||||
"answer": "show",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/[반복]의 세부 동작 1/모양 보이기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0].params[1].params[0]",
|
||||
"$[0][3].statements[0][1].params[0].params[3].params[0]",
|
||||
"$[0][3].statements[0][1].params[1].params[1].params[0]",
|
||||
"$[0][3].statements[0][1].params[1].params[3].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"55",
|
||||
"160",
|
||||
"5",
|
||||
"10"
|
||||
],
|
||||
"points": 2.2,
|
||||
"desc": "문제 2/알/[반복]의 세부 동작 2/x: '55 부터 160 사이의 무작위 수' y: '5 부터 10 사이의 무작위 수' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].params[0]",
|
||||
"$[0][3].statements[0][2].params[1].params[1].params[0]",
|
||||
"$[0][3].statements[0][2].params[1].params[3].params[0]",
|
||||
"$[0][3].statements[0][2].params[2].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_xy_time",
|
||||
"2",
|
||||
"-200",
|
||||
"200",
|
||||
"-140"
|
||||
],
|
||||
"points": 2.2,
|
||||
"desc": "문제 2/알/[반복]의 세부 동작 3/'2' 초 동안 x: '-200 부터 200 사이의 무작위 수' y: '-140' 만큼 움직이기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][3].type",
|
||||
"$[0][3].statements[0][3].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"reach_something"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/만일/만일 '바위' 에 닿았는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][3].statements[0][0].params[*].params",
|
||||
"answer": [
|
||||
"공룡알이 깨졌다!",
|
||||
"0.2"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/[만일]의 세부 동작 1/'공룡알이 깨졌다!' 를 '0.2' 초 동안 '말하기'"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][3].statements[0][1].type",
|
||||
"answer": "hide",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/[만일]의 세부 동작 2/모양 숨기기"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].params",
|
||||
"answer": [
|
||||
null,
|
||||
"32"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/스페이스/'스페이스' 키를 눌렀을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][1].type",
|
||||
"$[1][1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"repeat_inf",
|
||||
null
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][1].statements[0][0].type",
|
||||
"$[1][1].statements[0][0].params[0].type"
|
||||
],
|
||||
"answer": [
|
||||
"_if",
|
||||
"reach_something"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/만일/만일 '공룡' 에 닿았는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][1].statements[0][0].statements[0][0].type",
|
||||
"answer": "locate",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/[만일]의 세부 동작 1/'공룡' 위치로 이동하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[1][1].statements[0][0].statements[0][1].type",
|
||||
"$[1][1].statements[0][0].statements[0][1].params[0].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"move_x",
|
||||
"-20"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/알/[만일]의 세부 동작 2/x 좌표를 '-20' 만큼 바꾸기",
|
||||
"type": "list"
|
||||
}
|
||||
],
|
||||
"sort": 126
|
||||
},
|
||||
"5-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'바위')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/바위/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": [
|
||||
"locate_xy",
|
||||
"130",
|
||||
"-120"
|
||||
],
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/바위/[시작]의 세부 동작 1/x: '130' y: '-120' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "150",
|
||||
"points": 2.14,
|
||||
"desc": "문제 2/바위/[시작]의 세부 동작 2/크기를 '150' 으로 정하기"
|
||||
}
|
||||
],
|
||||
"sort": 141
|
||||
}
|
||||
}
|
||||
@@ -26,3 +26,11 @@ 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-01 15:43:18] [ERROR] [main:300] 🚫Error processing ./output/2509_CAT_3_A/2509_CAT_3_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 295, 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'
|
||||
|
||||
6
main.py
6
main.py
@@ -234,8 +234,8 @@ def main():
|
||||
timestamp = datetime.now().strftime("%y%m%d")
|
||||
test_mode = False # 테스트 모드 설정
|
||||
# test_mode = True # 테스트 모드 설정
|
||||
exam_round = "2508"
|
||||
exam_names = ["CAS_2_A", "CAS_2_B"] # 여러 시험명을 리스트로 설정
|
||||
exam_round = "2509"
|
||||
exam_names = ["CAT_3_A"] # 여러 시험명을 리스트로 설정
|
||||
excel_list = []
|
||||
|
||||
for exam_name in exam_names:
|
||||
@@ -276,7 +276,7 @@ def main():
|
||||
for file in sorted(files): # 파일도 정렬
|
||||
if file == 'project.json':
|
||||
full_path = os.path.join(root, file)
|
||||
print(f"\nProcessing: {full_path}")
|
||||
print(f"\n🟠 Processing: {full_path}")
|
||||
try:
|
||||
# 디렉토리 패스 내에 학생 이름만 뽑아서 엑셀 컬럼 명으로 추가
|
||||
match = re.search(r'(\d{6}[-_][^\\/]+)[\\/]', full_path)
|
||||
|
||||
@@ -60,7 +60,7 @@ def read_json(file_path):
|
||||
|
||||
def main():
|
||||
# base_dir을 코드 내에서 직접 지정
|
||||
base_dir = r".\output\2508_CAS_2_B" # 원하는 최상위 디렉토리 경로로 수정하세요
|
||||
base_dir = r"D:\project\Entry\Entry-Scoring\output\2509_CAS_3_A" # 원하는 최상위 디렉토리 경로로 수정
|
||||
|
||||
# 하위 디렉토리 순회
|
||||
for root, dirs, files in os.walk(base_dir):
|
||||
|
||||
362
시험자료/2507/2507_CAT_3_A.json
Normal file
362
시험자료/2507/2507_CAT_3_A.json
Normal file
@@ -0,0 +1,362 @@
|
||||
{
|
||||
"1-1": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='실험실')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/교실 뒤(3)/[배경] 이름 설정/이름을 '실험실'으로 변경하기"
|
||||
},
|
||||
"1-2": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='새로운 약')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/물약(빨강)/[개체] 이름 설정 1/이름을 '새로운 약'으로 변경하기"
|
||||
},
|
||||
"1-4": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='불')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/불(2)/[개체] 이름 설정 2/이름을 '불'로 변경하기"
|
||||
},
|
||||
"1-5": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='마법사')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/꼬마 마법사/[개체] 이름 설정 3/이름을 '마법사'로 변경하기"
|
||||
},
|
||||
"1-6": {
|
||||
"type": "scene",
|
||||
"ele": "$..objects[?(@.name=='마법의 약')]",
|
||||
"points": 2,
|
||||
"desc": "문제 1/마법의 약/[개체] 이름 설정 4/이름 변경 없음"
|
||||
},
|
||||
"2-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'새로운 약|물약')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": ["locate_xy", "50", "5"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/[시작]의 세부 동작 1/x: '50' y: '5' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "60",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/[시작]의 세부 동작 2/크기를 '60' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][0].type",
|
||||
"answer": "when_object_click",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/오브젝트/오브젝트를 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": ["$[1][1].type", "$[1][1].params[0]"],
|
||||
"answer": ["repeat_inf", null],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[1][1].statements[0][0].type",
|
||||
"answer": "locate",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/새로운 약/[반복]의 세부 동작/'마우스 포인터' 위치로 이동하기"
|
||||
}
|
||||
]
|
||||
},
|
||||
"3-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'불')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": ["locate_xy", "-150", "-30"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[시작]의 세부 동작 1/x: '-150' y: '-30' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "90",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[시작]의 세부 동작 2/크기를 '90' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": ["$[0][3].type", "$[0][3].params[0]"],
|
||||
"answer": ["repeat_inf", null],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][0].type",
|
||||
"$[0][3].statements[0][0].params[0].params[1].params[0]",
|
||||
"$[0][3].statements[0][0].params[0].params[3].params[0]",
|
||||
"$[0][3].statements[0][0].params[1].params[1].params[0]",
|
||||
"$[0][3].statements[0][0].params[1].params[3].params[0]"
|
||||
],
|
||||
"answer": ["locate_xy", "-150", "0", "-10", "40"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 1/x: '-150 부터 0 사이의 무작위 수' y: '-10 부터 40 사이의 무작위 수' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][1].type",
|
||||
"answer": "hide",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 2/모양 숨기기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].type",
|
||||
"$[0][3].statements[0][2].params[0].params[1].params[0]",
|
||||
"$[0][3].statements[0][2].params[0].params[3].params[0]"
|
||||
],
|
||||
"answer": ["wait_second", "calc_rand", "1", "2"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 3/'1 부터 2 사이의 무작위 수' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][3].type",
|
||||
"answer": "show",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 4/모양 보이기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][4].type",
|
||||
"$[0][3].statements[0][4].params[0].params[0]"
|
||||
],
|
||||
"answer": ["wait_second", "0.5"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[반복]의 세부 동작 5/'0.5' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].type",
|
||||
"$[0][3].statements[0][5].params[0].type"
|
||||
],
|
||||
"answer": ["_if", "reach_something"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/만일/만일 '새로운 약' 에 닿았는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][5].statements[0][0].params[0].params[0]",
|
||||
"answer": "300",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[만일]의 세부 동작 1/크기를 '300' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][1].type",
|
||||
"$[0][3].statements[0][5].statements[0][1].params[0].params[0]",
|
||||
"$[0][3].statements[0][5].statements[0][1].params[1]"
|
||||
],
|
||||
"answer": ["dialog", "마법 실패", "speak"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[만일]의 세부 동작 2/'마법 실패' 를 '말하기'",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][2].type",
|
||||
"$[0][3].statements[0][5].statements[0][2].params[0]"
|
||||
],
|
||||
"answer": ["stop_object", "all"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/불/[만일]의 세부 동작 3/'모든' 코드 멈추기",
|
||||
"type": "list"
|
||||
}
|
||||
]
|
||||
},
|
||||
"4-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'마법사')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법사/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": ["locate_xy", "135", "-20"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법사/[시작]의 세부 동작 1/x: '135' y: '-20' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "180",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법사/[시작]의 세부 동작 2/크기를 '180' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].params[*].params",
|
||||
"answer": ["마법 실험을 해봐야지!", "2"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법사/[시작]의 세부 동작 3/'마법 실험을 해봐야지!' 를 '2' 초 동안 '말하기'"
|
||||
}
|
||||
]
|
||||
},
|
||||
"5-0": {
|
||||
"type": "script",
|
||||
"ele": "$.objects[?(@.name=~'마법의 약')].script",
|
||||
"blocks": [
|
||||
{
|
||||
"ele": "$[0][0].type",
|
||||
"answer": "when_run_button_click",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/시작/시작하기 버튼을 클릭했을 때"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][1].type",
|
||||
"$[0][1].params[0].params[0]",
|
||||
"$[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": ["locate_xy", "-40", "10"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[시작]의 세부 동작 1/x: '-40' y: '10' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][2].params[0].params[0]",
|
||||
"answer": "50",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[시작]의 세부 동작 2/크기를 '50' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": ["$[0][3].type", "$[0][3].params[0]"],
|
||||
"answer": ["repeat_inf", null],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/반복/계속 반복하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][0].type",
|
||||
"answer": "hide",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[반복]의 세부 동작 1/모양 숨기기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][1].type",
|
||||
"$[0][3].statements[0][1].params[0].params[1].params[0]",
|
||||
"$[0][3].statements[0][1].params[0].params[3].params[0]"
|
||||
],
|
||||
"answer": ["locate_x", "-160", "60"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[반복]의 세부 동작 2/x: '-160 부터 60 사이의 무작위 수' 위치로 이동하기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][2].type",
|
||||
"$[0][3].statements[0][2].params[0].params[0]"
|
||||
],
|
||||
"answer": ["wait_second", "2"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[반복]의 세부 동작 3/ '2' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][3].type",
|
||||
"answer": "show",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[반복]의 세부 동작 4/모양 보이기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][4].type",
|
||||
"$[0][3].statements[0][4].params[0].params[0]"
|
||||
],
|
||||
"answer": ["wait_second", "0.5"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[반복]의 세부 동작 5/'0.5' 초 기다리기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].type",
|
||||
"$[0][3].statements[0][5].params[0].type"
|
||||
],
|
||||
"answer": ["_if", "reach_something"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/만일/만일 '새로운 약' 에 닿았는가? 라면",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": "$[0][3].statements[0][5].statements[0][0].params[0].params[0]",
|
||||
"answer": "100",
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[만일]의 세부 동작 1/크기를 '100' 으로 정하기"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][1].type",
|
||||
"$[0][3].statements[0][5].statements[0][1].params[0]",
|
||||
"$[0][3].statements[0][5].statements[0][1].params[1].params[0]"
|
||||
],
|
||||
"answer": ["add_effect_amount", "color", "70"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[만일]의 세부 동작 2/'색깔' 효과를 '70' 만큼 주기",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][2].type",
|
||||
"$[0][3].statements[0][5].statements[0][2].params[0].params[0]",
|
||||
"$[0][3].statements[0][5].statements[0][2].params[1]"
|
||||
],
|
||||
"answer": ["dialog", "마법 성공", "speak"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[만일]의 세부 동작 3/'마법 성공' 을 '말하기'",
|
||||
"type": "list"
|
||||
},
|
||||
{
|
||||
"ele": [
|
||||
"$[0][3].statements[0][5].statements[0][3].type",
|
||||
"$[0][3].statements[0][5].statements[0][3].params[0]"
|
||||
],
|
||||
"answer": ["stop_object", "all"],
|
||||
"points": 2.43,
|
||||
"desc": "문제 2/마법의 약/[만일]의 세부 동작 4/'모든' 코드 멈추기",
|
||||
"type": "list"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user