← 강의 페이지 화학공학을 위한 AI 2 / 15

2장 프롬프트로 함수 만들기

이번 주의 도구: ① 강의노트 정리기

다음 상황을 생각해 보자. 화공양론 중간고사가 2주 앞으로 다가왔다. 지난 6주 동안 적은 강의노트는 태블릿 메모, 사진, 종이 귀퉁이에 흩어져 있고, 어디에 무엇을 적었는지 본인도 모른다. 시험공부를 시작하려면 먼저 이 더미를 한 곳에 모아 훑어볼 수 있는 형태로 정리해야 하는데, 그 정리에만 저녁 하나가 통째로 든다.

이 정리 작업은 지루하지만 규칙이 분명하다. 규칙이 분명한 반복 작업은 프로그램의 몫이고, 그 프로그램은 이제 AI가 대신 써 준다. 남는 문제는 하나다. AI에게 무엇을, 어떤 크기로 시킬 것인가.

이 장에서 다루는 것

  • 1장에서 설명한 AI 협업 사이클을 실제 도구 제작에 처음 적용한다. 이 장의 훈련 범위는 ①~⑤다.
  • 변수·자료형·함수 최소 문법을 생성 코드를 읽는 데 필요한 만큼만 다룬다.
  • 같은 문제에 대한 나쁜 프롬프트와 좋은 프롬프트를 나란히 놓고 비교한다.
  • assert 문으로 생성 코드를 테스트하는 법을 연습한다.
  • 도구① 강의노트 정리기를 만들고, 마크다운과 .gitignore/.env 규율을 익힌다.

학습목표: 이 장을 마치면 다음을 할 수 있다

  1. 계산·정리 문제 하나를 함수 크기의 작은 일들로 분해할 수 있다.
  2. 변수·자료형·함수 개념을 사용해 생성 코드를 한 줄씩 한국어로 설명할 수 있다.
  3. 입력·출력·단위·예외 4요소를 갖춘 함수 단위 프롬프트를 작성할 수 있다.
  4. assert 문으로 생성 코드가 알려진 값을 재현하는지 테스트할 수 있다.
  5. 마크다운으로 위키 노트를 작성하고 .gitignore와 .env로 키를 보호할 수 있다.

2.1 문제 분해: 일을 함수 크기로 쪼갠다

흩어진 강의노트를 위키 노트로 바꾸는 일을 통째로 보면 막막하다. 그런데 종이에 손으로 절차를 적어 보면 다섯 조각으로 갈라진다. ① 붙여넣은 텍스트를 읽어 들인다. ② 제목이 될 문장을 찾는다. ③ 본문을 마크다운 형식으로 바꾼다. ④ 태그를 붙인다. ⑤ 파일로 저장한다. 일부러 하찮아 보일 만큼 잘게 적었지만, 이 다섯 줄이 이번 주에 만들 프로그램의 설계도가 된다.

이렇게 큰 문제를 각각 따로 해결하고 따로 확인할 수 있는 작은 일들로 나누는 것을 문제 분해(problem decomposition)라 한다. 좋은 프로그램은 개별적으로 시험해 볼 수 있는 작은 부품들의 조립품이며, 부품 하나를 만들 때마다 곧바로 실행해 확인하는 것이 오류를 빨리 찾는 길이다. 위의 다섯 조각이 각각 프로그램의 부품 하나, 즉 함수 하나가 된다.

분해의 단위를 함수 크기로 잡는 이유는 확인 가능성 때문이다. "노트를 정리해 줘"라는 요청의 결과는 옳은지 그른지 판정할 방법이 마땅치 않다. 반면 "이 텍스트에서 제목이 될 첫 문장을 골라 줘"의 결과는 눈으로 1초 만에 판정된다. AI에게 시키는 일의 크기는 사람이 검증할 수 있는 크기여야 한다. 1장에서 정한 역할 분담(코드는 AI, 검증은 학생)이 여기서 처음 작동한다.

이 역할 분담을 작업 절차로 펼친 것이 1장에서 설명한 AI 협업 사이클이다. 이 블록은 이 교재의 고정 장치로, 15장까지 모든 예제와 실습에 같은 모습으로 반복된다.

