이 코드가 놓인 수업

파이썬 수학 → 방정식과 시각화 (51 ~ 60) → 임의의 연립방벙식에서 가져온 ‘세트 3: 연립방정식 해결 함수 만들기’ 코드입니다. 단원 전체를 요약하는 대신 이 단계가 담당하는 작업을 한 가지씩 읽습니다. 코드 속 이름·점수·예시 자료는 교재의 연습 데이터이며 실제 학생의 기록이나 성과를 소개하는 자료가 아닙니다.

학습 목표는 코드를 그대로 입력하는 데서 멈추지 않고, 어떤 값이 준비되고 어떤 조건에서 결과가 달라지는지를 설명하는 것입니다. 다음 질문에 먼저 답을 적고 코드와 대조해 보세요.

조건 answer is not None가 참일 때와 거짓일 때, 다음에 실행되는 줄은 무엇인가요?

원본 코드와 핵심 줄

from fractions import Fraction

def simultaneous_eq(eq1, eq2):
    a1 = eq1[0]
    b1 = eq1[1]
    c1 = eq1[2]

    a2 = eq2[0]
    b2 = eq2[1]
    c2 = eq2[2]

    determinant = a1 * b2 - a2 * b1

    if determinant == 0:
        if a1 * c2 == a2 * c1 and b1 * c2 == b2 * c1:
            print('해가 무수히 많습니다.')
            return None
        else:
            print('해가 없습니다.')
            return None

    x = Fraction(c1 * b2 - c2 * b1, determinant)
    y = Fraction(a1 * c2 - a2 * c1, determinant)

    return x, y

eq1 = [2, 1, 5]
eq2 = [1, -1, 1]

answer = simultaneous_eq(eq1, eq2)

if answer is not None:
    x, y = answer
    print(f'x = {x}, y = {y}')

아래 행 번호는 위 코드 블록의 첫 줄을 1행으로 셉니다. 긴 예제에서는 주요 문장 10개까지 짚었습니다. 함수 안의 줄은 함수를 호출할 때 실행되므로, 행 번호 순서와 실제 실행 순서가 항상 같은 것은 아닙니다.

  • 3행: simultaneous_eq(eq1, eq2) 함수를 정의합니다. 정의와 실제 호출 시점은 구분합니다.
  • 4행: a1에 eq1[0]의 값을 저장합니다.
  • 5행: b1에 eq1[1]의 값을 저장합니다.
  • 6행: c1에 eq1[2]의 값을 저장합니다.
  • 8행: a2에 eq2[0]의 값을 저장합니다.
  • 9행: b2에 eq2[1]의 값을 저장합니다.
  • 10행: c2에 eq2[2]의 값을 저장합니다.
  • 12행: determinant에 a1 * b2 - a2 * b1의 값을 저장합니다.
  • 14행: determinant == 0를 검사합니다. 참인 경로와 그렇지 않은 경로에서 바뀌는 값을 나누어 보세요.
  • 15행: a1 * c2 == a2 * c1 and b1 * c2 == b2 * c1를 검사합니다. 참인 경로와 그렇지 않은 경로에서 바뀌는 값을 나누어 보세요.

실행 전에 준비할 것과 확인 결과

본문 코드의 로컬 실행에서 오류 없이 끝나는 것을 확인했습니다. 이는 해당 예제의 1회 실행 확인이며 모든 입력·학습 효과를 검증했다는 뜻은 아닙니다. 난수를 사용하는 경우 아래 출력은 seed 7을 고정한 확인 예시입니다.

x = 2, y = 1

결과를 이해하는 확인 활동

분수를 소수로 바꾸기 전에

Fraction은 분자와 분모를 정수로 보관합니다. 1/3을 소수 근삿값으로 먼저 계산한 뒤 다시 분수로 바꾸는 것과, Fraction(1, 3)으로 만드는 것은 구분해야 합니다. 분모에는 0을 넣을 수 없습니다.

확인 활동: Fraction(1, 2)와 Fraction(2, 4)를 비교하고, 분자·분모가 달라도 같은 값이 되는 이유를 설명해 보세요.

연립방정식에서 먼저 확인할 값

행렬식 a1b2-a2b1이 0이 아니면 두 식을 소거해 한 쌍의 해를 계산할 수 있습니다. 0이면 같은 직선인지 평행한 다른 직선인지 따로 보아야 합니다. 이 예제는 각 식의 x·y 계수가 둘 다 0인 퇴화한 식까지 일반적으로 처리하는 풀이기로 사용하지 않습니다.

확인 활동: 구한 x와 y를 원래 두 식 모두에 대입하세요. 한 식만 맞는 값은 연립방정식의 해가 아닙니다.

출력과 반환은 다릅니다

print는 화면에 보여주고 return은 호출한 곳으로 값을 돌려줍니다. 반환한 값이 있어야 다음 계산에 이어 쓸 수 있습니다. 함수 안에서 return에 도달하면 그 호출의 나머지 문장은 실행되지 않습니다.

확인 활동: 함수의 반환값을 변수에 담아 type과 값을 확인하고, 화면 출력과 구분해 기록하세요.

한 번 바꾸고, 이유를 남기기

  1. 원래 코드의 복사본을 준비하고 바꾸려는 줄을 하나 고릅니다. 위 확인 활동에 제시한 입력·조건·설정 중 하나만 선택하세요.
  2. 바꾸기 전에 예상 결과를 한 문장으로 적습니다. 오류가 예상된다면 오류가 날 이유와 위치도 적어 둡니다.
  3. 필요한 실행 환경과 앞 단계 정의를 준비한 뒤 실행합니다. 원본과 수정본을 번갈아 보면서 값·문자·그림 중 무엇이 달라졌는지 기록합니다.
  4. ‘작동했다’ 대신 바꾼 줄 → 관찰한 결과 → 그렇게 된 이유를 남깁니다. 예상과 다르면 마지막 오류 메시지와 관련된 줄을 함께 가져와 질문합니다.

이 글의 확인 질문은 조건 answer is not None가 참일 때와 거짓일 때, 다음에 실행되는 줄은 무엇인가요? 입니다. 보호자는 정답을 먼저 알려주기보다 아이가 실제 변수나 조건을 짚어 설명하는지 들어보세요. 어려워하면 단원 전체를 다시 시키기보다 위 핵심 줄 중 막힌 한 줄로 범위를 좁힙니다.

같은 과정의 코드 노트 목록에서 앞뒤 단계를 이어 볼 수 있습니다. 실행 환경이나 시작 단계가 궁금하면 파이썬 과정 안내를 확인하세요.