- 프롤로그
- 개발 첫걸음
- 파이썬 기초
- 파이썬 중급
- 파이썬 고급
- 내장 함수 톺아보기
- 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
- 변수의 범위 – 이름 검색의 범위
- 파이썬 심화
- 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
- 데코레이터 – 함수의 기능을 강화하기
- 프로퍼티
- 제너레이터
- async와 await
- 객체로서의 클래스 – 클래스를 동적으로 정의하기
- 파이썬 프로젝트 실습
- 원카드 게임 만들기 (1)
- 원카드 게임 만들기 (2)
- 원카드 게임 만들기 (3) (작성중)
- 턴제 자동 전투 게임 만들기 (작성중)
- 실전 (파이썬 외적인 것들)
- 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
- 유니코드 – 컴퓨터에서 문자를 표기하는 방법
- html, css, 인터넷 – 자동화 첫 걸음 내딛기
- 네트워크 – 인터넷으로 통신하는 방법
- 문서 – 문맥을 읽어보기
사전 지식
- 변수, 대입
개요
연산자(Operator) 란 연산을 수행하는 기호 를 뜻합니다.
우리는 벌써 하나의 연산자를 야심차게 둘러보았답니다. 바로 대입 연산자입니다. =
이거요. 대입할 때 쓰는 특별한 기호라고 해서 대입 연산자라고 불리웁니다. 거의 대부분의 프로그래밍 언어에서 대입 연산자는 =
이죠. 대입 연산자는 매우 특별합니다. 변수에 값을 대입하는 기능을 가진 연산자는 =
밖에 없습니다.
연산자의 종류는 다양합니다. 가장 간단한 연산자가 나오는 예시를 살펴보면서 연산자에 대한 감을 익히도록 합시다.
값을 변형하여 대입시키기
power = 92
bonus = 13
result = power + bonus
print(result)
105
power
라는 변수와 bonus
라는 변수를 새롭게 정의했습니다. 그리고 result
라는 변수를 정의하면서 power + bonus
를 실행하였군요. result
를 출력해보니 92 + 13
의 값인 105
가 출력됩니다.
+
라는 새로운 연산자가 등장했습니다. +
는 양쪽에 있는 숫자를 더하라는 연산자입니다. 이것은 산술 연산자 입니다. 위 예제에서는 한 줄에 대입 연산자와 산술 연산자가 함께 등장합니다. 아니, 한 줄에는 하나의 명령만 된다고 하지 않았나요? 괜찮습니다. 산술 연산은 표현식(expression) 에 해당되며, 표현식은 한 줄에 여러 번 나와도 됩니다. 표현식(추가 예정)에 대해서는 언젠가 한번 짚고 넘어갈 것이지만, 우선 지금은 한 줄에 여러 개의 표현식이 들어가도 된다는 점만 기억하고 있으면 되겠습니다.
대입 연산자와 산술 연산자가 한 줄에 함께 있을 때에는 우선순위(priority) 가 빠른 것부터 먼저 처리됩니다. 파이썬에서는 산술 연산자가 먼저 처리되고 대입연산자는 나중에 처리됩니다. 즉 result = power + bonus
에서 power + bonus
가 먼저 실행되고 그 결과값이 result
에 대입되는 것이죠.
한가지 명심해야 할 점은 power + bonus
를 한다고 해서 power
이나 bonus
값이 변하지 않습니다. 변수의 값을 바꾸려면 오로지 대입문을 통해서만 가능합니다.
함수에 값으로 넣기
power = 92
bonus = 100
print(power + bonus)
192
이번엔 result
변수 없이 바로 power + bonus
를 print
함수 안에 집어 넣었습니다. print
함수가 내부적으로 연산자를 만난다면, 마찬가지로 연산자를 먼저 계산하고 그 결과값을 적용합니다. 그러므로 192
라는 계산된 값이 출력되는 것입니다.
산술 연산자의 종류
산술 연산자는 숫자의 계산과 관련된 연산자를 뜻합니다. 아래와 같은 종류가 있습니다. 예제와 함께 살펴보면 더욱 이해가 잘 될 것입니다.
기호 | 설명 |
---|---|
+ | 양쪽 값을 더한다. |
- | 왼쪽 값에서 오른쪽 값을 뺀다. |
* | 양쪽 값을 곱한다. |
/ | 왼쪽 값을 오른쪽 값으로 나눈다. |
// | 왼쪽 값을 오른쪽 값으로 나눴을 때의 몫 을 구한다. |
% | 왼쪽 값을 오른쪽 값으로 나눴을 때의 나머지 를 구한다. |
** | 왼쪽 값을 오른쪽 값으로 거듭제곱 한다. |
apple = 17
banana = 3
print(apple + banana)
print(apple - banana)
print(apple * banana)
print(apple / banana)
print(apple // banana)
print(apple % banana)
print(apple ** banana)
20
14
51
5.666666666666667
5
2
4913
대입문의 왼쪽에는 변수 하나만 옵니다
다음 잘못된 예제를 하나를 살펴 보겠습니다.
apple = 17
banana = 3
apple + banana = banana
대입 연산자 기준으로 왼쪽에 산술 연산자가 등장했습니다. 앞서 산술 연산자는 대입 연산자보다 먼저 처리된다고 하였습니다. 그렇다면 결국 3번째 행은 apple + banana
가 먼저 계산되어서, 다음과 같은 코드가 되어버립니다.
20 = banana
아이고, 앞서 강조했듯이 대입문의 왼쪽은 변수가 와야 합니다. 20
이라는 값 그 자체에다가는 대입할 수 없습니다. 그리하여 에러가 발생합니다. 아래는 결과입니다.
File "c:/Users/tooth/Desktop/py.py", line 3
apple + banana = banana
^
SyntaxError: can't assign to operator
사실 이 에러는 문법 에러입니다. 즉 대입문의 왼쪽에 연산자 같은 논리에 맞지 않는 것이 들어있다면 프로그램이 시작되기도 전에 일찌감치 에러를 내면서 오류를 고치라고 합니다.
복합 대입 연산자
원래 있는 변수의 값에 5
를 더하여 그 변수에 그대로 적용하고 싶다고 가정합시다. 그렇다면 코드를 어떻게 작성하면 될까요? result
라는 임시 변수, 대입 연산자, 산술 연산자를 통해 다음과 같이 코드를 작성할 수 있을 것입니다.
power = 15
result = power + 5
power = result
print(power)
20
하지만 어차피 대입 연산자보다 산술 연산자가 먼저 작동하니, result
를 없애고 power + 5
를 그 자리에 넣는다면 의도대로 동작하지 않을까요? 한번 시도해봅시다.
power = 15
power = power + 5
print(power)
20
result
변수는 사라졌습니다. 두번째 줄만 자세히 보도록 하겠습니다. power
의 값은 15
였습니다. power = power + 5
여기서 +
연산자가 먼저 실행되니 power + 5
가 먼저 실행되겠습니다. 그리하여 결과값이 20
이 나오고, 결과적으로 power = 20
의 형태가 되어 결국 power
의 값은 20
이 됩니다.
하지만 냉혹한 프로그래밍의 세계에서는 게으른 사람이 많아서 더 간편한 방법을 만들게 되는데, 그것이 바로 복합 대입 연산자입니다. 아래 코드는 위 코드와 정확히 같은 일을 합니다.
power = 15
power += 5
print(power)
20
+=
이라는 새로운 연산자가 등장했습니다. +=
는 “양쪽 값을 더하고, 그 결과값을 왼쪽 변수에 대입하라“라는 뜻입니다. 이와 같은 복합 대입 연산자는 모든 산술 연산자에 대응하여 있습니다. 아래 표를 참조해주세요.
종류
기호 | 설명 |
---|---|
+= | 더한 값을 대입한다. |
-= | 뺀 값을 대입한다. |
*= | 곱한 값을 대입한다. |
/= | 나눈 값을 대입한다 |
//= | 몫을 대입한다. |
%= | 나머지를 대입한다. |
**= | 거듭제곱 계산 결과를 대입한다. |
우선 순위
연산자의 우선 순위는 명확하게 정해져 있습니다. 만약 같은 우선순위의 연산자가 여러 개 쓰인다면 앞에서부터 차례대로 진행됩니다. (대입 연산자는 원칙상 한 줄에 하나만 쓰도록 합니다.)
우선 순위 | 연산자 |
---|---|
가장 먼저 | ** |
그 다음 | *, /, %, // |
그 다음 | +, - |
제일 나중에 | =, +=, -=, *=, /=, //=, %=, **= |
연산자의 기본적인 우선 순위를 무시하고 원하는 순서대로 값을 계산하고자 하는 경우에는 소괄호(()
)를 사용하면 됩니다. 대괄호([]
)나 중괄호({}
)를 사용해서는 안 됩니다. 소괄호는 중첩해서 사용할 수 있습니다. 이를테면, 아래와 같은 수식을 실제 코드로 옮겨 적는다고 생각해봅시다.
이는 다음과 같이 작성하면 됩니다.
p + 1 / (a + 1 / (b + 1 / (c + d)))
문자열 연산자
문자열에서는 +
연산자를 통해 문자열끼리 연결할 수 있습니다. 또한 *
를 이용해 문자열을 여러번 반복할 수 있습니다. /
나 -
는 문자열에서는 지원되지 않는 연산자입니다. 그 기능을 아래 표에서 정리해보았습니다.
연산자 | 설명 |
---|---|
문자열 + 문자열 | 두 문자열을 연결한 하나의 문자열을 내놓는다. |
문자열 += 문자열 | 두 문자열을 연결한 뒤 왼쪽 변수에 대입한다. |
문자열 * 숫자 | 문자열을 숫자만큼 반복한 값을 내놓는다. |
apple = "안녕하세요"
banana = "박보영님"
cow = apple + " " + banana
print(cow)
cow += "?"
print(cow)
print(apple * 3)
안녕하세요 박보영님
안녕하세요 박보영님?
안녕하세요안녕하세요안녕하세요
연산자를 쓸 때 변수의 종류와 위치
+
연산에서, 문자열(str
)은 문자열끼리 숫자(int
, float
)는 숫자끼리 작동합니다. 이 두개의 종류를 섞어서 사용한다면 에러가 발생합니다. 아래 예시를 참조해주세요.
apple = 13
banana = "안녕하세요"
print(apple + banana)
Traceback (most recent call last):
File "c:/Users/tooth/Desktop/test2.py", line 3, in <module>
print(apple + banana)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
연습 문제
- 대입 연산자는 어떤 기호를 사용하는가?
- 산술 연산자의 종류 7가지는 무엇인가?
- 대입 연산자와 산술 연산자 중 어느 것이 나중에 실행되는가?
- 문자열 두 개를 연결하려면 어떻게 해야 하는가?
- 문자열과 숫자형을 더하려고 하면 어떻게 되는가?
프로그래밍 문제
- 아래 코드가 어떻게 될까요? 두 가지 가능성이 있겠습니다.
a = a * 2 + 5
로 계산되어11
이 나올 수도 있겠지요.2 + 5
가 먼저 계산되어21
이 나올 수도 있습니다.
a = 3
a *= 2 + 5
print(a)
- 두 문자열을 입력받아 그 두 개를 이어서 출력하는 프로그램을 만드세요
- 다음 결과를 예측하세요.
a = 1
a *= 2
a *= 5
a *= 4
a //= 3
print(a)
- 다음 결과를 예측하세요
a = 5
b = 4
c = a + b
a = c + a
b = b - a
print(b)
- 다음 결과가 10이 나오도록 빈 칸을 채워넣으세요. (힌트 :
%
의 뜻이 무엇이었는지,-
와%
중 어느 것이 먼저 작동하는지 다시 알아보세요!)
a = 13
b = 8
print(a - b % 빈칸)
프로그래밍 문제 정답
21
이 나옵니다.*=
는 한 뭉텅이로 가정하여2 + 5
가 먼저 계산된 뒤3
과 곱해집니다.- 코드 입니다.
a = input()
b = input()
print(a + b)
- 동작 결과입니다.
- 동작 결과입니다.
5
입니다.a - b % 빈칸
이10
으로 나오려면b % 빈칸
이3
이어야 되고,8
을 나눈 나머지가3
이 나오는 경우는5
입니다.
- 프롤로그
- 개발 첫걸음
- 파이썬 기초
- 파이썬 중급
- 파이썬 고급
- 내장 함수 톺아보기
- 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
- 변수의 범위 – 이름 검색의 범위
- 파이썬 심화
- 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
- 데코레이터 – 함수의 기능을 강화하기
- 프로퍼티
- 제너레이터
- async와 await
- 객체로서의 클래스 – 클래스를 동적으로 정의하기
- 파이썬 프로젝트 실습
- 원카드 게임 만들기 (1)
- 원카드 게임 만들기 (2)
- 원카드 게임 만들기 (3) (작성중)
- 턴제 자동 전투 게임 만들기 (작성중)
- 실전 (파이썬 외적인 것들)
- 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
- 유니코드 – 컴퓨터에서 문자를 표기하는 방법
- html, css, 인터넷 – 자동화 첫 걸음 내딛기
- 네트워크 – 인터넷으로 통신하는 방법
- 문서 – 문맥을 읽어보기