파이썬 강좌 – 연산자 ~ 계산하기

  1. 프롤로그
  2. 개발 첫걸음
    1. 컴퓨터 구성요소 - 컴퓨터는 어떤 걸 할 수 있나?
    2. 개발과 관련된 용어
    3. 파이썬의 선택 - 왜 파이썬인가?
    4. 파이썬 설치 - Hello World 출력하기
    5. Visual Studio Code 의 편리한 기능
    6. REPL과 콘솔 창 - 파이썬 동작시키기
  3. 파이썬 기초
    1. 기초 입출력 - 소통하기
    2. 변수와 대입 - 기억하기
    3. 연산자 - 계산하기
    4. 조건문 - 분기를 만들기
    5. 반복문 - 비슷한 작업을 반복하기
    6. 변수와 리스트 - 비슷한 변수들을 묶기
    7. for, range - 리스트의 항목을 다루기
    8. 파이선 기초 꿀팁
      1. 함수와 메소드의 호출 - 편리한 기능 이용하기
      2. 모듈 설치와 사용 - 유용한 기능 끌어다 쓰기
      3. 문자열 - 텍스트 다루기
  4. 파이썬 중급
    1. 정규표현식 - 문자열을 검색하고 치환하기(작성중)
    2. 함수를 직접 만들기 - 자주 쓰는 기능을 묶기
    3. 딕셔너리, 튜플, 세트 - 변수를 다양한 방법으로 묶기
    4. 클래스와 객체 - 변수를 사람으로 진화시키기
    5. 상속 - 클래스를 확장하기
    6. 파이썬 중급 꿀팁
      1. 코드를 작성하는 사람의 의도(작성중)
      2. 정체성과 동질성 - 객체의 성질(작성중)
      3. 명령문, 표현식 - 문법을 이루는 것들 (작성중)
      4. 슬라이싱 - 리스트를 갖고 놀기
  5. 파이썬 고급
    1. 예외와 에러 - 예상치 못한 상황에 대응하기
    2. 특별 메소드와 연산자 - 파이썬의 내부 작동방식 이해하기
    3. 다양한 함수 인수 - 유연한 함수 만들기
    4. 시퀀스와 반복자 - 반복과 순회를 자유자재로 다루기
    5. 변수의 범위 - 이름 검색의 범위
  6. 파이썬 심화
    1. 제너레이터와 코루틴 -
    2. async와 await
    3. 데코레이터 - 함수의 기능을 강화하기
    4. 객체로서의 클래스 - 클래스를 동적으로 정의하기
  7. 파이썬 프로젝트 실습
    1. 원카드 게임 만들기 (1)
    2. 원카드 게임 만들기 (2)
  8. 실전 (파이썬 외적인 것들)
    1. 유니코드 - 컴퓨터에서 문자를 표기하는 방법
    2. html, css, 인터넷 - 자동화 첫 걸음 내딛기
    3. 네트워크 - 인터넷으로 통신하는 방법
    4. 문서 - 문맥을 읽어보기

사전 지식

  • 변수, 대입

개요

연산자(Operator)연산을 수행하는 기호 를 뜻합니다.

우리는 벌써 하나의 연산자를 야심차게 둘러보았답니다. 바로 대입 연산자입니다. = 이거요. 대입할 때 쓰는 특별한 기호라고 해서 대입 연산자라고 불리웁니다. 거의 대부분의 프로그래밍 언어에서 대입 연산자는 =이죠. 대입 연산자는 매우 특별합니다. 변수에 값을 대입하는 기능을 가진 연산자는 = 밖에 없습니다.

연산자의 종류는 다양합니다. 가장 간단한 연산자가 나오는 예시를 살펴보면서 연산자에 대한 감을 익히도록 합시다.


예제 1

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에 대입되는 것이죠.


예제 2

power = 92
bonus = 100
print(power + bonus)
192

이번엔 result 변수 없이 바로 power + bonusprint 함수 안에 집어 넣었습니다. 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번째 행은 다음과 같은 코드가 되어버립니다.

20 = banana

아이고, 앞서 강조했듯이 대입문의 왼쪽은 변수가 와야 합니다. 20이라는 값 그 자체에다가는 대입할 수 없습니다. 그리하여 에러가 발생합니다. 아래는 결과입니다. (에러 메시지는 조금 이상하게 나오지만 어찌 되었건 프로그램이 정상적으로 실행되지 않습니다.)

  File "c:/Users/tooth/Desktop/py.py", line 3
    apple + banana = banana
    ^
SyntaxError: can't assign to operator

복합 대입 연산자

