현재 정적 대피소로 운영 중입니다. 일부 글과 상호작용 기능은 점검 중입니다.
Programming4 분조회 165좋아요 0

파이썬으로 지구과학 시험문제 내기

1. 2025학년도 9월 지구과학1 20번 문제올해 9월에 지구과학 모의고사를 풀다가 골깨지는 문제가 하나 있었다.20번 외계 행성계 탐사 문제였는데 아무리 봐도 주기가 없다.결국 해결하지 못하고 EBS 강의를 보는 굴욕을 치뤘다.해답은 그래프의 주기.그래프에서 주기가...

1. 2025학년도 9월 지구과학1 20번 문제

올해 9월에 지구과학 모의고사를 풀다가 골깨지는 문제가 하나 있었다.

20번 외계 행성계 탐사 문제였는데 아무리 봐도 주기가 없다.

파이썬으로 지구과학 시험문제 내기-1

결국 해결하지 못하고 EBS 강의를 보는 굴욕을 치뤘다.

해답은 그래프의 주기.

그래프에서 주기가 t1 ~ t4 까지이니, 시선속도가 -30~+30m/s인 지점에서 전체 주기의 1/3을 회전한 것.

따라서 t1 ~ t2에서 회전각은 120도이므로 시선속도가 +30인 지점에서 시선방향-공전중심-중심별의 사이는 60도가 된다.

말하면서도 이게 뭔가 싶어서 그림으로 표현해 보았다.

파이썬으로 지구과학 시험문제 내기-2

그럼 t2 지점에서의 시선 속도를 구해보면 아래와 같다.

파이썬으로 지구과학 시험문제 내기-3

여기서 Vr = V * cos30º 이고 Vr = 30 m/s 이므로, V = Vr / cos30º 이다.

그래서 ㄷ이 맞다는 충격적인 결론이다.

파이썬으로 지구과학 시험문제 내기-4

이걸 어케 1분만에 푸냐...

이건 가우스가 환생해서 와도 1분 안에는 못 풀것 같다.

어쨌든 이 문제를 2학년 아이들에게 풀이하는 방법을 모두 알려주고 똑같은 문제를 수행평가로 내기로 했다.

물론, 풀이를 하면서 이 문제가 수행평가일 것이라고는 말해주지 않았다.

2. 수행평가를 치다.

지구과학1 수업반이 모두 월요일에 몰려 있어서 월요일에 시험을 치기로 했다.

그런데...?

파이썬으로 지구과학 시험문제 내기-5

반에 들어갔더니 애들의 절반이 없었다.

문제가 어렵다는 소문이 났고, 수행평가를 준비하지 못했던 학생들이 병조퇴를 한 것.

진짜 아팠던 아이들도 있지만 이대로 똑같은 시험지로 시험을 칠 순 없었다.

정직하게 시험을 친 학생들이 기존의 문제를 그대로 한다면 평가의 형평성에 문제가 있지 않냐는 이의를 제기했다.

그래서 파이썬으로 그래프를 그리게 되었다.

3. 파이썬으로 수행평가 내기

문제의 유형은 같게 하고 값이나 주기 자체를 변경시키기로 했다.

그리고 계속 값을 변경시키고 확인하기 쉽도록 주피터 환경에서 진행했다.

먼저 모듈을 호출하고 한글이 깨지는걸 막기 위해 폰트 설정부터 해준다.

from matplotlib import pyplot as plt
import matplotlib
import numpy as np
from numpy import pi
matplotlib.rcParams["font.family"] = "batang"

matplotlib.rcParams["font.size"] = 13
plt.rcParams['axes.unicode_minus'] = False

그리고 그래프의 x값의 범위와 최대 속력을 정해준다.

xStart = -pi
xEnd = 3*pi
maxV = 20*(3**0.5)

x = np.arange(xStart, xEnd, 0.1)
y = np.sin(x)*maxV

파이 값은 numpy 의 pi를 호출하면 간편하게 사용할 수 있다.

그리고 이미지 크기를 적절하게 설정한 다음 실행 코드를 누르면 아래와 같은 그림을 얻는다.

plt.figure(figsize=(7,3))
plt.plot(x,y, color="black")
파이썬으로 지구과학 시험문제 내기-6

아직 뭔가 많이 부족하다.

이제 이 그림에서 필요한 부분을 잘라내고 각 축을 설정해보자.

xthicks와 ythicks로 축값을 변경하고 xlim, ylim으로 그래프를 적절하게 잘라준다.

