Part 1: 수학 공부를 위한 파이썬 첫걸음
Chapter 2: 컴퓨터에게 기억시키기 (Making the Computer Remember - Variables and Data Types)
학습 목표
- 변수를 사용하여 데이터(값)를 저장하고 재사용할 수 있다.
- 파이썬의 기본적인 데이터 타입인 정수(
int
), 실수(float
), 문자열(str
)을 구분하고 사용할 수 있다. type()
함수를 사용하여 변수에 저장된 값의 데이터 타입을 확인할 수 있다.input()
함수를 사용하여 사용자로부터 데이터를 입력받고, 이를 적절한 타입으로 변환하여 사용할 수 있다.
1. 데이터에 이름표 붙이기: 변수 (Variable)
수학 문제를 풀 때, 원주율을 π라고 쓰거나, 어떤 모르는 값을 x라고 두는 것처럼, 프로그래밍에서도 값에 이름을 붙여 저장하고 사용할 수 있습니다. 이렇게 값에 이름을 붙인 것을 변수(Variable)라고 합니다. 변수를 사용하면 값을 반복해서 입력할 필요가 없고, 코드의 의미를 더 명확하게 만들 수 있습니다. 마치 데이터 상자에 이름표를 붙여두는 것과 같습니다.
파이썬에서 변수를 만들고 값을 저장하는 방법은 매우 간단합니다. =
기호(할당 연산자)를 사용합니다.
변수이름 = 값
# radius 라는 이름의 변수에 5 라는 값을 저장
radius = 5
# pi 라는 이름의 변수에 3.14159 값을 저장
pi = 3.14159
# name 이라는 이름의 변수에 "Alice" 라는 문자열 값을 저장
name = "Alice"
# 변수에 저장된 값 출력하기
print(radius)
print(pi)
print(name)
실행 결과:
5
3.14159
Alice
변수 이름 규칙:
- 영문자, 숫자, 밑줄(
_
)을 사용할 수 있습니다. - 숫자로 시작할 수 없습니다. (예:
1st_num
은 안됨) - 파이썬 예약어(키워드:
if
,for
,while
,class
등 파이썬 문법에 사용되는 단어)는 변수 이름으로 사용할 수 없습니다. - 대소문자를 구분합니다. (
my_variable
과My_Variable
은 다른 변수입니다.) - 변수 이름은 그 변수가 담고 있는 데이터의 의미를 잘 나타내도록 짓는 것이 좋습니다. (예:
r
보다는radius
)
2. 값의 종류 구분하기: 데이터 타입 (Data Types)
변수에는 다양한 종류의 값을 저장할 수 있습니다. 파이썬은 값의 종류, 즉 데이터 타입(Data Type)을 중요하게 생각합니다. 수학에서도 정수, 유리수, 실수를 구분하듯이 말이죠. 자주 사용하는 기본 데이터 타입은 다음과 같습니다.
int
(Integer): 정수. 소수점 이하가 없는 숫자입니다. (예:17
,0
,-100
)float
(Floating-point number): 실수. 소수점 이하가 있는 숫자입니다. (예:3.14
,-2.5
,1.0
)str
(String): 문자열. 글자들의 나열입니다. 작은따옴표('
)나 큰따옴표("
)로 감싸서 표현합니다. (예:"Hello"
,'Python'
,"123"
) 주의: 따옴표 안의 숫자는 문자열로 취급됩니다.
type()
함수로 데이터 타입 확인하기
변수에 어떤 종류의 값이 들어있는지 확인하려면 type()
함수를 사용합니다.
age = 17 # 정수 (int)
height = 175.5 # 실수 (float)
school = "코딩고" # 문자열 (str)
score = "100" # 문자열 (str) - 따옴표 안에 있음!
print( type(age) ) # 출력: <class 'int'>
print( type(height) ) # 출력: <class 'float'>
print( type(school) ) # 출력: <class 'str'>
print( type(score) ) # 출력: <class 'str'>
데이터 타입을 아는 것은 중요합니다. 왜냐하면 타입에 따라 할 수 있는 연산이 다르기 때문입니다. 예를 들어, 숫자끼리는 덧셈이 가능하지만, 숫자와 문자열을 바로 더할 수는 없습니다 (TypeError 발생).
3. 변수를 활용한 계산
변수를 사용하면 계산 과정을 더 명확하게 표현하고, 값을 변경하여 재계산하기도 쉽습니다.
# 원의 넓이 계산
radius = 5
pi = 3.14159
circle_area = pi * radius**2 # 변수를 이용하여 계산
print("반지름:", radius)
print("원주율:", pi)
print("원의 넓이:", circle_area)
print("-" * 20) # 구분선 출력
# 반지름 변경 후 다시 계산
radius = 10
circle_area = pi * radius**2
print("변경된 반지름:", radius)
print("변경된 원의 넓이:", circle_area)
실행 결과:
반지름: 5
원주율: 3.14159
원의 넓이: 78.53975
--------------------
변경된 반지름: 10
변경된 원의 넓이: 314.159
4. 사용자에게 물어보기: input()
함수
프로그램 실행 중에 사용자로부터 직접 값을 입력받고 싶을 때는 input()
함수를 사용합니다. input()
함수는 사용자에게 메시지를 보여주고, 사용자가 입력한 값을 문자열(str) 타입으로 반환합니다.
user_name = input("이름을 입력하세요: ")
print("안녕하세요,", user_name, "님!")
age_str = input("나이를 입력하세요: ")
print("입력하신 나이는", age_str, "세 입니다.")
print("나이의 데이터 타입:", type(age_str)) # str 타입임을 확인!
주의: input()
으로 받은 값은 항상 문자열(str) 입니다. 만약 입력받은 값을 숫자로 계산하고 싶다면, 적절한 타입으로 변환해야 합니다.
타입 변환 (Type Conversion):
int(문자열 또는 실수)
: 문자열이나 실수를 정수로 변환합니다.float(문자열 또는 정수)
: 문자열이나 정수를 실수로 변환합니다.str(숫자)
: 숫자를 문자열로 변환합니다.
num1_str = input("첫 번째 숫자를 입력하세요: ")
num2_str = input("두 번째 숫자를 입력하세요: ")
# 문자열 상태로 더하면? -> 문자열 연결이 됨! (예: "10" + "20" -> "1020")
print("문자열 덧셈 결과:", num1_str + num2_str)
# 숫자로 변환하여 더하기
num1 = int(num1_str) # 정수로 변환
num2 = int(num2_str) # 정수로 변환
sum_result = num1 + num2
print("숫자 덧셈 결과:", sum_result)
print("덧셈 결과의 타입:", type(sum_result)) # int 타입
# 실수가 입력될 가능성이 있다면 float() 사용
base_str = input("삼각형의 밑변 길이를 입력하세요: ")
height_str = input("삼각형의 높이를 입력하세요: ")
base = float(base_str) # 실수로 변환
height = float(height_str) # 실수로 변환
triangle_area = 0.5 * base * height
print("삼각형의 넓이:", triangle_area)
직접 해보기 (Follow Along Exercise)
- 자신의 이름과 좋아하는 과목을 각각
my_name
,fav_subject
변수에 저장하세요. - 두 변수를 이용하여 "제 이름은 [이름]이고, 좋아하는 과목은 [과목]입니다." 형식으로 문장을 만들어 출력하세요. (
print()
함수는 여러 값을 콤마(,)로 구분하여 전달하면 띄어쓰기로 연결해 출력합니다.) - 사용자에게 태어난 연도를 입력받아,
int()
로 변환한 후, 올해 연도(예: 2024)에서 빼서 만 나이를 계산하여 출력하는 코드를 작성해보세요.
# 직접 코드를 작성하고 실행해보세요!
my_name = "김파이"
fav_subject = "수학"
print("제 이름은", my_name, "이고, 좋아하는 과목은", fav_subject, "입니다.")
birth_year_str = input("태어난 연도를 입력하세요: ")
birth_year = int(birth_year_str)
current_year = 2024 # 이 부분은 필요에 따라 변경
age = current_year - birth_year
print("당신의 만 나이는", age, "세 입니다.")
연습 문제
- 두 변수
a
와b
에 각각 10과 20을 저장한 후, 두 변수의 값을 서로 바꾸어a
에는 20,b
에는 10이 저장되도록 하는 파이썬 코드를 작성하세요. (힌트: 임시 변수를 사용하거나, 파이썬의 특별한 방식을 찾아보세요:a, b = b, a
) - 사용자로부터 원의 반지름을 입력받아 (실수로 변환), 그 원의 둘레(
2 * π * r
)와 넓이(π * r²
)를 계산하여 출력하는 프로그램을 작성하세요. (π 값은 3.14159 또는math.pi
사용 -import math
필요) - 사용자로부터 국어, 영어, 수학 점수를 각각 입력받아 (정수로 변환), 세 과목의 총점과 평균 점수를 계산하여 출력하는 프로그램을 작성하세요. (평균은 실수가 나올 수 있습니다.)
두 변수의 값 서로 바꾸기
답글삭제두 변수 a와 b에 각각 10과 20을 저장한 후, 두 변수의 값을 서로 바꾸는 파이썬 코드는 다음과 같이 여러 방법으로 작성할 수 있습니다.
방법 1: 임시 변수 사용 (가장 일반적인 방법)
다른 언어에서도 흔히 사용하는 방식으로, 값을 잠시 저장해 둘 임시 변수(예: temp)를 활용합니다.
# 초기값 설정
a = 10
b = 20
print(f"바꾸기 전: a = {a}, b = {b}")
# 임시 변수(temp)를 이용한 값 교환 temp = a
# a의 값(10)을 temp에 잠시 저장 a = b
# b의 값(20)을 a에 저장 (이제 a는 20) b = temp
# temp에 저장해둔 원래 a의 값(10)을 b에 저장 (이제 b는 10)
# 결과 확인
print(f"바꾼 후: a = {a}, b = {b}")
실행 결과:
바꾸기 전: a = 10, b = 20
바꾼 후: a = 20, b = 10
방법 2: 파이썬의 특별한 방식 사용 (튜플 패킹/언패킹)
파이썬에서는 여러 값을 동시에 할당하는 기능을 이용하여 훨씬 간결하게 변수 값을 교환할 수 있습니다. 이를 '튜플 패킹/언패킹'이라고 부르기도 합니다.
# 초기값 설정
a = 10 b = 20
print(f"바꾸기 전: a = {a}, b = {b}")
# 파이썬의 동시 할당 기능을 이용한 값 교환 a, b = b, a
# 오른쪽에 있는 b와 a의 값을 동시에 왼쪽의 a와 b에 할당
# 결과 확인
print(f"바꾼 후: a = {a}, b = {b}")
실행 결과:
바꾸기 전: a = 10, b = 20
바꾼 후: a = 20, b = 10
설명:
방법 1은 논리적으로 이해하기 쉽고 대부분의 프로그래밍 언어에서 통용되는 기본적인 방법입니다.
방법 2는 파이썬의 간결하고 강력한 특징을 보여주는 대표적인 예시입니다. 코드가 짧아지고 임시 변수를 만들 필요가 없어 더 효율적입니다. 파이썬에서는 이 방법을 사용하는 것이 일반적입니다.
책에는 두 가지 방법을 모두 소개하고, 파이썬에서는 두 번째 방법이 더 선호된다는 점을 설명해주면 학생들이 파이썬의 특징을 이해하는 데 도움이 될 것입니다.
## 두 변수의 값 서로 바꾸기
답글삭제두 변수 `a`와 `b`에 각각 10과 20을 저장한 후, 두 변수의 값을 서로 바꾸는 파이썬 코드는 다음과 같이 여러 방법으로 작성할 수 있습니다.
**방법 1: 임시 변수 사용 (가장 일반적인 방법)**
다른 언어에서도 흔히 사용하는 방식으로, 값을 잠시 저장해 둘 임시 변수(예: `temp`)를 활용합니다.
```python
# 초기값 설정
a = 10
b = 20
print(f"바꾸기 전: a = {a}, b = {b}")
# 임시 변수(temp)를 이용한 값 교환
temp = a # a의 값(10)을 temp에 잠시 저장
a = b # b의 값(20)을 a에 저장 (이제 a는 20)
b = temp # temp에 저장해둔 원래 a의 값(10)을 b에 저장 (이제 b는 10)
# 결과 확인
print(f"바꾼 후: a = {a}, b = {b}")
```
**실행 결과:**
```
바꾸기 전: a = 10, b = 20
바꾼 후: a = 20, b = 10
```
**방법 2: 파이썬의 특별한 방식 사용 (튜플 패킹/언패킹)**
파이썬에서는 여러 값을 동시에 할당하는 기능을 이용하여 훨씬 간결하게 변수 값을 교환할 수 있습니다. 이를 '튜플 패킹/언패킹'이라고 부르기도 합니다.
```python
# 초기값 설정
a = 10
b = 20
print(f"바꾸기 전: a = {a}, b = {b}")
# 파이썬의 동시 할당 기능을 이용한 값 교환
a, b = b, a # 오른쪽에 있는 b와 a의 값을 동시에 왼쪽의 a와 b에 할당
# 결과 확인
print(f"바꾼 후: a = {a}, b = {b}")
```
**실행 결과:**
```
바꾸기 전: a = 10, b = 20
바꾼 후: a = 20, b = 10
```
**설명:**
* **방법 1**은 논리적으로 이해하기 쉽고 대부분의 프로그래밍 언어에서 통용되는 기본적인 방법입니다.
* **방법 2**는 파이썬의 간결하고 강력한 특징을 보여주는 대표적인 예시입니다. 코드가 짧아지고 임시 변수를 만들 필요가 없어 더 효율적입니다. 파이썬에서는 이 방법을 사용하는 것이 일반적입니다.
책에는 두 가지 방법을 모두 소개하고, 파이썬에서는 두 번째 방법이 더 선호된다는 점을 설명해주면 학생들이 파이썬의 특징을 이해하는 데 도움이 될 것입니다.
## 원의 둘레와 넓이 계산 프로그램
답글삭제사용자로부터 원의 반지름을 입력받아 원의 둘레와 넓이를 계산하고 출력하는 파이썬 코드입니다. 두 가지 방법(math 모듈 사용 / 직접 π 값 사용)으로 작성할 수 있습니다.
**방법 1: `math` 모듈의 `pi` 사용 (권장)**
`math` 모듈을 사용하면 더 정확한 π 값을 편리하게 사용할 수 있습니다.
```python
import math # 수학 관련 함수 및 상수를 사용하기 위해 math 모듈을 가져옵니다.
# 1. 사용자로부터 반지름 입력받기 (문자열로 입력됨)
radius_str = input("원의 반지름을 입력하세요: ")
# 2. 입력받은 문자열을 실수(float)로 변환
radius = float(radius_str)
# 3. math.pi를 사용하여 원주율(π) 값 사용
pi_value = math.pi
# 4. 원의 둘레 계산 (2 * π * r)
circumference = 2 * pi_value * radius
# 5. 원의 넓이 계산 (π * r²)
# r²은 r * r 또는 r ** 2 로 계산할 수 있습니다.
area = pi_value * (radius ** 2)
# 6. 결과 출력 (f-string을 사용하여 깔끔하게 출력)
print(f"\n반지름: {radius}")
print(f"원의 둘레: {circumference}")
print(f"원의 넓이: {area}")
```
**방법 2: π 값을 직접 지정 (3.14159 사용)**
`math` 모듈을 사용하지 않고 π의 근사값을 직접 변수에 저장하여 사용할 수도 있습니다.
```python
# 1. 사용자로부터 반지름 입력받기
radius_str = input("원의 반지름을 입력하세요: ")
# 2. 입력받은 문자열을 실수(float)로 변환
radius = float(radius_str)
# 3. 원주율(π) 값 직접 지정
pi_value = 3.14159
# 4. 원의 둘레 계산 (2 * π * r)
circumference = 2 * pi_value * radius
# 5. 원의 넓이 계산 (π * r²)
area = pi_value * (radius ** 2)
# 6. 결과 출력
print(f"\n반지름: {radius}")
print(f"원의 둘레: {circumference}")
print(f"원의 넓이: {area}")
```
**코드 설명:**
1. **`import math`**: (방법 1) 수학 계산에 필요한 도구(함수, 상수)가 들어있는 `math` 모듈을 불러옵니다.
2. **`input("원의 반지름을 입력하세요: ")`**: 사용자에게 메시지를 보여주고 키보드로 입력받습니다. 입력된 값은 항상 **문자열** 형태입니다.
3. **`float()`**: `input()`으로 받은 문자열을 계산에 사용할 수 있도록 **실수(소수점이 있는 숫자)** 형태로 변환합니다.
4. **`pi_value = math.pi`** 또는 **`pi_value = 3.14159`**: 원주율 값을 `pi_value` 변수에 저장합니다. `math.pi`가 더 정확합니다.
5. **`circumference = 2 * pi_value * radius`**: 원의 둘레를 계산하는 공식을 코드로 구현합니다.
6. **`area = pi_value * (radius ** 2)`**: 원의 넓이를 계산하는 공식을 코드로 구현합니다. `** 2`는 제곱을 의미합니다.
7. **`print(f"...")`**: f-string 문법을 사용하여 변수(`radius`, `circumference`, `area`)의 값을 문자열 안에 넣어 깔끔하게 출력합니다. `\n`은 줄바꿈을 의미합니다.
이 예제들을 통해 학생들은 사용자 입력(`input`), 자료형 변환(`float`), 모듈 사용(`import math`), 변수 활용, 기본적인 수학 연산, 그리고 결과 출력(`print`와 f-string) 등 파이썬 프로그래밍의 기초적인 요소들을 배울 수 있습니다.
## 세 과목 총점 및 평균 계산 프로그램
답글삭제사용자로부터 국어, 영어, 수학 점수를 각각 입력받아 총점과 평균 점수를 계산하여 출력하는 파이썬 프로그램입니다.
```python
# 1. 사용자로부터 각 과목 점수 입력받기
# input() 함수는 문자열을 반환하므로, int()를 사용하여 정수로 변환합니다.
korean_score_str = input("국어 점수를 입력하세요: ")
korean_score = int(korean_score_str)
english_score_str = input("영어 점수를 입력하세요: ")
english_score = int(english_score_str)
math_score_str = input("수학 점수를 입력하세요: ")
math_score = int(math_score_str)
# (더 간결한 방법) 입력과 변환을 한 줄에 처리할 수도 있습니다.
# korean_score = int(input("국어 점수를 입력하세요: "))
# english_score = int(input("영어 점수를 입력하세요: "))
# math_score = int(input("수학 점수를 입력하세요: "))
# 2. 세 과목의 총점 계산
total_score = korean_score + english_score + math_score
# 3. 평균 점수 계산
# 총점을 과목 수(3)으로 나눕니다.
# 파이썬에서 나눗셈(/) 결과는 항상 실수(float)입니다.
average_score = total_score / 3
# 4. 결과 출력
# f-string을 사용하여 변수 값을 포함한 문자열을 깔끔하게 출력합니다.
print("\n--- 점수 결과 ---")
print(f"입력된 점수: 국어={korean_score}, 영어={english_score}, 수학={math_score}")
print(f"총점: {total_score}")
print(f"평균: {average_score}") # 평균 점수는 소수점 이하까지 표시될 수 있습니다.
```
**코드 설명:**
1. **`input("메시지")`**: 사용자에게 "메시지"를 보여주고 키보드로 입력을 기다립니다. 입력된 내용은 **문자열**로 취급됩니다.
2. **`int()`**: 문자열 형태의 숫자를 실제 **정수** 숫자로 변환해줍니다. 점수는 보통 정수이므로 `int()`를 사용합니다. (만약 소수점 입력도 가능하다면 `float()`를 사용해야 합니다.)
3. **`total_score = korean_score + english_score + math_score`**: 세 과목의 점수를 더하여 총점을 계산하고 `total_score` 변수에 저장합니다.
4. **`average_score = total_score / 3`**: 계산된 총점을 과목 수인 3으로 나누어 평균 점수를 계산하고 `average_score` 변수에 저장합니다. 나눗셈 연산자 `/`는 결과가 정수로 나누어 떨어지더라도 항상 실수(float)형태로 결과를 반환합니다. 예를 들어 총점이 270이면 평균은 90.0 이 됩니다.
5. **`print(f"...")`**: f-string 문법을 사용하여 계산된 총점과 평균 점수를 포함한 결과를 화면에 보기 좋게 출력합니다. `\n`은 줄바꿈을 의미합니다.
이 예제를 통해 학생들은 사용자로부터 여러 값을 입력받고, 적절한 자료형(정수)으로 변환하며, 사칙연산(덧셈, 나눗셈)을 수행하고, 그 결과를 형식에 맞춰 출력하는 기본적인 프로그래밍 흐름을 연습할 수 있습니다.