Type something to search...

2회차: 연산자 & 문자열

2회차: 연산자 & 문자열

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


학습 목표

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

2.1. 산술(Arithmetic) 연산자

2.1.1. 연산자란?

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

2.1.2. 기본 연산자 종류

연산자의미예시결과
+더하기3 + 25
-빼기3 - 21
*곱하기3 * 26
/나누기7 / 23.5
//몫 (나눗셈의 정수 부분)7 // 23
%나머지7 % 21
**거듭제곱2 ** 38

참고

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

2.1.3. 기본 연산 예시

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

실행 결과

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

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

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

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

실행 결과

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

2.1.5. 복합 대입 연산자

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

긴 표현짧은 표현의미
x = x + 5x += 5x에 5를 더해서 저장
x = x - 3x -= 3x에서 3을 빼서 저장
x = x * 2x *= 2x에 2를 곱해서 저장
x = x / 4x /= 4x를 4로 나눠서 저장
1
hp = 100
2
print("초기 HP:", hp)
3
4
hp -= 30
5
print("데미지 30 받은 후:", hp)
6
7
hp += 20
8
print("포션 사용 후:", hp)
설명
1초기 체력을 100 으로 설정한다.
4hp -= 30hp = hp - 30 과 같다. 체력이 100 - 30 = 70 이 된다.
7hp += 20hp = hp + 20 과 같다. 체력이 70 + 20 = 90 이 된다.

실행 결과

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

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

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

실행 결과

1
최종 데미지: 45.0

2.2. 비교(Comparison) 연산자

2.2.1. 비교 연산자란?

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

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

주의

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

2.2.2. 비교 연산자 사용 예시

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

실행 결과

1
False
2
True
3
True
4
False

2.3. 논리(Logical) 연산자

2.3.1. 논리 연산자란?

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

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

2.3.2. and 연산자

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

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

실행 결과

1
공격 가능 여부: True

2.3.3. or 연산자

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

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

2.3.4. not 연산자

notTrueFalse 로, FalseTrue 로 반전시킨다.

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

실행 결과

1
게임 계속 가능: True

2.4. 문자열(String) 다루기

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

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

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

실행 결과

1
파이썬
2
안녕 세상!

주의

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

1
name = "홍길동"
2
score = 85
3
4
# 오류 발생 예시 (실행하지 말 것)
5
# print(name + "의 점수는 " + score) ← 오류!
6
7
# 올바른 방법
8
print(name + "의 점수는 " + str(score))
설명
6주석(#)으로 시작하는 줄은 실행되지 않는다. 설명을 적을 때 사용한다.
9str(score) 로 숫자 85 를 문자열 "85" 로 변환한 뒤 연결한다.

실행 결과

1
홍길동의 점수는 85

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

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

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

실행 결과

1
--------------------
2
★★★★★
3
박수박수박수

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

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

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

실행 결과

1
3
2
14

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

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

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

실행 결과

1
P
2
y
3
n
4
n

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

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

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

실행 결과

1
Hello
2
Python
3
Hello
4
Python!

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

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

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

실행 결과

1
Hello, Python!
2
hello, python!
3
HELLO, PYTHON!
4
Hello, 파이썬!
5
3
6
9

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

2.5.1. f-string이란?

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

기존 방식 (불편하다)

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

f-string 방식 (편리하다)

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

2.5.2. f-string 기본 사용법

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

실행 결과

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

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

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

1
a = 10
2
b = 3
3
4
print(f"{a} + {b} = {a + b}")
5
print(f"{a} * {b} = {a * b}")
6
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... 으로 자동 계산된다.

실행 결과

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

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

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

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

실행 결과

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

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

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

실행 결과

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

2.7. 실습 과제

과제 1. 나이 계산기

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

1
태어난 연도를 입력하세요: 2000
2
현재 연도: 2025
3
나이: 25세
1
birth = int(input("태어난 연도를 입력하세요: "))
2
now = 2025
3
4
age = now - birth
5
print(f"현재 연도: {now}")
6
print(f"나이: {age}세")

과제 2. RPG 스탯 계산기

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

1
atk = 80
2
def_val = 50
3
spd = 40
4
5
power = atk * 2 + def_val + spd * 3
6
print(f"공격력: {atk}")
7
print(f"방어력: {def_val}")
8
print(f"속도: {spd}")
9
print(f"총 전투력: {power}")