본문 바로가기

파이썬 (python)

[python 6] 데이터와 연산

 

 

 

아래의 어떤 연산 operation 을 보자. 우리가 초등학교에서 마스터한 연산 중의 하나이다. 

100+30

 

위의 연산은 이렇게 "읽을" 수 있다. "100과 30을 더하시오". 또는, "100에다 더하시오 (무엇을?) 30을" 또는, "더하시오, (무엇을?) 100과 30을".  여기서 + 기호는 덧셈 연산이라는 행위(동작)를 나타내는 기호로서, 연산자 operator 라고 부른다. 나머지인 100과 30은 그 동작의 대상이 되는 피연산자 operand 이다. 

 

파이썬에서 사용되는 연산자 operator를 모두 보이면 아래와 같다. 한꺼번에 정리하고 외울 필요는 없다. 필요할 때 한번씩 사용해 보면 저절로 알게 된다. 그리고, 사람들이 사용하는 연산자와 거의 비슷하다.

 

+     -     *     **      /     //     %     @
<<   >>    &      |      ^     ~    :=
<     >     <=     >=      ==      !=

 

당연히, 데이터의 유형 type 별로 그 데이터에 대해 정의되는 연산의 종류가 달라진다. 숫자 데이터, 문자 데이터, 불리언 데이터 각각에서 정의되어 있는 연산을 살펴보자

 

 

○ 숫자 데이터의 연산

 

우리는 2개의 숫자 데이터를 더할 수 있고, 뺄 수 있고, 곱할 수 있고, 나눌 수 있다. 여기서 더하는 행위, 빼는 행위, 곱하는 행위, 나누는 행위를 연산 operation이라 부르고 특별히 덧셈, 뺄셈, 곱셈, 나눗셈이라고 한다.

 

이러한 사칙연산 외에 좀 더 복잡한 연산을 정의할 수 있다. 예를 들어, 3개의 데이터 a, b, c 중에 가장 큰 값을 찾는 연산이라든가, 다섯 개 데이터 a, b, c, d, e 의 합을 구하는 연산이라든가. 물론, 이러한 복잡한 연산들은 기본적인 연산인 사칙연산을 반복 실행함으로써 정의할 수 있다. 우리는 이러한 연산을 함수(funciton)로 정의할 수 있다.  # 나중에, 함수를 다룰 때 자세히 살펴보도록 하자.

 

숫자 데이터의 기본 연산으로는 사칙연산 (+, -, *, /) 이 있다. 두 개의 정수값 103의 사칙연산 결과를 보면 다음과 같다. 덧셈을 나타내는 연산자는 +, 뺄셈 연산자는 -, 곱셈 연산자는 * (키보드에서 숫자 8에 있는 별 모양 심볼), 나눗셈 연산자로는 /를 사용한다.

 

 

한가지 유용한 연산으로 몫 연산, 나머지 연산이 있다. 아래의 수식에서처럼, 어떤수 (피젯수)를 또 다른 어떤수 (젯수) 로 나눗었을 때 몫 값과 나머지 값을 구하는데 사용된다. 피젯수가 47이고 제수가 5인 경우의 몫은 9, 나머지는 2이다.

 

몫 연산자는 // (나눗셈을 나타내는 슬래시 심볼을 2개 붙여서 사용함), 나머지 연산자는 % 기호를 사용한다.

 

 

숫자 데이터의 비교 연산 (comparison)

 

데이터 중에는 크기 또는 순서를 비교할 수 있는 데이터들이 있다. 대표적으로 숫자 데이터가 있다. 1보다 2가 크다. 만약에 1보다 2가 작다라고 "주장" 하면, 그 주장은 틀린 주장이 된다. 

 

비교 연산은 두 값의 크기를 비교하는 것이다. 예를 들어 5>3 (53보다 크다는 명제) 는 올바른 명제이므로 비교의 결과는 True () 이다. 비교연산의 결과는 True 이거나 False 이다. 비교가 올바르면 True 값이, 올바르지 않으면 False 값이 나온다.

 