AI 협업 사이클
  1. ① 문제 정의: 무엇이 입력이고 무엇이 출력인가
  2. ② 분해: 함수 크기의 일들로 쪼갠다
  3. ③ 프롬프트: 한 번에 함수 하나씩 요청한다
  4. ④ 생성 코드 읽기: 한 줄씩 한국어로 설명한다
  5. ⑤ 테스트: 알려진 값으로 확인한다
  6. ⑥ 화공 검증: 단위·대조값·극한값 점검 (3장에서 정식 도입)

이 순서는 AI를 전제로 프로그래밍 입문을 재설계한 대학 수업들(UCSD의 CS1-LLM 등)이 채택한 "분해 → 프롬프트 → 코드 읽기 → 테스트" 사이클에, 화학공학적 검증 단계 ⑥을 더한 것이다. 이번 장에서는 ①~⑤를 연습하고, ⑥은 3장에서 다룬다.

분해표에는 실용적인 쓸모가 하나 더 있다. 표의 각 행이 그대로 프롬프트 하나가 되므로, 분해표를 완성한 순간 AI에게 보낼 요청 목록도 완성된다. 이번 주 실습에서는 이 표를 README에 먼저 적고 나서 코드 생성을 시작하는데, 이 순서는 최종 시험에서도 같다. 2시간 실기에서 맨 먼저 할 일이 바로 문제를 분해표로 옮기는 것이다.

2.2 함수·변수·자료형: 생성 코드를 읽기 위한 최소 문법

사이클의 4단계 "생성 코드 읽기"를 하려면 문법이 필요하다. 다만 파이썬 전체가 아니라, AI가 낸 코드에 반드시 등장하는 세 가지(변수, 자료형, 함수)만 있으면 이번 주 코드는 전부 읽힌다.

2.2.1 변수와 값

값을 가리키는 이름을 변수(variable)라 한다. 이름에 값을 붙이는 문장이 할당이다.

코드 2-1 할당 세 줄
note_title = "화공양론 3장 물질수지"   # 문자열 — 노트 제목
page_count = 17                         # 정수 — 노트 분량 [쪽]
water_bp = 100.0                        # 실수 — 물의 정상 끓는점 [°C]

세 줄을 하나씩 되짚어 보자. 첫 줄은 따옴표로 감싼 글자들, 즉 문자열(string)을 note_title이라는 이름에 할당한다. 둘째 줄은 정수 17을, 셋째 줄은 실수 100.0을 각각의 이름에 붙인다. 물리량을 담는 변수에는 이 교재 전체에서 단위를 주석으로 명기한다. 나중에 단위 검증의 대조 대상이 코드 안에 있어야 하기 때문이다.

2.2.2 자료형: 값에는 종류가 있다

값이 속한 종류를 자료형(data type)이라 한다. 위에서 만난 세 가지가 파이썬의 기본 자료형으로, 문자열은 str, 정수는 int, 소수점이 있는 수는 float에 속한다. 어느 형인지 헷갈리면 type()으로 물어보면 된다.

함정은 숫자처럼 보이는 문자열이다. "17"은 따옴표 안에 있으므로 수가 아니라 문자열이고, 계산에 쓰려면 변환해야 한다. 그리고 이 변환은 단위 표기가 섞이는 순간 실패한다. 실제로 실행해 보자.

코드 2-2 자료형 확인과 변환 실패 (대화형 세션)
>>> type("17")
<class 'str'>
>>> float("25.0")
25.0
>>> float("25.0 °C")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: '25.0 °C'

마지막 에러는 이번 주 실습에서 실제로 만나게 된다. 강의노트는 문자열이고, 그 안의 "25.0 °C" 같은 표기는 사람 눈에만 숫자다. 에러 메시지의 마지막 줄에 원인이 그대로 적혀 있으므로, 에러가 나면 이 줄부터 읽는 습관을 들이자.

2.2.3 함수: 이름 붙인 작업 한 덩어리

문장 여러 개를 묶어 이름을 붙인 것을 함수(function)라 한다. §2.1의 분해표에서 쪼갠 "일 하나"가 코드에서는 함수 하나로 나타난다. 정의와 호출을 한 번에 보자.

