2회차: 연산자 & 문자열

2회차: 연산자 & 문자열

선수 학습: 1회차 (변수와 자료형)


학습 목표

  • 산술(Arithmetic) 연산자를 사용할 수 있다.
  • 비교(Comparison) 연산자와 논리(Logical) 연산자를 이해한다.
  • 문자열을 다양한 방법으로 조작할 수 있다.
  • f-string(에프 스트링)을 사용하여 깔끔하게 출력할 수 있다.

2.1. 산술(Arithmetic) 연산자

2.1.1. 연산자란?

연산자(Operator)는 계산을 수행하는 기호이다. 수학에서 +, -, ×, ÷ 를 사용하듯이, 파이썬에서도 비슷한 기호들을 사용한다.

2.1.2. 기본 연산자 종류

연산자 의미 예시 결과
+ 더하기 3 + 2 5
- 빼기 3 - 2 1
* 곱하기 3 * 2 6
/ 나누기 7 / 2 3.5
// 몫 (나눗셈의 정수 부분) 7 // 2 3
% 나머지 7 % 2 1
** 거듭제곱 2 ** 3 8

Note: / 는 항상 실수(float)를 반환한다. 4 / 2 의 결과는 2 가 아닌 2.0 이다. 정수 결과가 필요하면 // 를 사용한다.

2.1.3. 기본 연산 예시

a = 10
b = 3