그리고 그리드를 그려주면 그럴듯한 그림이 생긴다.

plt.xticks(np.arange(xStart, xEnd, 2*pi/3),[f"t{x}" for x in range(6)])
plt.yticks([-45,  -30, -15, 0, 15, 30, 45])
plt.xlim(xStart+2*pi/3, xEnd-pi*2/3)
plt.ylim(-45,45)
plt.grid(linestyle='--')
파이썬으로 지구과학 시험문제 내기-7

마지막으로 scatter로 내가 원하는 값을 하나 찍고 축의 이름을 설정한다.

z = np.arcsin(-(3**0.5)/2)
plt.scatter(z+2*pi,np.sin(z)*maxV, color="black")
plt.xlabel("시간 →", loc="right")
plt.ylabel("시선속도(m/s)")
파이썬으로 지구과학 시험문제 내기-8

이제 여기서 함수의 주기를 바꿔주거나, 최댓값과 최솟값을 바꾸면 문제 변형이 가능하다.

4. 응용하기

이번 2차 지필에서는 아래의 문제에서 오른쪽 그래프의 시선속도 값을 뒤집고 최댓값을 30으로 변경하고 싶었다.

그래서 위의 방식으로 코드를 만들어 보았다.

파이썬으로 지구과학 시험문제 내기-9
from matplotlib import pyplot as plt
import matplotlib
import numpy as np
from numpy import pi
# matplotlib.rcParams["font.family"] = "AppleGothic"
matplotlib.rcParams["font.family"] = "batang"

matplotlib.rcParams["font.size"] = 13
plt.rcParams['axes.unicode_minus'] = False
xStart = 0
xEnd = 4*pi
maxV = 30

x = np.arange(xStart, xEnd, 0.1)
y = np.sin(x)*30
plt.figure(figsize=(2,2))
plt.plot(x,y, color="black")
plt.xticks([])
plt.yticks([-30, 0, 30], ["-30", 0 ,"+30"])
# plt.grid(linestyle="--")
plt.xlim([0, 2*pi])
plt.xlabel("시간 →", loc="right")
plt.plot([0, pi/2],[30, 30], color="black", linestyle="--",linewidth=0.5)
plt.plot([0, pi*3/2],[-30, -30], color="black", linestyle="--",linewidth=0.5)
plt.plot([0, pi*3],[0, 0], color="black", linewidth=0.5)
ylabel = plt.ylabel("시\n선\n속\n도\n(m/s)", rotation=0, labelpad=18)
ylabel.set_position((0,0.3))

처음에는 중간에 점선을 어떻게 표현할지 살짝 생각했데, 그냥 직선으로 그리면 끝나는 문제였다.

결과물은 상당히 만족스러웠다.

파이썬으로 지구과학 시험문제 내기-10

5. 후기

시험문제의 완성도도 올라가고, 코딩 공부도 함께할 수 있는 시간이었다.

앞으로도 많이 응용할 예정이다.

댓글은 서버 점검 중이라 대피소에서 사용할 수 없습니다.

관련 글

Programming

아이폰 테더링 제한 우회하기(Lgu+ 기준)

아이폰의 테더링 제한 해제방법을 계속 찾다가 어떤 분의 글을 발견했다.아이폰에서 파이썬 서버를 하나 열어서 데이터를 전송하는 것.이 분의 글과 깃허브를 참고해서 진행해보았다.1. IOS-SOCKS-SERVERSOCKS는 소켓 통신을 중계하는 프로토콜이다.이걸 아이폰에서...

Programming

엑셀로 cell 파일(한셀) 열기

한셀(.cell) 파일을 받을 때 마다 당황스러웠다.왜냐하면 .cell 파일은 엑셀로 열리지 않기 때문이다. 그래서 매번 한셀을 깔거나, 한글 오피스 웹으로 들어가 확인하곤 했다.이제 그런 방법 없이 간단하게 확장자 변경으로 .cell 파일을 확인해보자.두 가...

Programming

파워 포인트에서 그림 반전하는 법

블로그를 쓰다가 아래 이미지를 반전시켜 하나의 그래프를 만들고 싶었다.그런데 반전을 어떻게 시키는 건지 기억이 안남...그래서 블로그에다 남겨둔다.[이미지를 클릭] --> [세이프 형식] --> [회전] --> [좌우 대칭]위의 순서로 하면 이미지를 반...