관리 메뉴

bright jazz music

220319 파이썬 연산자 본문

Language/python

220319 파이썬 연산자

bright jazz music 2022. 3. 19. 09:34
n = -10

print('+n = ', +n)
#+n =  -10

print('+n = ', -n)
#+n =  10

print('n = ',n)
#n =  -10

print(10/3)
#3.3333333333333335

print(10/2) #정수가 아니라 실수로 표현한다.
#5.0

print(10/3)
3.3333333333333335   #실수값은 오차가 발생한다. 5는 절대로 나올 수가 없는데



print(10//3)  #나눗셈의 몫을 구한다. '/' 연산을 한 뒤에 소수부분을 전부 버린다.
#3


print(10%3) #나머지를 구한다. 짝수 홀수를 판별하는 경우 등에 사용한다. 배수 여부 시에도 사용. if(a/5==0)
#1


print(10*3)
#30

print(10**3)  #거듭제곱 표현은 **을 사용한다. ***한다고 하여 세제곱을 하지는 않는다.
#1000

print(10**10)
#10000000000

print(10***10)
#SyntaxError: invalid syntax





#같은 자료형을 연산하는 경우 피연산자항과 같은 자료형의 결과값을 가짐.
#1 + 2 ==> 3  vs. 1.2 + 3.4 ==> 4.6

#나눗셈 연산의 결과는 항상 실수이다.
#예) 10/2 ==> 5.0

#다른 자료형을 연산하는 경우 더 넓은 범위를 갖는 피연산자 자료형의 결과값을 가짐
#예) 1 + 2.3 ==> 3.3

#실제로는 정수를 실수로 변환해서, 1을 1.0으로 변환하여 계산한다.




#내장함수 input()은 입력된 값을 항상 문자열로 반환한다.
#따라서 숫자 문자로 구성된 문자열을 숫자 데이터로 변환 필요
# 내장함수 int(), float()을 사용하여 각각 정수와 실수로 변환



n = input('n을 입력하세요.')
#n을 입력하세요.123

n+1

#Traceback (most recent call last):
#  File "<pyshell#48>", line 1, in <module>
#    n+1
#TypeError: can only concatenate str (not "int") to str

#계산을 하려면 실수나 정수여야함. 그런데 인풋값은 스트링값임. 따라서 변환 필요


#방법1
n = input('정수를 입력하세요')
n = int(n) #이부분에서 int()를 사용해서 변환해줌.

#방법2
n = int(input('정수를 입력하세요')) #input의 반환값을 그대로 정수로 변환해줌

 

 

같은 자료형을 연산하는 경우 피연산자항과 같은 자료형의 결과값을 가짐.

 

1 + 2 ==> 3  vs. 1.2 + 3.4 ==> 4.6

 

나눗셈 연산의 결과는 항상 실수이다.

예) 10/2 ==> 5.0

 

다른 자료형을 연산하는 경우 더 넓은 범위를 갖는 피연산자 자료형의 결과값을 가짐

 

예) 1 + 2.3 ==> 3.3

 

실제로는 정수를 실수로 변환해서, 1을 1.0으로 변환하여 계산한다.

 

 

#사용자 함수 선언부
def show_division(dividend, divisor):
    
    quotient = dividend // divisor
    remainder = dividend % divisor

    print('몫(quotient)==>', quotient)
    print('나머지(remainder)==>', remainder)


#주프로그램부

dividend = int(input('피젯수를 정수로 입력하세요 '))

divisor = int(input('젯수를 정수로 입력하세요 '))

show_division(dividend, divisor)


#함수를 두 개 만들어서 호출하는 것이 번거롭다고 생각하여
#호출되는 함수에서 출력까지 하기로 하였다.

#이 프로그램의 문제는 실수와 0을 입력하는 경우 오류가 발생한다는 것이다.
# 피젯수가 0이면 몫과 나머지가 모두 0이 나오고, 젯수에 0이 들어가는 경우 오류난다.




