파이썬맛보기

[4] 파이썬 입문 - 수식과 계산, 지정

plas 2022. 6. 26. 15:49

이름으로 값을 기억하는 것을 살펴보았습니다. 이름에 값을 정해주는 것을 지정이라고 합니다. 파이썬에서 이름은 값을 기억하기 위한 방법이고, 지정이란 어떤 이름에 값을 지정해주는 것입니다. 새로운 이름이 나오면 파이썬은 그 이름과 값을 등록해서 기억해 둡니다. 이미 쓰이던 이름에 다른 값을 넣으면 그 이름에 새로운 값이 기억됩니다. 즉 마지막에 지정된 값을 그 이름이 기억하고 있다는 것입니다.

컴퓨터는 기억과 계산을 잘한다고 했는데 사실 컴퓨터가 제일 잘하는 것이 계산입니다. 여러 가지 연산이나 비교, 복잡한 수식의 계산 같은 것은 사람과 비교할 수 없을 정도로 잘하는데요, 예를 들면 10000 x 10000 행렬로부터 수백억 번의 계산을 통해 구해야 하는 행렬에 관한 값 같은 것을 1초도 걸리지 않고 해낼 수 있죠. 그러므로 우리는 컴퓨터를 잘 활용해서 이런 계산을 우리 대신하게 만들어야 하는데 그러려면 계산할 수식을 컴퓨터가 알 수 있게 표현해야 합니다.

먼저 정수에 대한 연산을 살펴보죠. +. -, *, /가 각각 더하기, 빼기, 곱하기, 나누기를 표시합니다. 복잡한 수식의 계산 방식은 우리가 수학 식을 계산하는 순서나 방식과 똑같습니다. 연산의 우선순위와 결합규칙, 그리고 괄호의 순서도 일반 수학의 계산과 동일합니다. 쉘창에 다음과 같은 명령을 실행해 보자.

> a = 5
> x = 5.6
> y = a * x * x + (6 * x + 7.5) /  2
> y
177.34999999999997

여기서 본 것처럼 우리는 수식을 계산하면 그것을 어떤 이름에 지정하여 기억시킵니다. 계산한 결과를 저장하지 않으면 다음에 그것을 사용할 수 없으니까 계산을 한 이유가 없겠지요? 이 때 y처럼 새로운 이름을 사용하여 기억시킬 수도 있고 a에 계산 결과를 저장할 수도 있습니다. 그 경우 a에 원래 있던 값은 잃어버리게 됩니다. 이걸 이름의 값을 덮어쓴다고 하죠. a에 있던 값이 더이상 필요없다면 y 대신 a에 계산 결과를 저장할 수도 있습니다. 자꾸 새로운 이름을 만들다가 이름이 너무 많아지면 어느 이름이 무슨 값인지 기억하기 힘들어지기도 합니다.

여기서 한 가지 짚고 넘어갈 것은 수식에서 사용되는 이름(= 의 오른쪽 부분에 나타남)은 반드시 값을 가지고 있어야 한다는 것입니다. 만약 앞에서 지정하지 않은 이름이 식에서 사용되면 파이썬은 다음과 같은 오류 메시지를 보여주게 됩니다. 아래 보이는 것처럼 지정한 적 없는 'd'라는 이름을 사용한 수식을 실행시키면 Trackback이라고 하는 메시지가 나타납니다.

> x = 5
> y = 15
> c = x * y * z
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'z' is not defined

여기서 NameError는 이름에 관련된 오류가 있다는 뜻으로 오류의 종류를 알려줍니다. 그리고 이름 'z'가 정의되지 않았다, 즉 그 이름에 값을 지정한 적이 없다는 것을 알려줍니다. x와 y는 알겠는데 z는 지정한 적이 없어서 무슨 값을 가지고 있는지 모르겠다는 뜻입니다.

자 그럼 이제 연산에 대해 좀더 알아볼까요? 앞에서 본 사칙연산 이외에 파이썬에서는 비교 연산을 지원합니다. 두 값을 비교해서 큰지 작은지 같은지를 구분할 수 있습니다.

> a = 9
> b = 8.4
> a < b
False
> a >= b
True
> a == b
False
> a != b
True
> a < b
False

비교 연산의 결과는 참(True)과 거짓(False)으로 표현됩니다. 위의 예에서 a와 b 값을 이용했을 때 논리식은 True 또는 False 값으로 계산됩니다.

다음으로 and, or, not을 이용한 논리식도 표현할 수 있습니다. and는 왼쪽과 오른쪽 식이 모두 True여야 참이 되고 or는 왼쪽이나 오른쪽 중에 하나가 참이면 True가 됩니다. 이 때 연산의 순서가 사칙연산을 가장 먼저 계산하고 그 다음이 비교 연산, 그리고 그 결과를 and나 or 연산에 적용하게 됨을 알 수 있습니다.

> a = 5
> b = 13
> a * 2 < b and a * 3 > b
True
> a * 2 + 3 == b or a * 3 == b
True
>

이외에도 프로그램에서 많이 쓰이는 연산으로 나머지 연산(%)이 있습니다. 우리가 일상생활에서도 번호를 매긴 다음 차례로 그룹을 나누는 경우가 많습니다. 도착한 사람을 차례로 여러 팀에 분산해서 배치하기도 하고 오는 순서대로 방을 나누고 그 다음에 오는 사람들은 기존에 있던 방에 차례로 넣기도 합니다. 이런 계산에 적합한 것이 % 연산입니다.

> a = 10
> a % 4
2
> a % 3
1
> (a + 5) % 2
1
>

컴퓨터가 짝홀을 결정할 때도 % 2를 사용하게 됩니다. 짝수인지 판단하려면? 다음과 같이 쓸 수 있습니다.

> a % 2 == 0
True