본문 바로가기
Programming

[파이썬] 연산자

by 삼SAM 2022. 4. 28.

연산자(Operator)

연산 실행에 있어서 여러 식이나 값에 수학적·논리적인 움직임, 즉 어떤 연산을 할 지 지정하는 것.

 

피연산자

연산의 대상이 되는 것

 

 

연산자 종류

산술 연산자: +, -, *, /, %, //, **

할당 연산자: =, +=, -=, *=, /=, %=, //=

비교 연산자: >, >=, <, <=, ==, !=

논리 연산자: and, or, not

 

뎃셈(+)

int + int = int

float + float = float

int + float = float

str + str = str

  • str + 숫자(int or float)는 불가

 

뺄셈(-)

int - int = int

float - float = float

int - float = float

  • str - str 은 불가
  • str - 숫자(int or float) 불가

 

곱셈(*)

int * int = int

float * float = float

int * float = float

str * int = str (str 내용을 int 수 만큼 반복)

  • str * str 은 불가
  • str * float 은 불가

 

나눗셈(/)

int / int = float

float / float = float

int / float = float

float / int = float

  • 즉, 나눗셈 결과는 항상 float
  • str / str 불가
  • str / 숫자(int or float) 불가
  • 숫자(int or float) / str 불가
  • / 0 불가 (0으로 나누면 에러 발생)

 

나눗셈 후 나머지(%)

a = 10
b = 3
result1 = a / b
result2 = a % b

print(result1, type(result1))
print(result2, type(result2))
3.3333333333333335 <class 'float'>
1 <class 'int'>

 

