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

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

사전 지식

  • 변수, 대입

개요

연산자(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 + \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)
print(apple * 3)
안녕하세요 박보영님
안녕하세요 박보영님?
안녕하세요안녕하세요안녕하세요

연산자를 쓸 때 변수의 종류와 위치

+ 연산에서, 문자열(str)은 문자열끼리 숫자(intfloat)는 숫자끼리 작동합니다. 이 두개의 종류를 섞어서 사용한다면 에러가 발생합니다. 아래 예시를 참조해주세요.

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. 아래 코드가 어떻게 될까요? 두 가지 가능성이 있겠습니다.
    1. a = a * 2 + 5로 계산되어 11이 나올 수도 있겠지요.
    2. 2 + 5가 먼저 계산되어 21이 나올 수도 있습니다.
a = 3
a *= 2 + 5
print(a)
  1. 두 문자열을 입력받아 그 두 개를 이어서 출력하는 프로그램을 만드세요
  2. 다음 결과를 예측하세요.
a = 1 
a *= 2 
a *= 5 
a *= 4 
a //= 3 
print(a)
  1. 다음 결과를 예측하세요
a = 5
b = 4
c = a + b
a = c + a
b = b - a
print(b)
  1. 다음 결과가 10이 나오도록 빈 칸을 채워넣으세요. (힌트 : %의 뜻이 무엇이었는지, -와 %중 어느 것이 먼저 작동하는지 다시 알아보세요!)
a = 13
b = 8
print(a - b % 빈칸)

프로그래밍 문제 정답

  1. 21이 나옵니다. *=는 한 뭉텅이로 가정하여 2 + 5가 먼저 계산된 뒤 3과 곱해집니다.
  2. 코드 입니다.
a = input() 
b = input() 
print(a + b)
  1. 동작 결과입니다.
변수 복합 대입 결과
변수 복합 대입 결과
  1. 동작 결과입니다.
변수 대입 결과
변수 대입 결과
  1. 5 입니다. a - b % 빈칸10으로 나오려면 b % 빈칸3이어야 되고, 8을 나눈 나머지가 3이 나오는 경우는 5입니다.

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

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to top