코드 2-3 함수의 정의와 호출
def celsius_to_kelvin(temp_c):      # temp_c: 매개변수 [°C]
    """섭씨 온도를 켈빈 온도로 변환한다."""
    temp_k = temp_c + 273.15        # 식 (2.1) [K]
    return temp_k                   # 반환값 [K]

t_boil = celsius_to_kelvin(100.0)   # 100.0: 인자 [°C]
print(t_boil)                       # 373.15가 출력된다

여기서 쓴 변환식은 켈빈 온도와 섭씨 온도의 정의 관계다.

TK = TC + 273.15 (2.1)

TK는 켈빈 온도[K], TC는 섭씨 온도[°C]이고, 273.15는 두 눈금 사이의 정의된 오프셋이다. 코드로 돌아가면, def 줄의 괄호 안 이름 temp_c를 매개변수(parameter)라 하고, 호출할 때 괄호에 넣어 주는 값 100.0을 인자(argument)라 한다. 함수가 호출되면 인자가 매개변수라는 변수에 할당되고, 함수 몸통이 실행된 뒤 return 뒤의 값, 즉 반환값(return value)이 호출한 자리로 돌아온다. # 뒤의 설명글은 주석(comment)으로, 실행에는 관여하지 않지만 코드를 읽는 사람에게 단위와 의도를 알려 준다.

return이 없는 함수는 어떻게 될까. 화면에 print로 출력만 하는 함수도 문법상 유효하지만, 그 결과를 변수에 담으면 None이라는 특별한 값이 들어온다. None은 "반환값이 없음"을 나타내는 고유한 자료형의 값으로, 문자열 'None'과는 다르다. 출력된 숫자는 눈에만 보일 뿐 다음 계산에 쓸 수 없으므로, 계산 함수를 요청할 때는 반드시 "값을 반환하게" 요구해야 한다. 이것이 §2.3 프롬프트 4요소 중 '출력'이 존재하는 이유다.

스스로 점검 (해답은 권말)

  1. type("3.14")의 결과는 무엇인가?
  2. 코드 2-3에서 매개변수와 인자는 각각 무엇인가?
  3. print만 하고 return이 없는 함수의 결과를 변수에 담으면 무슨 값이 들어오는가?

2.3 함수 단위 프롬프트: 한 번에 부품 하나

문법을 갖췄으니 사이클의 3단계로 간다. 프롬프트의 품질은 결과 코드의 품질을 직접 결정하는데, 초보자의 프롬프트가 실패하는 가장 흔한 형태는 "너무 큰 요청"이다. 실제로 어떻게 실패하는지 먼저 보자.

프롬프트 (나쁜 예)

온도 변환기 만들어 줘.

코드 2-4 돌아온 생성 코드 (앞부분 발췌)
print("=== 만능 온도 변환기 ===")
mode = input("1) C→F  2) F→C  3) C→K  4) K→C 선택: ")
if mode == "1":
    temp_f = float(input("섭씨 온도: ")) * 9 / 5 + 32   # [°F]
    print("화씨:", temp_f)
# … (이후 40여 줄: 화씨·랭킨 분기, 메뉴 반복 루프 생략)

✔ 판정: 함수가 아니라 메뉴 달린 프로그램 전체가 왔다. 요청에 단위도 방향도 없어 AI가 화씨까지 알아서 넣었고, 이 중 어느 줄도 다음 주 도구에서 재사용할 수 없다. 부품이 아니라 완제품을 받은 것이 문제다 → 함수 단위로 다시 요청한다.

고치는 방법은 요청을 분해표의 한 칸 크기로 줄이고, 네 가지를 명시하는 것이다. 무엇이 들어가고(입력), 무엇이 나오고(출력), 단위는 무엇이며(단위), 이상한 입력에는 어떻게 반응할지(예외). 이 입력·출력·단위·예외 4요소가 이 교재의 표준 프롬프트 패턴이다.

예제 2.3-1 온도 변환 함수를 프롬프트로 만들기

문제 섭씨 온도를 켈빈으로 변환하는 함수를 AI에게 요청해 만들고, 그 결과를 검증하라. 절대영도보다 낮은 입력은 거부해야 한다.

