Part 1: 수학 공부를 위한 파이썬 첫걸음
Chapter 1: 안녕하세요, 파이썬! (Hello, Python!)
학습 목표
- 파이썬이 무엇인지, 왜 수학 공부에 도움이 되는지 이해한다.
- 온라인 개발 환경(Replit 또는 Google Colab)에서 첫 파이썬 코드를 작성하고 실행할 수 있다.
print()
함수를 사용하여 글자나 숫자 계산 결과를 화면에 출력할 수 있다.- 파이썬의 기본적인 산술 연산자(+, -, *, /, **, %, //)를 사용하여 계산을 수행할 수 있다.
- 코드에 주석을 작성하는 방법과 그 중요성을 이해한다.
1. 파이썬과 수학, 새로운 만남
수학을 공부하다 보면 복잡한 계산을 반복하거나, 추상적인 개념을 머릿속으로만 그리려니 막막할 때가 있습니다. 이때 컴퓨터의 도움을 받으면 어떨까요? 파이썬(Python)은 배우기 쉽고 강력한 프로그래밍 언어로, 여러분의 수학 공부를 도와줄 훌륭한 친구가 될 수 있습니다.
왜 수학 공부에 파이썬을 사용할까요?
- 계산기보다 강력함: 복잡한 연산, 수열의 합, 통계 계산 등을 빠르고 정확하게 처리할 수 있습니다.
- 개념 시각화: 함수의 그래프, 도형 등을 직접 그려보며 눈으로 확인할 수 있습니다. (뒤에서 배웁니다!)
- 자동화: 반복적인 작업을 컴퓨터에 맡겨 시간과 노력을 절약할 수 있습니다.
- 논리력 향상: 수학 문제를 해결하는 절차를 코드로 구현하는 과정에서 논리적 사고 능력이 자연스럽게 향상됩니다.
- 미래 준비: 프로그래밍 능력은 미래 사회의 필수 역량이며, 수학적 사고와 코딩 능력의 결합은 강력한 경쟁력이 됩니다.
이 책에서는 파이썬을 이용하여 수학 개념을 탐구하고 문제를 해결하는 방법을 배울 것입니다. 프로그래밍이 처음이어도 괜찮습니다. 쉽고 재미있게 시작해 봅시다!
2. 파이썬 실행 환경 준비 (설치 없이 시작하기!)
파이썬 코드를 작성하고 실행하려면 개발 환경이 필요합니다. 컴퓨터에 직접 설치할 수도 있지만(부록 A 참조), 처음에는 웹 브라우저만 있으면 되는 온라인 환경을 사용하는 것이 가장 편리합니다.
- Replit (replit.com): 회원가입 후 'Create Repl' 버튼을 눌러 'Python' 템플릿을 선택하면 바로 코딩을 시작할 수 있습니다. 코드를 작성하고 'Run' 버튼을 누르면 오른쪽에 결과가 나타납니다.
- Google Colaboratory (colab.research.google.com): Google 계정으로 접속하여 '새 노트'를 만들면 됩니다. 코드 셀에 코드를 입력하고, 셀 왼쪽의 재생 버튼(▶) 또는
Shift + Enter
키를 눌러 실행합니다.
둘 중 편한 것을 선택하여 앞으로의 예제를 따라 해 보세요!
3. 파이썬에게 말 걸기: print()
함수
컴퓨터에게 화면에 무언가를 보여달라고 명령할 때 사용하는 것이 print()
함수입니다. 괄호 ()
안에 출력하고 싶은 내용을 넣습니다.
가. 글자(문자열) 출력: 따옴표("
또는 '
)로 감싸줍니다.
print("Hello, Python!")
print('수학 공부, 파이썬과 함께!')
나. 숫자 출력: 따옴표 없이 숫자를 그대로 넣습니다.
print(100)
print(3.14159)
다. 계산 결과 출력: 괄호 안에 계산식을 넣으면 파이썬이 계산한 결과를 출력합니다.
print(3 + 5) # 덧셈
print(10 - 4) # 뺄셈
print(6 * 7) # 곱셈
print(15 / 3) # 나눗셈
실행 결과 (Replit 또는 Colab에서 확인해보세요!)
Hello, Python!
수학 공부, 파이썬과 함께!
100
3.14159
8
6
42
5.0
주의: 나눗셈 결과는 항상 실수(float) 형태로 나옵니다 (예: 5.0
).
4. 파이썬 계산기: 다양한 산술 연산자
파이썬은 기본적인 사칙연산 외에도 다양한 수학 계산을 위한 연산자를 제공합니다.
+
: 덧셈-
: 뺄셈*
: 곱셈/
: 나눗셈**
: 거듭제곱 (예:2**3
은 2의 3제곱, 즉 8)%
: 나머지 (Modulo 연산. 예:17 % 5
는 17을 5로 나눈 나머지, 즉 2)//
: 몫 (Floor division. 예:17 // 5
는 17을 5로 나눈 몫, 즉 3)
print(2**10) # 2의 10제곱
print(17 % 5) # 17 나누기 5의 나머지
print(17 // 5) # 17 나누기 5의 몫
print( (3 + 5) * 2 ) # 괄호를 이용한 연산 순서 지정 (수학과 동일!)
실행 결과:
1024
2
3
16
5. 사람을 위한 설명: 주석 (Comment)
코드 중간에 설명을 추가하고 싶을 때는 주석(Comment)을 사용합니다. 주석은 파이썬 실행에 영향을 주지 않고, 오직 코드를 읽는 사람(미래의 나 자신 포함!)을 위한 메모입니다. 파이썬에서는 #
기호 뒤에 오는 내용은 모두 주석으로 처리됩니다.
# 이것은 주석입니다. 파이썬은 이 줄을 무시합니다.
# 원주율 값 출력하기
print(3.14159)
result = 10 + 20 # 덧셈 결과를 result 변수에 저장 (변수는 다음 장에서!)
# print(result) # 이 줄은 주석 처리되어 실행되지 않음
코드가 무엇을 하는지, 왜 이렇게 작성했는지 주석으로 설명하는 습관은 매우 중요합니다!
직접 해보기 (Follow Along Exercise)
- 자신의 이름과 학년을
print()
함수를 사용하여 각각 다른 줄에 출력해보세요. print()
함수 안에서 자신이 좋아하는 숫자 두 개를 더하고 빼는 계산 결과를 출력해보세요.2024 % 12
의 결과를 계산하고 주석으로 어떤 계산인지 설명해보세요.
# 직접 코드를 작성하고 실행해보세요!
print("홍길동")
print("1학년")
print(7 + 11)
print(100 - 33)
print(2024 % 12) # 2024년을 12로 나눈 나머지 (띠 계산 등에 활용 가능)
연습문제
- 가로 길이가 8, 세로 길이가 5인 직사각형의 넓이와 둘레를
print()
함수를 사용하여 계산하고 출력하세요. (결과만 출력해도 되고, "넓이:", 넓이값 형태로 출력해도 좋습니다.) - 섭씨온도(Celsius)를 화씨온도(Fahrenheit)로 변환하는 공식은
F = (9/5) * C + 32
입니다. 섭씨 25도를 화씨로 변환한 결과를print()
함수로 출력하세요. 5
의4
제곱 값을 계산하여 출력하세요.
[쫌만더.1] 화면에 결과 보여주기 print()함수
컴퓨터가 열심히 계산한 결과를 눈으로 확인하거나, 사용자에게 메시지를 보여주고 싶을 때 사용하는 가장 기본적인 명령어가 바로 print()
함수입니다. 함수는 특정 작업을 수행하는 명령어 묶음이라고 생각하면 쉬운데, print()
는 괄호 ()
안에 있는 내용을 화면(보통 '콘솔' 또는 '터미널'이라고 부르는 검은색 또는 하얀색 텍스트 창)에 출력하는 역할을 합니다.
1. 가장 기본적인 사용법: 원하는 내용 출력하기
괄호 안에 출력하고 싶은 내용을 넣으면 됩니다.
글자(문자열) 출력: 따옴표(
"
또는'
)로 감싸줍니다.print("안녕, 파이썬!") print('만나서 반가워.')
출력 결과:
안녕, 파이썬! 만나서 반가워.
숫자 출력: 따옴표 없이 숫자만 적습니다.
print(100) print(3.141592)
출력 결과:
100 3.141592
계산 결과 출력: 괄호 안에서 직접 계산하고 그 결과를 출력할 수도 있습니다.
print(5 + 3) # 덧셈 결과 print(17 // 5) # 몫 계산 결과 print(17 % 5) # 나머지 계산 결과
출력 결과:
8 3 2
변수에 저장된 값 출력: 변수 이름을 괄호 안에 넣으면 그 변수가 담고 있는 값이 출력됩니다.
name = "김철수" age = 17 print(name) print(age)
출력 결과:
김철수 17
2. 여러 내용 한번에 출력하기
쉼표(,
)를 사용하여 여러 값을 한 줄에 이어서 출력할 수 있습니다. 이때 각 값 사이에는 기본적으로 띄어쓰기 한 칸이 자동으로 들어갑니다.
name = "이영희"
age = 18
print(name, "학생은", age, "살입니다.")
출력 결과:
이영희 학생은 18 살입니다.
(주의!) 숫자와 문자열을 +
연산자로 직접 연결하려고 하면 오류가 발생합니다. +
는 문자열끼리 붙이거나 숫자끼리 더할 때 사용하기 때문입니다. 쉼표를 사용하면 파이썬이 알아서 처리해주니 편리합니다.
3. 더 세련되게 출력하기: f-string (포맷 문자열 리터럴)
변수와 문자열을 섞어서 출력할 때 가장 편리하고 현대적인 방법은 f-string을 사용하는 것입니다. 문자열 시작 따옴표 앞에 f
를 붙이고, 문자열 안에서 출력하고 싶은 변수나 계산식을 중괄호 {}
로 감싸주면 됩니다.
name = "박지성"
score = 95
# f-string 사용
print(f"{name} 학생의 점수는 {score}점입니다.")
# 중괄호 안에서 간단한 계산도 가능
a = 10
b = 5
print(f"{a} 더하기 {b}는 {a + b}입니다.")
출력 결과:
박지성 학생의 점수는 95점입니다.
10 더하기 5는 15입니다.
f-string을 사용하면 코드가 훨씬 간결하고 읽기 쉬워지므로 꼭 익혀두는 것이 좋습니다.
4. 출력 형식 조절하기: sep
와 end
옵션
print()
함수는 숨겨진 옵션을 가지고 있어서 출력 형식을 좀 더 세밀하게 조절할 수 있습니다.
sep
(separator): 여러 값을 쉼표로 구분해 출력할 때, 값들 사이에 들어갈 구분자를 지정합니다. 기본값은 띄어쓰기(' '
)입니다.year = 2023 month = 10 day = 26 # 기본 출력 (띄어쓰기로 구분) print(year, month, day) # '-'를 구분자로 사용 print(year, month, day, sep='-') # 구분자 없이 모두 붙여서 출력 print(year, month, day, sep='') # ' / '를 구분자로 사용 print(year, month, day, sep=' / ')
출력 결과:
2023 10 26 2023-10-26 20231026 2023 / 10 / 26
end
:print()
함수는 내용을 출력한 뒤 기본적으로 줄을 바꿉니다(개행).end
옵션은 출력 마지막에 붙을 문자를 지정하며, 기본값은 줄바꿈 문자('\n'
)입니다. 이 값을 바꾸면 줄바꿈을 하지 않거나 다른 문자를 마지막에 추가할 수 있습니다.print("첫 번째 줄입니다.", end='') # 줄바꿈 안 함 print(" 이어서 출력됩니다.") print("과일 목록:", end=' ') # 마지막에 띄어쓰기 추가 print("사과", end=', ') # 마지막에 쉼표와 띄어쓰기 추가 print("바나나", end=', ') print("딸기") # 마지막은 기본값(줄바꿈) 사용
출력 결과:
첫 번째 줄입니다. 이어서 출력됩니다. 과일 목록: 사과, 바나나, 딸기
end=''
는 특히 반복문 안에서 여러 값을 한 줄에 이어서 출력하고 싶을 때 유용하게 사용됩니다.
5. 특수 문자 출력하기 (이스케이프 시퀀스)
문자열 안에서 줄바꿈을 하거나, 탭(일정한 간격 띄우기)을 넣거나, 따옴표 자체를 출력하고 싶을 때는 역슬래시(\
)와 특정 문자를 조합한 '이스케이프 시퀀스'를 사용합니다.
\n
: 줄바꿈 (New line)\t
: 탭 (Tab)\\
: 역슬래시(\
) 문자 자체\'
: 작은따옴표('
) 문자 자체 (작은따옴표로 감싼 문자열 안에서)\"
: 큰따옴표("
) 문자 자체 (큰따옴표로 감싼 문자열 안에서)
print("첫 줄\n두 번째 줄")
print("이름\t나이")
print("김철수\t17")
print("파일 경로는 C:\\Python\\ 입니다.")
print('작은따옴표 안의 \'작은따옴표\' 출력')
print("큰따옴표 안의 \"큰따옴표\" 출력")
출력 결과:
첫 줄
두 번째 줄
이름 나이
김철수 17
파일 경로는 C:\Python\ 입니다.
작은따옴표 안의 '작은따옴표' 출력
큰따옴표 안의 "큰따옴표" 출력
정리:
print()
는 화면에 값을 출력하는 기본적인 함수입니다.- 문자열, 숫자, 변수, 계산식 등 다양한 값을 출력할 수 있습니다.
- 쉼표(
,
)로 여러 값을 한 줄에 출력하고, 기본적으로 띄어쓰기로 구분됩니다. - f-string (
f"..."
)을 사용하면 변수와 문자열을 섞어 깔끔하게 출력할 수 있습니다. (강력 추천!) sep
옵션으로 값 사이의 구분자를,end
옵션으로 출력 마지막 문자를 변경할 수 있습니다.\n
,\t
등 이스케이프 시퀀스를 사용하여 특수 문자를 출력할 수 있습니다.
print()
함수는 프로그래밍을 배우는 내내 가장 많이 사용하게 될 함수 중 하나이므로, 다양한 방법으로 직접 사용해보면서 익숙해지는 것이 중요합니다!
[쫌만더.2] 나머지(%)와 몫(//)의 활용
파이썬을 배우는 고등학생들이 나머지(%)와 몫(//) 연산자를 배우고 나서 "이걸 어디에 써먹지?"라고 생각할 때, 흥미를 유발하고 유용성을 보여줄 수 있는 상황들을 알려주는 것은 매우 중요합니다. 아래는 %
와 //
를 활용하는 유용하고 흔한 상황들입니다. 책에 예제 코드와 함께 설명하면 좋을 것 같습니다.
1. 짝수/홀수 판별 (가장 기본적이고 흔한 예시)
상황: 어떤 숫자가 짝수인지 홀수인지 알아내야 할 때.
활용: 숫자를 2로 나눈 나머지(%)가 0이면 짝수, 1이면 홀수입니다.
예시:
num = 17 if num % 2 == 0: print(f"{num}은(는) 짝수입니다.") else: print(f"{num}은(는) 홀수입니다.") # 출력: 17은(는) 홀수입니다. num = 10 if num % 2 == 0: print(f"{num}은(는) 짝수입니다.") # 출력: 10은(는) 짝수입니다. else: print(f"{num}은(는) 홀수입니다.")
2. 특정 배수 판별
상황: 어떤 숫자가 3의 배수인지, 5의 배수인지 등 특정 숫자의 배수인지 확인해야 할 때.
활용: 숫자를 특정 수로 나눈 나머지(%)가 0이면 그 수의 배수입니다.
예시: (3의 배수 판별)
num = 21 if num % 3 == 0: print(f"{num}은(는) 3의 배수입니다.") # 출력: 21은(는) 3의 배수입니다. else: print(f"{num}은(는) 3의 배수가 아닙니다.")
3. 단위 변환 (예: 초를 분/초로, 센티미터를 미터/센티미터로)
상황: 작은 단위를 큰 단위와 작은 단위의 조합으로 바꿔야 할 때 (예: 130초를 2분 10초로).
활용:
- 전체 시간을 60으로 나눈 몫(//)은 '분'이 됩니다.
- 전체 시간을 60으로 나눈 나머지(%)는 남은 '초'가 됩니다.
예시: (초를 분/초로 변환)
total_seconds = 130 minutes = total_seconds // 60 # 130 // 60 = 2 (몫) seconds = total_seconds % 60 # 130 % 60 = 10 (나머지) print(f"{total_seconds}초는 {minutes}분 {seconds}초입니다.") # 출력: 130초는 2분 10초입니다.
다른 예: 총 cm를 m와 cm로 변환 (
// 100
과% 100
사용)
4. 물건 나누어 담기 (몫과 나머지 동시 활용)
상황: 사탕 50개를 한 상자에 8개씩 담을 때, 몇 상자가 나오고 몇 개가 남는지 계산해야 할 때.
활용:
- 전체 개수를 상자당 개수로 나눈 몫(//)은 포장 가능한 상자의 수입니다.
- 전체 개수를 상자당 개수로 나눈 나머지(%)는 포장하고 남은 개수입니다.
예시:
total_candies = 50 box_capacity = 8 num_boxes = total_candies // box_capacity # 50 // 8 = 6 (몫) remaining_candies = total_candies % box_capacity # 50 % 8 = 2 (나머지) print(f"사탕 {total_candies}개를 한 상자에 {box_capacity}개씩 담으면,") print(f"{num_boxes} 상자가 나오고 {remaining_candies}개가 남습니다.") # 출력: # 사탕 50개를 한 상자에 8개씩 담으면, # 6 상자가 나오고 2개가 남습니다.
5. 주기적인 패턴 만들기 (요일 계산, 리스트 순환 등)
상황: 요일처럼 반복되는 패턴이나, 리스트의 항목을 순서대로 계속 반복해서 접근해야 할 때.
활용: 인덱스나 카운터를 주기의 길이로 나눈 나머지(%)를 사용하면 0부터 (주기 길이 - 1)까지의 값을 얻어 순환시킬 수 있습니다.
예시: (요일 계산: 오늘이 수요일(2)일 때 10일 뒤는 무슨 요일?)
# 요일: 일(0), 월(1), 화(2), 수(3), 목(4), 금(5), 토(6) today = 3 # 수요일 days_later = 10 target_day_index = (today + days_later) % 7 # (3 + 10) % 7 = 13 % 7 = 6 days_of_week = ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"] print(f"오늘이 {days_of_week[today]}일 때, {days_later}일 뒤는 {days_of_week[target_day_index]}입니다.") # 출력: 오늘이 수요일일 때, 10일 뒤는 토요일입니다.
다른 예: 리스트의 색깔을 순서대로 반복해서 사용하기
colors = ["빨강", "주황", "노랑", "초록", "파랑"] for i in range(10): color_index = i % len(colors) # i를 리스트 길이(5)로 나눈 나머지 (0, 1, 2, 3, 4 반복) print(f"{i+1}번째: {colors[color_index]}")
6. 자릿수 분리 (숫자 다루기)
상황: 숫자의 각 자릿수를 따로 분리해서 사용해야 할 때 (예: 123 -> 1, 2, 3).
활용:
- 숫자를 10으로 나눈 나머지(%)는 가장 마지막 자릿수(일의 자리)입니다.
- 숫자를 10으로 나눈 몫(//)은 마지막 자릿수를 제거한 나머지 숫자입니다. 이를 반복하면 모든 자릿수를 얻을 수 있습니다.
예시: (123의 각 자릿수 출력)
number = 123 print(f"숫자 {number}의 각 자릿수:") # 마지막 자릿수 (일의 자리) digit = number % 10 print(digit) # 출력: 3 number = number // 10 # number는 12가 됨 # 다음 자릿수 (십의 자리) digit = number % 10 print(digit) # 출력: 2 number = number // 10 # number는 1이 됨 # 다음 자릿수 (백의 자리) digit = number % 10 print(digit) # 출력: 1 number = number // 10 # number는 0이 됨
- (참고: 반복문(while)을 사용하면 더 간결하게 구현 가능)
7. 2차원 배열/격자 인덱스 계산
상황: 게임 맵이나 표처럼 2차원 격자 데이터를 1차원 리스트로 관리할 때, 특정 칸의 행(row)과 열(column) 번호를 계산해야 할 때.
활용: (격자의 가로 길이를
width
라고 할 때)- 1차원 인덱스를
width
로 나눈 몫(//)은 행(row) 번호가 됩니다. - 1차원 인덱스를
width
로 나눈 나머지(%)는 열(column) 번호가 됩니다.
- 1차원 인덱스를
예시: (가로 5칸, 세로 무한대의 격자에서 13번째 칸(인덱스 12)의 위치)
index = 12 # 13번째 칸 (0부터 시작) width = 5 # 격자의 가로 길이 row = index // width # 12 // 5 = 2 col = index % width # 12 % 5 = 2 print(f"인덱스 {index}는 {row}행 {col}열에 해당합니다.") # 출력: 인덱스 12는 2행 2열에 해당합니다. (0행 0열부터 시작 기준)
이런 예시들을 통해 고등학생들이 %
와 //
연산자가 단순히 수학적인 연산을 넘어, 프로그래밍에서 다양한 문제를 해결하는 데 유용하게 쓰인다는 것을 체감할 수 있도록 도와줄 수 있을 것입니다. 특히 단위 변환, 물건 나누기, 주기적인 패턴 등은 실생활과 관련된 예시라 이해하기 쉬울 것입니다.
COMMENTS