#-----------------------결과---------------------------


=============== RESTART: D:/personal/grd/python/220319_python.py ===============
피젯수를 정수로 입력하세요 0
젯수를 정수로 입력하세요 1
몫(quotient)==> 0
나머지(remainder)==> 0

=============== RESTART: D:/personal/grd/python/220319_python.py ===============
피젯수를 정수로 입력하세요  1
젯수를 정수로 입력하세요 0
Traceback (most recent call last):
  File "D:/personal/grd/python/220319_python.py", line 19, in <module>
    show_division(dividend, divisor)
  File "D:/personal/grd/python/220319_python.py", line 6, in show_division
    quotient = dividend // divisor
ZeroDivisionError: integer division or modulo by zero

=============== RESTART: D:/personal/grd/python/220319_python.py ===============
피젯수를 정수로 입력하세요 123
젯수를 정수로 입력하세요 123
몫(quotient)==> 1
나머지(remainder)==> 0

=============== RESTART: D:/personal/grd/python/220319_python.py ===============
피젯수를 정수로 입력하세요 2.5
Traceback (most recent call last):
  File "D:/personal/grd/python/220319_python.py", line 16, in <module>
    dividend = int(input('피젯수를 정수로 입력하세요 '))
ValueError: invalid literal for int() with base 10: '2.5'

 

 

대입연산자

 

 

1+2가 먼저 연산되어 이름 없는 임시 변수에 저장됨. 그리고 나서 n1에 담기는 대입 연산이 일어나는 것임.

 

다중 대입문

 

x = y = z = 1;  #z = 1; y=z; x = y;

x = (y = (z=1))



좌변의 변수들에 순서대로 우변의 표현식 값들을 순차적으로 대입

x, y = 1, 2 #x=1; y=2;

x, y  = y, x #tmp = x; x = y; y = tmp;

 

 

축약 대입 연산자

 

자기 할당문을 좀 더 간략하게 표현하기 위해 사용

-  산술 + 대입연산자, 비트 +대입연산자

- 의미는 결합되었으나 그 자체로 독립된 연산자이다

   - 모든 기호를 반드시 붙여 기술

   - 기호가 항상 마지막에 기술

 

- 축약 대입연산자의 읜쪽항은 L-값이어야 한다. 변수여야 함.

 

 

 

 

 

거스름돈 실습

#거스름돈 계산

#물건을 구매한 고객에게 물건 값을 받고 잔돈이 발생하는 경우
#최소한의 지폐를 이용해 거슬러주려 한다.

#문제를 간단히 하기 위해 다음을 가정
# 고객으로부터 지불받은 금액은 항상 구매금액 이상임
# 물건값과 잔돈은 모두 1,000원권과 5,000원권 지폐만 사용



#함수선언부

def show_change(amount):
    print('잔돈:', amount, '원')

    n5000 = amount // 5000 #잔돈 중 5000원권 지불
    amount %= 5000 # 5000원권을 지불하고 남은 잔돈. 축약대입연산자 사용
    
    n1000 = amount // 1000 #잔돈 중 1000원권 지불
    coinChange = amount % 1000
    
    print('> 5000원권 :', n5000)
    print('> 1000원권 :', n1000)
    print('> 동전 :', coinChange)



#주프로그램부
total_cost = int(input('구매한 물건의 총 구매 금액은? '))
print('total_cost', total_cost)
payment = int(input('고객으로부터 지불받은 금액은?  '))
print('payment', payment)

change = payment - total_cost
print(change)


show_change(change) #함수호출




#구매한 물건의 총 구매 금액은? 7900
#total_cost 7900
#고객으로부터 지불받은 금액은?  10000
#payment 10000
#2100
#잔돈: 2100 원
#> 5000원권 : 0
#> 1000원권 : 2
#> 동전 : 100

 

 

 

 

 

 

Comments