풀이 전략 코드 작성은 AI에게 맡기고, 4요소를 채운 프롬프트 작성과 결과 판정은 직접 한다. 판정 기준은 미리 정해 둔다. 어는점 0 °C → 273.15 K, 끓는점 100 °C → 373.15 K가 나와야 한다.

프롬프트

섭씨 온도를 켈빈으로 변환하는 파이썬 함수를 만들어 줘. 입력은 섭씨 온도 하나(실수, °C), 출력은 켈빈 온도(실수, K)를 return으로 반환. 절대영도인 -273.15 °C보다 낮은 입력이 오면 ValueError를 일으켜 줘. 주석은 한국어로, 단위도 주석에 적어 줘.

코드 2-5 생성 코드
def celsius_to_kelvin(temp_c):
    """섭씨 온도[°C]를 켈빈 온도[K]로 변환한다."""
    ABS_ZERO_C = -273.15    # 절대영도 [°C], 정의값
    if temp_c < ABS_ZERO_C:
        raise ValueError("절대영도보다 낮은 온도: " + str(temp_c) + " °C")
    return temp_c + 273.15  # 켈빈 온도 [K]

✔ 판정: 4요소가 모두 반영됐다. 절대영도가 이름 있는 상수 ABS_ZERO_C로 뽑혀 있고, 범위 방어가 return보다 먼저 온다. 다만 이 판정은 아직 눈으로 읽은 것뿐이다. 실행 확인은 아래에서 한다.

  • 단위: 입력 [°C], 출력 [K]로 식 (2.1)과 일치하며, 주석에 명기됨
  • 대조값: 0 °C → 273.15 K, 100 °C → 373.15 K 반환 확인 (§2.4의 테스트로 실행 검증)
  • 극한값: -273.15 °C → 0.0 K, 그보다 낮으면 ValueError 발생 확인

분석 나쁜 프롬프트와 같은 문제를 요청했는데 결과는 6줄짜리 재사용 가능한 부품이 됐다. 차이는 전부 프롬프트의 4요소에서 나왔다. 위의 세 줄 점검은 3장에서 검증 루틴 3종으로 정식화된다. 지금은 형식부터 몸에 익혀 보자. What-if: 프롬프트에서 예외 요구 문장만 지우고 재생성해, 범위 방어가 사라지는지 확인해 보라.

2.4 테스트: 생성 코드를 믿지 않는 방법

코드 2-5는 그럴듯하다. 그러나 "그럴듯하다"는 느낌만으로는 판정이 되지 않는다. 사이클의 5단계는 답을 이미 아는 입력을 넣어 기계가 판정하게 만드는 것이고, 파이썬에서 가장 짧은 도구가 assert 문이다. assert 조건, "메시지"는 조건이 참이면 조용히 지나가고, 거짓이면 메시지와 함께 프로그램을 멈춘다.

코드 2-6 test_convert.py: 알려진 값 3개로 검증
# test_convert.py — 답을 아는 입력으로 생성 함수를 검증한다
from convert import celsius_to_kelvin

assert celsius_to_kelvin(0.0) == 273.15, "물의 어는점 대조 실패"      # [K]
assert celsius_to_kelvin(100.0) == 373.15, "물의 끓는점 대조 실패"    # [K]
assert celsius_to_kelvin(-273.15) == 0.0, "절대영도 대조 실패"        # [K]
print("테스트 3개 통과")

세 케이스의 선택에 논리가 있다. 어는점과 끓는점은 일반화학에서 이미 아는 대조값이고, 절대영도는 함수가 허용하는 가장 낮은 극한값이다. 테스트 케이스는 대개 아는 값과 극한값 두 곳에서 나온다.

순서도 중요하다. 예제 2.3-1의 풀이 전략에서 판정 기준(0 °C → 273.15 K)을 코드를 받기 전에 정해 둔 것을 눈여겨보라. 생성 코드를 먼저 보고 나서 기준을 정하면, 눈앞의 출력에 맞춰 기준이 끌려가는 일이 생긴다. 판정 기준은 AI가 아니라 사람이 정해야 하고, 그 형식이 바로 미리 적어 둔 테스트다.

이 테스트가 실제로 무엇을 잡아내는지 보자. 프롬프트에서 조건을 흐리면 AI는 자주 다음과 같은 코드를 내놓는다.

