1. 대입 및 연산
1.1 대입 연산자
연산자는 자료를 가공하여 유용한 정보를 만들어 내는 도구이다. 쉽게 말해 덧셈, 뺄셈, 곱셈 등을 계산하는 역할을 수행하되 수학에서의 연산보다 더 다양한 동작을 처리한다.
가장 자주 사용하는 연산자는 변수에 값을 저장하는 대입 연산자 이다. "변수 = 수식" 형식으로 = 기호의 왼쪽에 값을 저장할 변수를 적고 오른쪽에 이 변수에 저장할 값이나 수식을 적는다.
a = 3
b = 'Good'
c = 3.14
대입되는 값에 따라 변수의 타입이 결정된다. a는 정수형 변수, b는 문자열 변수, c 실수형 변수가 된다. 변수는 값을 저장하는 통인데 이 통에 값을 집어 넣는 역할을 하는 것이 대입 연산자이다. 따라서 대입 연산자는 값을 저장하는 것 뿐만 아니라 변수를 생성하고 초기화하는 중요한 역할을 한다.
print(value)
value = 5
라는 코드의 경우 에러가 나게 되는데 그 이유는 value의 값이 아직 선언되지 않았기 때문이다.
1.2 산술 연산자
연산자 |
설명 |
+ |
더하기 |
- |
빼기 |
* |
곱하기 |
/ |
나누기 |
** |
거듭제곱 |
// |
정수 나누기 |
% |
나머지 |
print("3 + 4 = ",3 + 4)
print("5 - 2 = ",5 - 2)
print("2 * 4 = ",2 * 4)
print("8 / 2 = ",8 / 2)
print("11**2 = ",11**2)
print("2**10 = ",2**10)
print("5/2 = ",5/2)
print("5//2 = ",5//2)
print("7 % 2 = ",7 % 2)
print("8 % 3 = ",8 % 3)
print("9 % 3 = ",9 % 3)
1.3 복합 대입 연산자
대입 연산자는 우변의 값이나 수식을 계산하여 좌변에 대입하는데 이때 우변의 수식에 좌변의 변수가 올 수도 있다.
a = 5
a = a + 1
print(a)
b = 10
b += 1
print(b)
a = a + 1 대입문은 원래의 a값에 1을 더해 그 결과를 다시 a에 대입하라는 뜻이며 += 연산자도 같은 뜻을 가진다. 마찬가지로 -= , *=, /= 또한 같은 뜻을 가진다.
a = b = c = 5
a -= 1
b *= 3
c /= 4
print(a, b, c)
추가적으로 C나 자바는 ++ -- 연산자가 있는 반면 파이썬에는 이 연산자가 없다.
2. 타입 변환
2.1 문자열 연산
연산자는 피연산자의 타입에 따라 동작이 약간씩 달라진다. 산술 연산자는 수치형에 대해 사용하는 것이 보통이지만 + 와 * 연산자는 문자열에 대해서도 쓸 수 있으며 수학적 연산과는 다르게 동작한다. 문자열에 대해 + 연산을 수행하면 두 문자열을 연결한다. 또한 * 연산자로 문자열에 정수를 곱하면 문자열을 정수 횟수만큼 반복한다.
s1 = "바보"
s2 = "멍청이"
print(s1 + s2)
print("메롱 " * 5)
print("-" * 20)
2.2 정수와 문자열
+ 연산자는 피연산자의 타입을 판별하여 숫자에 대해서는 덧셈을 하고 문자열에 대해서는 연결한다. 타입을 구분할 정도로 똑똑하지만 문자열과 숫자를 섞어서 실행을 하게 되면 에러가 나게 된다.
print("korea" + 2020) => 에러!
print(10 + "22") => 에러!
위와 같은 경우는 서로 타입이 다르기 때문에 타입을 지정해주어야 한다.
print("korea" + str("2020"))
print(10 + int("22"))
print(10 + int(22%)) => 에러!
print(10 + int(22.5)) => 에러!
위와 같은 경우는 22%와 22.5가 정수가 아니므로 에러가 나게 된다.
int 함수의 두 번째 인수로 진법을 지정할 수 있으며 생략하면 문자열을 10진수로 해석한다. 진법은 2~36까지 지정할 수 있으며 문자열 내에 접두어 0x, 0o, 0b가 붙어 있어도 상관없다
int("문자",진법)
int("1a", 16)
>> 26
int("15", 8)
>> 13
2.3 실수의 변환
실수가 저장된 문자열을 실수로 변경할 때는 float 함수를 사용한다. 문자열 안에는 부호와 숫자, 소수점 등으로 구성된 고정 소수점 실수나 "314e-2" 등의 부동 소수점의 형식으로 저장되어 있어야 한다.
print(10 + float("22.5")) # 32.5
print(10 + float("314e-2")) # 13.14
실수를 정수로 바꿀 때는 int 함수를 사용하며 이때 소수점 이하는 사라진다. 문자열에 저장된 실수를 정수로 바꿀 때는 일단 float 함수로 문자열을 실수로 바꾸고 다시 int 함수를 사용하여 정수로 바꾼다.
print(10 + int(22.5)) # 32
print(10 + int(float("22.5"))) # 32
실수에 대해 int 함수를 호출하면 소수점 이하를 무조건 잘라 버려 오차가 많다. 이에 비해 round 함수는 실수를 반올림한다. round 함수는 소수점 첫째 자리에서 반올림하여 정수를 리턴한다.
print(int(2.54))
print(round(2.54))
print(round(2.54, 1))
print(round(123456, -3))
이 외에도 bool, list, tuple, dict 등의 변환 함수가 있으며 컬렉션끼리도 서로 형태를 바꿔가며 변환할 수 있다.
2.4 우선순위와 결합순서
하나의 수식에 여러 개의 연산자가 동시에 사용되기도 하는데 파이썬은 모든 연산자의 우선순위를 명확하게 정해 놓았다. 위쪽이 가장 높고 아래쪽으로 내려갈수록 순위가 낮다.
연산자 |
설명 |
( ) [ ] { } |
컬렉션 표현식 |
a[i] func() obj.attr |
첨자 연산, 함수 호출, 멤버 읽기 |
** |
거듭제곱 |
+ - ~ |
부호 연산자, 논리 부정 연산자 |
* / // % @ |
곱하기, 나누기, 나머지, 행렬곱 |
+ - |
더하기, 빼기 |
<< >> |
쉬프트 연산 |
& |
비트 논리곱 |
^ |
비트 배타적 논리합 |
| |
비트 논리합 |
in, not in, is, is not, <<= >>= != == |
비교 연산자 |
not |
논리 부정 |
and |
논리곱 |
or |
논리합 |
if else |
조건 점검 |
lambda |
람다 표현식 |
우선순위를 임의로 조정하려면 괄호를 사용하여 먼저 연산할 부분을 묶어줄 수 있다.
a = 1 + 2 + 3
위의 경우 1과 2가 먼저 더해지고 그 결과 인3이 뒤쪽으로 더해져서 6이 된다, 보통 왼쪽 우선이지만 대입 연산자는 오른쪽 우선이다. 대입 연산자는 연거푸 사용하면 오른쪽부터 차례대로 대입하여 여러 개의 변수에 한꺼번에 같은 값을 대입한다.
a = b = c = 5
그렇기 때문에 위의 경우는 c에 5가 먼저 대입되고 b, a 에도 차례대로 5가 대입되어 세 변수가 모두 같은 값을 가진다. 왼쪽 먼저 대입해 버리면 a = b가 먼저 수행되어 정의되지도 않은 변수값을 대입하므로 에러가 될 것이다.
감사합니다.
'🐍PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 루프(Loop)의 활용(구구단, 삼각형, 피라미드) (0) | 2020.02.16 |
---|---|
[PYTHON] 파이썬 조건문 (if 조건문, 논리연산자, 비교연산자, 블록구조, else문, elif문, 중첩문) (0) | 2020.02.16 |
[PYTHON] 파이썬 타입(수치형, 문자열, 그 외의 타입) (0) | 2020.02.16 |
[PYTHON] 파이썬 입출력(print, input, 구분자 sep, 끝문자 end) (0) | 2020.02.16 |
[PYTHON] 파이썬 반복문 (For, Range, While, Break, Continue) (0) | 2020.02.16 |