연산자(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(10, 3)
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 |
댓글