0.15 K는 사소해 보이지만, 증기압처럼 온도에 민감한 물성 계산의 입력으로 들어가면 오차가 증폭된다. 8장에서 이 함수를 실제로 재사용할 때 다시 확인하게 된다.

스스로 점검 (해답은 권말)

  1. assert의 조건이 거짓이면 무슨 일이 일어나는가?
  2. 테스트 3개가 모두 통과하면 이 함수가 옳다고 결론지을 수 있는가? 한 문장으로 답하라.

2.5 마크다운과 저장소 규율: .gitignore와 .env

이번 주 도구의 출력 형식이 마크다운이므로, 만들기 전에 형식부터 읽을 줄 알아야 한다. 몇 개의 기호만으로 문서 구조를 표시하는 텍스트 표기법을 마크다운(markdown)이라 한다. 위키의 모든 노트가 이 형식이고, 이 교재의 README·기록 과제도 전부 마크다운으로 쓴다.

표 2-1 이번 주에 필요한 마크다운 최소 문법
표기의미예
#, ##제목 (개수 = 수준)# 물질수지 기초
**굵게**강조**증기압**
-목록 항목- 정상상태 가정
`코드`코드·명령 표기`assert`
[[링크]]다른 노트로 연결 (Obsidian 문법)[[화공양론]]

정리기가 만들어 낼 노트 한 장의 목표 형태는 다음과 같다. 이 구조(핵심 정리 / 내가 틀렸던 것 / 타 과목 연결)는 위키 채점 기준의 3항과 같다.

코드 2-7 정리기가 출력할 위키 노트의 목표 형태
# 물질수지 기초
#seed
## 오늘 배운 것
- **물질수지**: 축적 = 입력 - 출력 (반응이 없을 때)
- 정상상태에서는 축적 항이 0이다.
## 내가 틀렸던 것
- bypass 흐름을 recycle로 착각했다.
## 연결
- [[화공양론]] 3장 · [[유체역학]] 질량 보존

저장 규율이 하나 남았다. 1주차에 발급받은 게이트웨이 가상 키는 비밀값이다. 키를 코드나 노트에 적은 채 커밋하면 저장소 이력에 남고, 이력에 남은 비밀은 나중에 지우기가 어렵다. 그래서 비밀값은 .env라는 별도 파일에 두고, 그 파일 자체를 Git이 추적하지 못하게 막는다. 추적 제외 목록이 .gitignore 파일이다.

코드 2-8 .gitignore: 추적하지 않을 파일 목록
# .gitignore
.env             # 가상 키가 든 파일 — 커밋 금지
__pycache__/     # 파이썬이 만드는 캐시 폴더
*.pyc

커밋 전에 확인하는 습관 하나면 충분하다. git status 출력에 .env가 보이면 .gitignore가 작동하지 않는 것이니 멈추고 원인을 찾는다. 스타터 repo에는 이 .gitignore가 이미 들어 있다. 실습 마지막 단계에서 직접 확인한다.

생각해보기

완성된 강의노트 정리기가 "믿을 만하다"고 판단할 방법을 두 가지 제안하라. 하나는 이 장에서 배운 테스트를 사용하고, 다른 하나는 테스트 없이 사람이 할 수 있는 방법이어야 한다.

실습 2 도구①: 강의노트 정리기 (타이머 없음)

입력은 텍스트 붙여넣기 한정이다. OCR·PDF 처리는 금지 범위이니 시도하지 않는다(숨은 난도가 커서 실습 2시간을 다 쓰게 된다). 타이머는 없고, 결과는 통과/재도전 2단계로만 처리한다. 재도전은 다음 실습 전까지 허용된다.

준비물

  • 1주차에 셋업한 개발환경 (PowerShell에서 claude 실행 확인, Git Bash 금지)
  • 실습 2 스타터 repo (파싱 계층 제공: 텍스트 읽기 함수와 저장 함수는 이미 완성돼 있다)
  • 본인 전공 과목 강의노트 텍스트 3편 (붙여넣기 가능한 형태로 준비)
코드 2-9 스타터가 제공하는 파싱 계층 (인터페이스 발췌, 수정 금지)
def read_pasted_text():
    """붙여넣은 강의노트 텍스트를 문단 리스트로 돌려준다."""

