본문 바로가기
Python/Python 강의

[Python] 3. 연산자 및 수식

by ♡˖GYURI˖♡ 2023. 8. 20.

1. 연산자 소개

수식을 구성하는 다양한 연산자

  • 산술 연산자
  • 복합 대입 연산자
  • 관계 연산자
  • 논리 연산자
  • 비트 연산자

 

2. 산술 연산자

: 더하기, 빼기, 곱하기, 나누기, 몫, 나머지를 구하기 위해 사용되는 연산자

연산자 기호

덧셈 +
뺄셈 -
곱셈 *
나눗셈 /
//
나머지 %

덧셈 연산자 : +

x = 300 + 800 + 200 + 700
print(x)

뺄셈 연산자 : -

x = 5000 - 900 - 1100 - 1200
print(x)

곱셈 연산자 : *

x = 1 * 2 * 3 * 4 * 5
print(x)

나눗셈 연산자 : /

x = 70 / 4
print(x)

몫 연산자 : //

x = 100 // 7
print(x)

나머지 연산자 : %

x = 100 % 7
print(x)

몫을 구하는 연산자(//)와 나머지를 구하는 연산자(%) 예제

input_minute = 601
hour = input_minute // 60
minute = input_minute % 60
print(hour, '시간', minute, '분')

 

3. 복합 대입 연산자

산술 연산자와 대입 연산자를 합친 연산자

복합 대입 연산자 사용 예 의미

+= i += j i = i + j
-= i -= j i = i - j
*= i *= j i = i * j
/= i /= j i = i / j
%= i %= j i = i % j

복합 대입 연산자 예제 : +=

bread_price = 100
soda_price = 300
butter_price = 400
sum = bread_price 
sum += soda_price
sum += butter_price

print("total price:", sum)

 

4. 관계 연산자

두 피연산자를 비교하는 연산자

관계 연산자는 True(참) 또는 False(거짓)으로 결과 표현

관계 연산자 사용 예 의미

> i > j i가 j보다 큰가?
>= i >= j i가 j보다 크거나 같은가?
< i < j i가 j보다 작은가?
<= i <= j i가 j보다 작거나 같은가?
== i == j i와 j가 같은가?
!= i != j i와 j가 같지 않은가?

정수 비교

x = 32
y = 78
print(x >= y)

실수 비교

x = 3.14
y = 7.89
print(x > y)

문자열 비교

x = 'good'
y = 'good'
print(x == y)
x = 'good'
y = 'morning'
print(x > y)

# 사전 상 순서

 

5. 논리 연산자

피연산자의 조건에 따라서 True(참) 또는 False(거짓)으로 결과 표현

논리 연산자 사용 예 의미

and i and j i와 j가 모두 True이면 True 반환
그렇지 않으면 False 반환    
or i or j i와 j 중에서 하나라도 True이면 True 반환
i와 j가 모두 False이면 False 반환    
not not i i가 True이면 False 반환
i가 False이면 True 반    

and 연산자

w  = 25
x = 72
y = 'good'
z = 'evening'
print(w < x and y == z)

or 연산자

w = 3.14
x = 7.89
y = 'good'
z = 'morning'
print(w > x or y == z)

not 연산자

y = 'good'
z = 'morning'
s = y != z
print(not s)

 

6. 비트 연산자

비트 연산자는 숫자(정수)의 각 비트에 대한 연산 수행

& 비트 연산자

비트가 1과 1이면 1을 반환, 그 외의 경우에는 0을 반환

op1 = 10
op2 = 12
print('binary notation of', op1, ':', bin(op1))
print('binary notation of', op2, ':', bin(op2))
result = op1 & op2
print('binary notaton of', result, ':', bin(result))

| 비트 연산자

비트가 0과 0이면 0을 반환, 그 외의 경우에는 1을 반환

op1 = 10
op2 = 12
print('binary notation of', op1, ':', bin(op1))
print('binary notation of', op2, ':', bin(op2))
result = op1 | op2
print('binary notaton of', result, ':', bin(result))

^ 비트 연산자

비트가 서로 다른 경우(1과 0 또는 0과 1)이면 1을 반환, 그 외의 경우에는 0을 반

op1 = 10
op2 = 12
print('binary notation of', op1, ':', bin(op1))
print('binary notation of', op2, ':', bin(op2))
result = op1 ^ op2
print('binary notaton of', result, ':', bin(result))

~ 비트 연산자

비트가 0이면 1을 반환, 비트가 1이면 0을 반

op1 = 0b0101
op2 = 0b1111
result = ~op1&op2
print('result:', bin(result), ', decimal notation:', result)

시프트 연산자

  • 왼쪽 시프트 연산자(<<) : 한 비트를 왼쪽으로 이동하는 것은 2의 곱을 의미
  • 오른쪽 시프트 연산자(>>) : 한 비트를 오른쪽으로 이동하는 것은 2로 나눔을 의미
op1 = 10
print('binary notation of ', op1, ':', bin(op1))
result = op1 << 1
print(op1, '<< 1 =>', result)
print('binary notation of ', result, ':', bin(result))
op2 = 12
print('binary notation of ', op2, ':', bin(op2))
result = op2 >> 1
print(op2, '>> 1 =>', result)
print('binary notation of ', result, ':', bin(result))

문자열 출력

f-string을 이용한 문자열에 값의 대입

num1 = 500
num2 = 900
sum = num1 + num2
unit = 'meters'
print(f'{num1} + {num2} = {sum}{unit}')
year = 2022
month = 8
day = 10
print(f'{year}년 {month}월 {day}일')

 

7. 실습예제

입력받은 초(second)를 시간, 분, 초로 환산하는 문제

  • 문제 : ‘초 입력(second):’이라는 입력 안내 메시지를 출력하고 입력 받아서 정수형으로 변수 input_second에 저장한다. 입력 받은 초를 시간, 분, 초로 환산하여 변수 hour, minute, second에 각각 저장한다. print 함수를 이용하여 주어진 출력 형식으로 결과를 출력하는 코드를 작성한다.
  • 힌트
    • 시간 = 입력 받은 초(second) // 3600
    • 초(나머지) = 입력 받은 초(second) % 3600
    • 분 = 초(나머지) // 60
    • 초 = 초(나머지) % 60
  • 출력 형식 : ‘시간: 분: 초’
  • 입력
    • input 함수를 이용하여 ‘초 입력(second):’ 출력
    • 입력된 초를 정수형으로 변환하여 변수 input_second에 저장
  • 계산
    • hour = input_second // 3600
    • r_second = input_second % 3600
    • minute = r_second // 60
    • second = r_second % 60
  • 출력
    • 출력 형식에 맞게 print로 계산 결과 출력
input_second = int(input('초 입력(second):'))
hour = input_second // 3600
r_second = input_second % 3600
minute = r_second // 60
second = r_second % 60
print(f'{hour} 시간: {minute} 분: {second} 초')

구매물건의 지불가격을 계산하는 문제

  • 문제 : 3개 구매물건의 가격 입력을 위해서, ‘음료수 가격 입력:’, ‘계란 가격 입력:’, ‘우유 가격 입력:’ 이라는 각각 입력 안내 메시지를 출력하고 입력 받아서 정수형으로 변수 drink_price, egg_price, milk_price에 각각 저장한다. 변수를 이용하여 입력 받은 3개 물건 가격의 합을 구한다. 구매물건에 대한 10% 할인이 적용되며 할인이 적용된 지불가격을 계산한다. print 함수를 이용하여 주어진 출력 형식으로 결과를 출력하는 코드를 작성하시오.
  • 힌트 : 복합 대입 연산자를 이용하여 구매물건 가격의 합을 계산
  • 출력 형식 : ‘물건 가격의 합:___ , 할인금액:___ , 지불가격:___’
drink_price = int(input('음료수 가격 입력:'))
egg_price = int(input('계란 가격 입력:'))
milk_price = int(input('우유 가격 입력:'))
sum = drink_price
sum += egg_price
sum += milk_price
total_sum = sum
discount = sum * 0.1
sum -= discount
print(f'물건 가격의 합:{total_sum}, 할인금액:{discount}, 지불가격:{sum}')

원리금 계산 문제 : 원금, 이율, 세율을 입력 받고 세후 이자 소득을 계산하여 최종 원리금을 계산하는 문제

  • 문제 : ‘원금 입력(원):’ 이라는 입력 안내 메시지를 출력하고 입력 받아서 정수형으로 원금을 변수 won에 저장. ‘이율 입력:’이라는 입력 안내 메시지를 출력하고 입력 받아서 실수형으로 이율을 변수 interest_rate에 저장. ‘세율 입력:’이라는 입력 안내 메시지를 출력하고 입력 받아서 실수형으로 세율을 변수 tax_rate에 저장. 원금, 이율, 세율을 이용하여 최종 원리금을 계산하고 변수 total에 저장. Print 함수를 이용하여 주어진 출력 형식으로 결과를 출력하는 코드를 작성하시오.
  • 힌트
    • 원금과 이율로 이자 소득을 계산하고 계산된 이자 소득과 세율을 이용하여 이자 소득세를 계산한다. 이자 소득에서 이자 소득세를 빼서 세후 이자 소득을 계산하고 원금과 합산하여 최종 원리금을 구한다.
  • 출력 형식 : 원금:원, 원리금:
won = int(input('원금 입력(원):'))
interest_rate = float(input('이율 입력:'))
tax_rate = float(input('세율 입력:'))

interest = won * interest_rate          # 이자 소득
tax = interest * tax_rate               #이자 소득세
interest_after_tax = interest - tax     #세후 이자 소득
total = won + interest_after_tax        #최종 원리금

print(f'원금:{won}원, 원리금:{total:.1f}원')

 

8. 마무리

  1. 산술 연산자 : 기본적으로 사용되는 산술 연산자 (+ - * / // % )
  2. 복합 대입 연산자 : 산술 연산자와 대입 연산자를 합친 연산자 ( += -= *= /= %/ )
  3. 관계 연산자 : 두 피연산자를 피교하는 연산자 ( > >= < <= == != )
  4. 논리 연산자 : 피연산자의 조건에 따라서 True 또는 False로 결과 표현
  5. 논리 연산자에는 and, or, not
  6. 비트 연산자 : 비트에 대한 연산 수행 ( & | ^ ~ << >> )

'Python > Python 강의' 카테고리의 다른 글

[Python] 5. 반복문  (0) 2023.08.20
[Python] 4. 조건문  (0) 2023.08.20
[Python] 2. 변수 및 자료형  (0) 2023.08.20
[Python] 1. 파이썬 및 파이참 설치  (0) 2023.08.20