나눗셈 후 몫(//)

a = 10
b = 3
result1 = a / b
result2 = a // b

print(result1, type(result1))
print(result2, type(result2))
3.3333333333333335 <class 'float'>
3 <class 'int'>

 

  • 나머지와 몫을 한번에 구하는 함수: divmod()

[예시] 10을 3으로 나눈 몫과 나머지를 tuple형태로 result에 저장

result = divmod(103)  
print(result)
(3, 1)

 

거듭제곱(**)

a = 2 * 2 * 2 * 2
b = 2 ** 4

print(a,"/", b)
16 / 16

 

  • 제곱근 구하기

[예시] n ** (1/m) [n의 m제곱근 구하기]

a = 2 ** 8
b = 2 ** 4
c = 2 ** 2

n = 256
m2 = 256 ** (1/2)
m4 = 256 ** (1/4)
m8 = 256 ** (1/8)

print(a, b, c, sep=" / ")
print(m2, m4, m8, sep=" / ")
256 / 16 / 4
16.0 / 4.0 / 2.0

 

** math 모듈의 sqrt() 와 pow() 함수를 이용해 각각 제곱근, 제곱을 구할 수 있다 (TBU)

 

 

할당(대입) 연산자: =

오른쪽의 값을 왼쪽에 할당(대입)

 

[예시]

a = b

→ b를 a에 할당(대입)

* a == b → a 는 b

* [=] 과 [==]는 다름!

 

 

복합 연산자

a [산술 연산자]= x

→ a = a [산술 연산자] x

→ "=" 좌측 값(a)과 우측 값(x)을 [산술 연산자]로 연산 후 다시 좌측 값(a)으로 할당(대입)

 

[예시]

a = 10 일 때,

  • a += 10 → a = a + 10 == 20
  • a -= 10 → a = a - 10 == 0
  • a *= 10 → a = a * 10 == 100
  • a /= 10 → a = a / 10 == 1
  • a %= 3 → a = a % 3 == 1
  • a //= 3 → a = a // 3 == 3
  • a **= 2 → a = a ** 2 == 100

 

비교 연산자

좌측 값과 우측 값 사이를 비교 연산하여 참, 거짓을 확인

→ 연산 결과는 논리형(bool), 즉 True or False

 

[예시] 숫자 비교 연산

a = 1
b = 2

print("{} < {} : {}".format(a, b, a < b))
print("{} <= {} : {}".format(a, b, a <= b))
print("{} > {} : {}".format(a, b, a > b))
print("{} >= {} : {}".format(a, b, a >= b))
print("{} == {} : {}".format(a, b, a == b))
print("{} != {} : {}".format(a, b, a != b))
1 < 2 : True
1 <= 2 : True
1 > 2 : False
1 >= 2 : False
1 == 2 : False
1 != 2 : True

 

[예시] 아스키 코드를 이용한 문자 비교 연산 (아스키 코드표 링크 넣기)

# 아스키 코드 비교 연산

a = "A" # 아스키 코드 A는 십진법 숫자 65에 해당
b = "B" # 아스키 코드 B는 십진법 숫자 66에 해당

print("{} < {} : {}".format(a, b, a < b))
print("{} <= {} : {}".format(a, b, a <= b))
print("{} > {} : {}".format(a, b, a > b))
print("{} >= {} : {}".format(a, b, a >= b))
print("{} == {} : {}".format(a, b, a == b))
print("{} != {} : {}".format(a, b, a != b))
A < B : True
A <= B : True
A > B : False
A >= B : False
A == B : False
A != B : True

 

  • 문자와 아스키 코드 변환 코드
a = "A"
b = "B"
n1 = 65
n2 = 66

print("문자 \'{}\'의 변환 결과: {}".format(a, ord(a)))
print("문자 \'{}\'의 변환 결과: {}".format(b, ord(b)))

print("숫자 \'{}\'의 변환 결과: {}".format(n1, chr(n1)))
print("숫자 \'{}\'의 변환 결과: {}".format(n2, chr(n2)))
문자 'A'의 변환 결과: 65
문자 'B'의 변환 결과: 66
숫자 '65'의 변환 결과: A
숫자 '66'의 변환 결과: B

 

[예시] 문자열 비교 연산

a = "HELLO"
b = "Hello"

print("{} == {} : {}".format(a, b, a == b))
print("{} != {} : {}".format(a, b, a != b))
HELLO == Hello : False
HELLO != Hello : True

* 문자열 비교 연산은 대,소문자를 구분

* "==" or "!=" 의 비교 연산만 가능. (<, <=, >, >= 불가)

 

 

논리 연산자

피연산자의 논리(True, False)를 이용한 연산

 

and 연산

A and B: A와 B 모두 True인 경우에만 True라는 결과값을 도출

True and True → True

True and False → False

False and True → False

False and False → False

 

or 연산

A or B: A와 B 중 하나만 True면 True라는 결과값을 도출

True and True → True

True and False → True

False and True → True

False and False → False

 

not 연산

not A: A의 상태를 부정하는 결과값을 도출

not True False

not False True

 

논리 연산 응용 문제

- 국어, 영어, 수학 점수가 평균 70점 이상이면 합격 (단, 과목별 60점 미만 시 과락)

kor = 95
eng = 59
math = 100
avgScore = (kor + eng + math) / 3

passAvgScore = 70
minScore = 60

avgResult = avgScore >= passAvgScore
korResult = kor >= minScore
engResult = eng >= minScore
mathResult = math >= minScore

subjectResult = not(korResult and engResult and  mathResult)

print("평균 점수: {} / 통과 여부: {}".format(avgScore, avgResult))
print("국어 점수: {} / 통과 여부: {}".format(kor, korResult))
print("영어 점수: {} / 통과 여부: {}".format(eng, engResult))
print("수학 점수: {} / 통과 여부: {}".format(math, mathResult))
print("과락 여부 :", subjectResult)
print("합격 여부 :"not subjectResult and avgResult)
평균 점수: 84.66666666666667 / 통과 여부: True
국어 점수: 95 / 통과 여부: True
영어 점수: 59 / 통과 여부: False
수학 점수: 100 / 통과 여부: True
과락 여부 : True
합격 여부 : False

 

'Programming' 카테고리의 다른 글

[파이썬] 조건문  (0) 2022.04.28
[파이썬] 자료형 변환  (0) 2022.04.27
[파이썬] 자료형(Data Type)  (0) 2022.04.27
[파이썬] 변수  (0) 2022.04.27

댓글