def save_note(filename, markdown_text):
    """완성된 마크다운 노트를 wiki/ 폴더에 저장한다."""

과제

  1. 실습 2.1 스타터 repo를 클론하고 python organizer.py를 실행하라. (성공 시 예제 노트가 변환 없이 그대로 출력된다)
  2. 실습 2.2 정리기의 일을 §2.1처럼 분해해 README에 분해표(입력 → 처리 단계들 → 출력)로 기록하라. (각 행이 함수 하나에 대응해야 한다)
  3. 실습 2.3 첫 부품, 즉 문단 리스트에서 제목을 골라내는 함수를 4요소 프롬프트로 생성하라. 완료 후 커밋하라. (예제 노트에서 제목 한 줄이 뽑히면 완료)
  4. 실습 2.4 본문을 코드 2-7 형태의 마크다운으로 바꾸는 함수를 생성하고, assert 테스트 3개를 작성해 통과시켜라. 완료 후 커밋하라. (실행 시 "테스트 3개 통과"가 출력되면 완료)
  5. 실습 2.5 본인 강의노트 3편을 변환해 위키에 저장하고 커밋하라. (wiki/ 폴더에 .md 파일 3개가 생기면 완료)
  6. 실습 2.6 git status로 .env가 추적 목록에 없는지, 커밋 이력에 키가 없는지 확인하라. (둘 다 없어야 완료)

완성 기준 (통과 / 재도전)

  • 정리기 v1이 작동한다: 예제 노트를 넣으면 마크다운 노트가 나온다
  • 본인 전공 노트에서 만든 위키 노트 3개가 저장소에 있다
  • assert 테스트 3개 통과 + README에 분해표 기록
  • 의미 있는 커밋 3회 이상 (실습 2.3 / 2.4 / 2.5 각 1회 이상)
  • .env 미추적 확인 완료
막혔는가? 힌트 프롬프트 (정답 코드가 아니다)
  1. 에러가 나면: "다음 에러 메시지의 원인 후보를 3개 제시하고, 각각 확인하는 방법을 알려 줘: (에러 전문 붙여넣기)"
  2. 생성 코드가 안 읽히면: "이 함수에 한 줄씩 한국어 주석을 달고, 각 변수의 자료형을 알려 줘: (코드 붙여넣기)"
  3. 테스트가 안 떠오르면: "이 함수를 검증할 테스트 케이스를 제안해 줘. 정상 입력 2개와 극한 입력 1개, 각각 왜 그 값인지 이유도 함께."

퇴실 전 기록

실습 종료 15분은 위키 시간이다. 오늘 만든 것, 막힌 것, 틀렸던 것 각 1건을 정리기로 노트화해 커밋해야 퇴실한다. 방금 만든 도구를 자기 기록에 바로 쓰는 것이 이 수업의 순환 구조다.

요약

  • S 2-1 함수 단위 프롬프트 4요소: 입력 · 출력 · 단위 · 예외. 비운 요소는 AI가 대신 정한다.
  • S 2-2 AI 협업 사이클: ① 문제 정의 → ② 분해 → ③ 프롬프트 → ④ 생성 코드 읽기 → ⑤ 테스트 → ⑥ 화공 검증.
  • S 2-3 식 (2.1) TK = TC + 273.15. 상수의 정밀도까지 프롬프트에 명시한다.
표 2-2 나쁜 프롬프트와 좋은 프롬프트: 같은 문제, 다른 결과
항목나쁜 프롬프트좋은 프롬프트
요청 단위프로그램 전체 ("변환기 만들어 줘")함수 하나 (분해표 한 칸)
단위·정밀도없음(AI가 재량으로 결정)°C → K, 상수 273.15 명시
예외 처리없음절대영도 미만 → ValueError
결과 확인눈으로 "그럴듯한지" 본다assert로 대조값 3개 자동 판정