원래 있는 변수의 값을 변형하여 그대로 적용하고 싶다고 가정합시다. 그렇다면 코드를 어떻게 작성하면 될까요? 간단한 해결책으로는 임시 변수를 하나 만들 수 있겠습니다.

예제 1

power = 15
result = power + 5
power = result
print(power)
20

하지만 어차피 대입 연산자보다 산술 연산자가 먼저 작동하니, 다음과 같이 만들어볼 수 있지 않을까요?


예제 2

power = 15
power = power + 5
print(power)
20

result 변수는 사라졌습니다. 두번째 줄만 자세히 보도록 하겠습니다. power의 값은 15였습니다. power = power + 5 여기서 + 연산자가 먼저 실행되니 power + 5가 먼저 실행되겠습니다. 그리하여 결과값이 20이 나오고, 결과적으로 power = 20의 형태가 되어 결국 power의 값은 20이 됩니다.

하지만 냉혹한 프로그래밍의 세계에서는 게으른 사람이 많아서 더 간편한 방법을 만들게 되는데, 그것이 바로 복합 대입 연산자입니다. 아래 코드는 위 코드와 정확히 같은 일을 합니다.


예제 3

power = 15
power += 5
print(power)
20

+=이라는 새로운 연산자가 등장했습니다. +=는 "양쪽 값을 더하고, 그 결과값을 왼쪽 변수에 대입하라"라는 뜻입니다. 이와 같은 복합 대입 연산자는 모든 산술 연산자에 대응하여 있습니다. 아래 표를 참조해주세요.


종류

기호 설명
+= 더한 값을 대입한다.
-= 뺀 값을 대입한다.
*= 곱한 값을 대입한다.
/= 나눈 값을 대입한다
//= 몫을 대입한다.
%= 나머지를 대입한다.
**= 거듭제곱 계산 결과를 대입한다.

우선 순위

연산자의 우선 순위는 명확하게 정해져 있습니다. 만약 같은 우선순위의 연산자가 여러 개 쓰인다면 앞에서부터 차례대로 진행됩니다. (대입 연산자는 원칙상 한 줄에 하나만 쓰도록 합니다.)

우선 순위 연산자
가장 먼저 **
.. * / % //
.. + -
제일 나중에 = += -= *= /= //= %= **=

연산자의 기본적인 우선 순위를 무시하고 원하는 순서대로 값을 계산하고자 하는 경우에는 소괄호(())를 사용하면 됩니다. 대괄호([])나 중괄호({})를 사용해서는 안 됩니다. 소괄호는 중첩해서 사용할 수 있습니다.


예제

p + \frac{1}{\displaystyle a + \frac{1}{\displaystyle b + \frac{1}{\displaystyle c + d}}}

코드로 작성하고자 하는 수식

p + 1 / (a + 1 / (b + 1 / (c + d)))


문자열 연산자

문자열에서는 + 연산자를 통해 문자열끼리 연결할 수 있습니다.

연산자 설명
+ 두 문자열을 연결한다
+= 두 문자열을 연결한 뒤 왼쪽 변수에 대입한다.

예제

apple = "안녕하세요"
banana = "박보영님"
cow = apple + " " + banana
print(cow)
cow += "?"
print(cow)
안녕하세요 박보영님
안녕하세요 박보영님?

문자열은 문자열끼리, 숫자는 숫자끼리 +를 써야 합니다.

+ 연산에서, 문자열(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가지는 무엇인가?
  • 대입 연산자와 산술 연산자 중 어느 것이 나중에 실행되는가?
  • 문자열 두 개를 연결하려면 어떻게 해야 하는가?
  • 문자열과 숫자형을 더하려고 하면 어떻게 되는가?

프로그래밍 문제

  1. 두 문자열을 입력받아 그 두 개를 이어서 출력하는 프로그램을 만드세요

  2. 다음 결과를 예측하세요.

    a = 1
    a *= 2
    a *= 5
    a *= 4
    a //= 3
    print(a)
    
  3. 다음 결과를 예측하세요

    a = 5
    b = 4
    c = a + b
    a = c + a
    b = b - a
    print(b)
    
  4. 다음 결과가 10이 나오도록 빈 칸을 채워넣으세요.

    a = 13
    b = 8
    print(a - b % 빈칸)
    

    힌트 : %의 뜻이 무엇이었는지, -%중 어느 것이 먼저 작동하는지 다시 알아보세요!


프로그래밍 문제 정답

  1. 코드 입니다.

    a = input()
    b = input()
    print(a + b)
    
  2. 동작 결과입니다.

    변수 복합 대입 결과 변수 복합 대입 결과
  3. 동작 결과입니다.

    변수 대입 결과 변수 대입 결과
  4. 5

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

Scroll to top