비교 연산에 사용되는 연산자는 > (크다), 작다(<), 크거나 같다(>=), 작거나 같다 (<=), 같다 (==), 같지 않다 (!= 또는 <>) 등이 있다. 여기서 같다는 뜻의 비교 연산자로 = 심볼을 쓰지 않고 = 심볼을 2개 붙여서 == 심볼을 사용하는 것에 유의해야 한다. 지난 글에서 살펴봤듯이, = 심볼은 변수의 assignment 심볼로 사용된다. 몇 가지 비교연산 결과를 보면 아래와 같다.

 

 

 불리언 상수의 논리 연산 (boolean operations)

 

True 값과 False 값은 논리연산에서 사용되는 불리언 상수(boolean constant)이다. 1, 2, 3 등의 정수에 대해 사칙연산을 적용할 수 있듯이,  True와 False 등의 불리언 상수에 대해 and, or, not 등의 연산을 적용할 수 있다.

 

 

and 연산의 경우에는 2개 피연산자의 값이 동시에 True 일 때에만 True  이고 나머지의 경우에는 False가 되는 연산이다. 2개의 전제가 있다: "나는 남자이다" (실제로 ^^), "나는 천안에 산다" (실제로). 이 2개 명제를 "그리고"(and)로 조합해서 복합적인 명제를 만들어 보자. 

 

"나는 남자이고 천안에 산다"  옳은가, 그른가?     당연히 옳다 (True)

"나는 남자이고 서울에 산다" 옳은가, 그른가?      당연히 틀렸다 (False)

 

정리해 보면, 단순한 명제를 조합해서 복합적인 명제를 만들 수 있는데, 복합적인 명제의 참/거짓 값은 그 명제를 구성하는 단위 명제의 참/거짓 값과 복합방법에 따라 결정된다. 예를 들어 and 연산의 경우는 다음의 표와 같다. # 이 표를 진리표 (truth table)라고 부른다.

입력 출력
A B A and B
False False False
False True False
True False False
True True True

and 연산을 파이썬에서 실제 확인해 보면, 아래 그림과 같은 결과를 볼 수 있다.

 

 

or 연산의 경우를 살펴보자. 역시 2개의 단위 명제가 있다.  "나는 부자이다" (실제로 그렇지 않다ㅠ, False) "나는 키가 크다" (실제로 그렇다, True). 만약 어떤 여성이 "부자이고 키가 큰 사람"을 찾고 있으면 나는 대상이 되는가? 그 사람의 기준에 맞지 않아서 False. 만약, 그 여성이 "부자이거나 키가 큰 사람"을 찾고 있으면 나는 대상이 되는가? 그 사람의 기준에 맞아서 True. 이와 같은 로직을 표현하는 것이 or 연산이다. 

 

or 연산의 진리표는 다음과 같다. 

A B A or B
False False False
False True True
True False True
True True True

 

실제 파이썬에서 확인해 보자.

 

 

not 연산은 피연산자가 1개인 unary 연산이다. 참인 명제를 "아니다" 라고 하면 거짓이 되고, 거짓인 명제를 "아니다"라고 하면 참이 된다. "나는 키가 크다" (실제로). 그런데, 그런 나를 가리키며 "그렇지 않다"라고 하면 잘못된 (false) 판단이 되는 것이다. not 연산의 진리표를 보면 다음과 같다.

 

A not A
False True
True False

 

실제 파이썬에서 확인해 보자

 

 

 문자 데이터의 연산 

 

파이썬에서는 (물론, 다른 언어들도 마찬가지지만) 문자 데이터도 연산할 수 있다. 파이썬에서 문자 데이터는 하나의 데이터 구조 (data structure)로 다루어진다. 데이터 구조를 살펴보면서 문자 데이터를 공부해 보는 것으로 하자.