이 장에서 AI 협업 사이클의 ①~⑤가 처음으로 한 바퀴 돌았다. 문제를 함수 크기로 쪼개고, 4요소 프롬프트로 부품을 받아, 읽고, 테스트로 판정했다. 도구 사다리의 첫 칸인 정리기 v1도 완성했다. 그러나 273.15 자리에 273이 들어간 것을 잡아낸 근거는 문법 지식이 아니라 어는점이라는 화학의 사실이었다. 이것이 사이클의 마지막 블록 ⑥이 필요한 이유이고, 3장의 주제다.

용어 정리

문제 분해(problem decomposition)
큰 문제를 각각 따로 해결하고 따로 확인할 수 있는 작은 일들로 나누는 것.
변수(variable)
값을 가리키는 이름.
자료형(data type)
값이 속한 종류. 파이썬 기본형으로 str, int, float가 있다.
문자열(string)
따옴표로 감싼 글자들의 값. 숫자처럼 보여도 따옴표 안이면 문자열이다.
함수(function)
문장 여러 개를 묶어 이름을 붙인 작업 한 덩어리.
매개변수(parameter)
함수 정의의 괄호 안 이름. 호출 시 인자가 이 변수에 할당된다.
인자(argument)
함수를 호출할 때 괄호에 넣어 전달하는 값.
반환값(return value)
함수가 return으로 호출한 자리에 돌려주는 값. 없으면 None이 돌아온다.
주석(comment)
# 뒤에 쓰는 설명글. 실행되지 않으며, 이 교재에서는 단위 명기에 쓴다.
마크다운(markdown)
#, -, ** 같은 기호로 문서 구조를 표시하는 텍스트 표기법.

연습문제

Q군: 개념·읽기 (AI 없이 푼다)

  1. Q2.1 ● 다음 코드의 출력을 예측하라. 그 다음 각 변수의 자료형을 쓰라.
    mass = "150.5"          # [g]
    print(type(mass))
    volume = 2.0             # [L]
    print(mass + volume)
  2. Q2.2 ● 코드 2-5의 목적과 동작을 한국어 2~3문장으로 설명하라. ABS_ZERO_C가 이름 있는 상수로 분리된 이유를 반드시 포함하라.
  3. Q2.3 ●● AI가 낸 다음 답안을 채점하고 교정하라. 틀린 곳을 모두 찾고, 코드 2-6 형식의 테스트 중 어느 줄이 이를 잡아내는지 밝혀라.
    def kelvin_to_celsius(temp_k):
        print(temp_k - 273)   # [°C]

P군: 제작 (AI 사용 전제)

  1. P2.1 ● 예제 2.3-1과 같은 절차로, 켈빈을 섭씨로 변환하는 함수를 4요소 프롬프트로 만들어라. 테스트 3개(대조값 2 + 극한값 1)를 함께 작성하고 통과시켜라.
  2. P2.2 ●● (메타인지) 예제 2.3-1의 프롬프트를 일부러 나쁘게 바꾸는 방법을 두 가지 설계하고, 각각 어떤 결함이 있는 코드가 나올지 예측한 뒤 실제로 재생성해 예측과 비교하라.
  3. P2.3 ●●● 강의노트 정리기에 "핵심 용어 자동 강조" 기능을 추가하라. 노트에 자주 나온 전공 용어를 **굵게**로 감싸는 함수를 분해표에 추가하고, 프롬프트로 생성한 뒤, 무엇을 근거로 "자주"를 판정했는지 README에 기록하라. 테스트 2개 이상을 포함하라.

위키 기록 과제 (이번 주 의미 커밋 ≥1이 채점 지표다)

  1. 이 장의 핵심(사이클 6단계 + 프롬프트 4요소)을 1페이지로 정리하라(#seed 태그).
  2. 이번 주에 "내가 틀렸던 것" 1건을 에러 메시지 전문과 함께 기록하라.
  3. 타 과목 연결 1건: 이번 주 함수 하나가 화공양론·유체역학의 어느 계산에 쓰일지 한 문단으로 적어라.

3장에서는 AI가 틀리는 방식(환각, 단위 오류, 물성 날조)을 실제 사례로 해부하고, 이 장에서 미리 맛본 세 줄 점검을 검증 루틴 3종으로 정식 도입한다. 도구② 플래시카드 생성기는 이번 주 정리기가 만든 위키 노트를 입력으로 읽는다. 도구 사다리는 이렇게 이어진다.