print("더하기:", a + b)
print("빼기:", a - b)
print("곱하기:", a * b)
print("나누기:", a / b)
print("몫:", a // b)
print("나머지:", a % b)
print("거듭제곱:", a ** b)
설명
1~2 두 정수 변수 a, b 를 선언한다.
4 10 + 3 = 13 을 출력한다.
5 10 - 3 = 7 을 출력한다.
6 10 * 3 = 30 을 출력한다.
7 10 / 3 = 3.333... 을 출력한다. 결과는 실수이다.
8 10 // 3 = 3 을 출력한다. 소수점 아래는 버린다.
9 10 % 3 = 1 을 출력한다. 10을 3으로 나누면 몫 3, 나머지 1이다.
10 10 ** 3 = 1000 을 출력한다. 10의 3제곱이다.

실행 결과

더하기: 13
빼기: 7
곱하기: 30
나누기: 3.3333333333333335
몫: 3
나머지: 1
거듭제곱: 1000

2.1.4. //% 를 실생활에서 이해하기

예를 들어, 사탕 13개를 4명에게 나눠줄 때를 생각한다.

  • 13 // 4 = 3 → 한 사람당 3개씩 받는다.
  • 13 % 4 = 1 → 나눠주고 남은 사탕이 1개이다.
candy = 13
people = 4

each = candy // people
left = candy % people

print("한 명당:", each, "개")
print("남은 개수:", left, "개")
설명
1~2 총 사탕 개수와 사람 수를 변수에 저장한다.
4 // 연산자로 한 명당 받을 사탕 수(몫)를 계산한다.
5 % 연산자로 나눠주고 남은 사탕 수(나머지)를 계산한다.
7~8 계산 결과를 출력한다.

실행 결과

한 명당: 3 개
남은 개수: 1 개

2.1.5. 복합 대입 연산자

변수에 연산을 적용하고 그 결과를 같은 변수에 저장하는 작업을 짧게 쓸 수 있다.

긴 표현 짧은 표현 의미
x = x + 5 x += 5 x에 5를 더해서 저장
x = x - 3 x -= 3 x에서 3을 빼서 저장
x = x * 2 x *= 2 x에 2를 곱해서 저장
x = x / 4 x /= 4 x를 4로 나눠서 저장
hp = 100
print("초기 HP:", hp)

hp -= 30
print("데미지 30 받은 후:", hp)

hp += 20
print("포션 사용 후:", hp)
설명
1 초기 체력을 100 으로 설정한다.
4 hp -= 30hp = hp - 30 과 같다. 체력이 100 - 30 = 70 이 된다.
7 hp += 20hp = hp + 20 과 같다. 체력이 70 + 20 = 90 이 된다.

실행 결과

초기 HP: 100
데미지 30 받은 후: 70
포션 사용 후: 90

2.1.6. 예제: RPG 데미지 계산기

atk = 50
def_val = 20
bonus = 1.5

dmg = (atk - def_val) * bonus
print("최종 데미지:", dmg)
설명
1 공격력(atk)을 50 으로 설정한다.
2 방어력(def_val)을 20 으로 설정한다.
3 보너스(bonus) 배율을 1.5 로 설정한다.
5 괄호 안을 먼저 계산한다. 50 - 20 = 30. 그 다음 30 * 1.5 = 45.0 이다. 계산 순서는 수학과 동일하다.
6 최종 데미지를 출력한다.

실행 결과

최종 데미지: 45.0

2.2. 비교(Comparison) 연산자

2.2.1. 비교 연산자란?

비교 연산자는 두 값을 비교하여 결과로 True (참) 또는 False (거짓)을 반환한다. 3회차에서 배울 조건문과 함께 자주 사용된다.

연산자 의미 예시 결과
== 같다 3 == 3 True
!= 다르다 3 != 4 True
> 크다 5 > 3 True
< 작다 5 < 3 False
>= 크거나 같다 3 >= 3 True
<= 작거나 같다 2 <= 3 True

Warning: = 는 "저장하라"는 의미이고, == 는 "같은지 비교하라"는 의미이다. 헷갈리지 않도록 주의한다.

2.2.2. 비교 연산자 사용 예시

score = 75

print(score == 100)
print(score != 100)
print(score >= 60)
print(score < 50)
설명
1 변수 score75 를 저장한다.
3 75 == 100 → 같지 않으므로 False 를 출력한다.
4 75 != 100 → 다르므로 True 를 출력한다.
5 75 >= 60 → 75는 60보다 크므로 True 를 출력한다.
6 75 < 50 → 75는 50보다 크므로 False 를 출력한다.

실행 결과

False
True
True
False

2.3. 논리(Logical) 연산자

2.3.1. 논리 연산자란?

논리 연산자는 두 개 이상의 조건을 조합할 때 사용한다.

연산자 의미 예시 결과
and 둘 다 True 여야 True True and False False
or 하나라도 True 이면 True True or False True
not TrueFalse 반전 not True False

2.3.2. and 연산자

두 조건이 모두 참(True)일 때만 결과가 True 이다.

hp = 80
mp = 30

can_attack = hp > 0 and mp >= 10
print("공격 가능 여부:", can_attack)
설명
1~2 체력과 마나를 설정한다.
4 hp > 0True, mp >= 10True 이다. 둘 다 True 이므로 결과는 True 이다.
5 True 를 출력한다.

실행 결과

공격 가능 여부: True

2.3.3. or 연산자

두 조건 중 하나라도 참(True)이면 결과가 True 이다.

has_sword = False
has_staff = True

can_fight = has_sword or has_staff
print("전투 가능 여부:", can_fight)
설명
1~2 검 보유(False)와 지팡이 보유(True)를 설정한다.
4 False or True → 하나라도 참이면 결과는 True 이다.
5 True 를 출력한다.

2.3.4. not 연산자

notTrueFalse 로, FalseTrue 로 반전시킨다.

is_game_over = False

print("게임 계속 가능:", not is_game_over)
설명
1 게임 오버 상태를 False 로 설정한다.
3 not FalseTrue 이다. 게임이 아직 끝나지 않았으므로 계속 플레이할 수 있다.

실행 결과

게임 계속 가능: True

2.4. 문자열(String) 다루기

2.4.1. 문자열 연결 — + 연산자

두 문자열을 + 로 이어 붙일 수 있다.

first = "파이"
second = "썬"
full = first + second

print(full)
print("안녕" + " " + "세상!")
설명
1~2 두 문자열 변수를 선언한다.
3 + 로 두 문자열을 이어 붙여 "파이썬" 을 만든다.
4 결합된 문자열을 출력한다.
5 세 문자열을 이어 붙인다. 중간에 공백 " " 을 넣었다.

실행 결과

파이썬
안녕 세상!

Warning: + 로는 문자열끼리만 연결할 수 있다. 문자열과 숫자를 + 로 연결하면 오류가 발생한다. 숫자를 문자열로 연결하려면 str() 로 변환해야 한다.

name = "홍길동"
score = 85

# 오류 발생 예시 (실행하지 말 것)
# print(name + "의 점수는 " + score)   ← 오류!

# 올바른 방법
print(name + "의 점수는 " + str(score))
설명
6 주석(#)으로 시작하는 줄은 실행되지 않는다. 설명을 적을 때 사용한다.
9 str(score) 로 숫자 85 를 문자열 "85" 로 변환한 뒤 연결한다.

실행 결과

홍길동의 점수는 85

2.4.2. 문자열 반복 — * 연산자

문자열에 * 와 정수를 사용하면 그 문자열이 반복된다.

line = "-" * 20
star = "★" * 5

print(line)
print(star)
print("박수" * 3)
설명
1 "-" 를 20번 반복한 문자열을 line 에 저장한다.
2 "★" 를 5번 반복한 문자열을 star 에 저장한다.
4~6 각 결과를 출력한다.

실행 결과

--------------------
★★★★★
박수박수박수

2.4.3. 문자열 길이 — len() 함수

len() 함수는 문자열에 포함된 글자의 수를 반환한다.

word = "파이썬"
msg = "Hello, Python!"

print(len(word))
print(len(msg))
설명
1 한글 3글자 문자열을 저장한다.
2 영문, 기호, 공백이 포함된 문자열을 저장한다.
4 "파이썬" 은 3글자이므로 3 을 출력한다.
5 "Hello, Python!" 은 공백과 기호 포함 14글자이므로 14 를 출력한다.

실행 결과

3
14

2.4.4. 문자열 인덱싱 — 특정 글자 꺼내기

문자열의 각 글자에는 순서를 나타내는 번호(인덱스)가 있다. 인덱스는 0부터 시작한다.

문자열:  P  y  t  h  o  n
인덱스:  0  1  2  3  4  5
word = "Python"

print(word[0])
print(word[1])
print(word[5])
print(word[-1])
설명
1 문자열 "Python" 을 저장한다.
3 word[0] 은 첫 번째 글자 P 이다.
4 word[1] 은 두 번째 글자 y 이다.
5 word[5] 는 여섯 번째 글자 n 이다.
6 word[-1] 은 뒤에서 첫 번째 글자 n 이다. 음수 인덱스는 뒤에서부터 센다.

실행 결과

P
y
n
n

2.4.5. 문자열 슬라이싱 — 일부분 잘라내기

[시작:끝] 형식으로 문자열의 일부분을 잘라낼 수 있다. 끝 인덱스의 글자는 포함되지 않는다.

word = "Hello, Python!"

print(word[0:5])
print(word[7:13])
print(word[:5])
print(word[7:])
설명
3 word[0:5] 는 인덱스 0~4까지, 즉 "Hello" 이다. 5는 포함되지 않는다.
4 word[7:13] 은 인덱스 7~12까지, 즉 "Python" 이다.
5 word[:5] 는 처음부터 인덱스 4까지, 즉 "Hello" 이다. 시작을 생략하면 0부터 시작한다.
6 word[7:] 는 인덱스 7부터 끝까지, 즉 "Python!" 이다. 끝을 생략하면 마지막까지이다.

실행 결과

Hello
Python
Hello
Python!

2.4.6. 주요 문자열 메서드(Method)

메서드(Method)는 특정 자료형에서 사용할 수 있는 함수이다. 변수.메서드명() 형식으로 사용한다.

s = "  Hello, Python!  "

print(s.strip())
print(s.lower())
print(s.upper())
print(s.replace("Python", "파이썬"))
print(s.count("l"))
print(s.find("Python"))
설명
3 strip() 메서드로 문자열 앞뒤의 공백을 모두 제거한다.
4 lower() 메서드로 모든 영문자를 소문자로 바꾼다.
5 upper() 메서드로 모든 영문자를 대문자로 바꾼다.
6 replace("Python", "파이썬") 메서드로 "Python""파이썬" 으로 교체한다.
7 count("l") 메서드로 문자열 안에 "l" 이 몇 번 나오는지 센다.
8 find("Python") 메서드로 "Python" 이 시작되는 위치(인덱스)를 반환한다.

실행 결과

Hello, Python!
  hello, python!
  HELLO, PYTHON!
  Hello, 파이썬!
3
9

2.5. f-string(에프 스트링)

2.5.1. f-string이란?

f-string(에프 스트링)은 문자열 안에 변수나 계산식을 {} 로 삽입하는 방법이다. 문자열 앞에 f 를 붙이면 된다. 기존의 + 연결 방식보다 훨씬 읽기 쉽다.

기존 방식 (불편하다)

name = "홍길동"
score = 85
print("이름: " + name + ", 점수: " + str(score) + "점")

f-string 방식 (편리하다)

name = "홍길동"
score = 85
print(f"이름: {name}, 점수: {score}점")
방식 가독성
+ 연결 "이름: " + name + ", 점수: " + str(score) + "점" 복잡하다
f-string f"이름: {name}, 점수: {score}점" 깔끔하다

2.5.2. f-string 기본 사용법

hero = "전사"
lv = 25
hp = 980

msg = f"직업: {hero} | 레벨: {lv} | 체력: {hp}"
print(msg)
설명
1~3 캐릭터 정보를 변수에 저장한다.
5 문자열 앞에 f 를 붙이고, 변수를 삽입할 위치에 {변수명} 을 쓴다.
6 완성된 문자열을 출력한다. 각 {} 자리에 변수의 값이 들어간다.

실행 결과

직업: 전사 | 레벨: 25 | 체력: 980

2.5.3. f-string 안에서 계산하기

{} 안에는 변수뿐 아니라 계산식도 넣을 수 있다.

a = 10
b = 3

print(f"{a} + {b} = {a + b}")
print(f"{a} * {b} = {a * b}")
print(f"{a} / {b} = {a / b}")
설명
4 {a + b}10 + 3 = 13 으로 자동 계산된다.
5 {a * b}10 * 3 = 30 으로 자동 계산된다.
6 {a / b}10 / 3 = 3.333... 으로 자동 계산된다.

실행 결과

10 + 3 = 13
10 * 3 = 30
10 / 3 = 3.3333333333333335

2.5.4. 소수점 자릿수 지정하기

실수를 출력할 때 소수점 아래 자리수를 제한할 수 있다. {변수:.자릿수f} 형식을 사용한다.

pi = 3.141592653589793

print(f"원주율: {pi}")
print(f"소수점 2자리: {pi:.2f}")
print(f"소수점 4자리: {pi:.4f}")
설명
3 소수점 자릿수를 제한하지 않고 출력한다.
4 :.2f 는 소수점 아래 2자리까지만 출력하라는 의미이다.
5 :.4f 는 소수점 아래 4자리까지만 출력하라는 의미이다.

실행 결과

원주율: 3.141592653589793
소수점 2자리: 3.14
소수점 4자리: 3.1416

2.6. 종합 예제: 쇼핑 계산기

item1 = "라면"
price1 = 800
qty1 = 3

item2 = "과자"
price2 = 1500
qty2 = 2

total1 = price1 * qty1
total2 = price2 * qty2
grand = total1 + total2

print("========== 영수증 ==========")
print(f"{item1}    {price1}원 × {qty1}개 = {total1}원")
print(f"{item2}   {price2}원 × {qty2}개 = {total2}원")
print("----------------------------")
print(f"합계: {grand}원")
print("============================")
설명
1~3 첫 번째 상품의 이름, 단가, 수량을 저장한다.
5~7 두 번째 상품의 이름, 단가, 수량을 저장한다.
9 price1 * qty1 = 800 * 3 = 2400 으로 첫 번째 상품의 소계를 계산한다.
10 price2 * qty2 = 1500 * 2 = 3000 으로 두 번째 상품의 소계를 계산한다.
11 두 소계를 더하여 합계를 구한다.
13~18 f-string을 사용하여 영수증 형식으로 출력한다.

실행 결과

========== 영수증 ==========
라면    800원 × 3개 = 2400원
과자   1500원 × 2개 = 3000원
----------------------------
합계: 5400원
============================

2.7. 실습 과제

과제 1. 나이 계산기

태어난 연도를 input() 으로 입력받아 올해 나이를 계산하여 출력한다. 현재 연도는 변수에 저장하여 사용한다.

태어난 연도를 입력하세요: 2000
현재 연도: 2025
나이: 25세


“`python
birth = int(input(“태어난 연도를 입력하세요: “))
now = 2025

age = now – birth
print(f"현재 연도: {now}")
print(f"나이: {age}세")

</Accordion>

---

### 과제 2. RPG 스탯 계산기

공격력(atk), 방어력(def_val), 속도(spd) 를 각각 변수에 저장하고, 총 전투력(power = atk * 2 + def_val + spd * 3)을 계산하여 f-string으로 출력한다.

<Accordion title="정답 예시 보기">
```python
atk = 80
def_val = 50
spd = 40

power = atk * 2 + def_val + spd * 3
print(f"공격력: {atk}")
print(f"방어력: {def_val}")
print(f"속도: {spd}")
print(f"총 전투력: {power}")

댓글 남기기