AI데이터 분석_ 파이썬 기초3(연산자종류와 연산자 우선순위)

2024. 8. 29. 21:33파이썬을 활용한 데이터 분석

파이썬 연산자

 

연산자 우선순위

  • 최우선 연산자
  • 단항 연산자
  • 산술 연산자
  • 쉬프트 연산자
  • 관계 연산자
  • 논리 연산자
  • 삼항 연산자
  • 대입 연산자

 

최우선 연산자

#최우선 연산자 : 가장 먼저 계산하는것
#최우선 연산자 종류: (),[]

print(10-3*10) #괄호없이 계산하면 -20이 나옴 *먼저 계산되었기때문
print((10-3)*10) #괄호로 묶으면 60이 나옴. 괄호안에 있는게 먼저 계산

최우선 연산자는 가장 먼저 계산되는 연산자이다. 최우선연산자는 (),[]로 사용하며, 수식중에 가장 먼저 계산되어야하는 것이 있다면 해당 괄호로 감싸서 사용한다.

 

단항연산자

#단항 연산자 : 한개의 항을 사용한 연산자
#단항 연산자 종류: +양수, -음수

print(+10,type(+10)) #+10은 그냥 기본 10
print(-10,type(-10)) #-10은 -10
print(+3.14,type(+3.14)) #실수형도 똑같이 그냥 기본 3.14
print(-3.14,type(-3.14)) #-3.14

단항연산자는 한개의 항을 사용하는 연산자이다. 단항 연산자의 종류에서는 +양수와 -음수가 존재한다. +은 디폴트로 정수 10이 출력되고 -마이너스일경우에만 마이너스로 출력된다.

 

산술연산자

# 산술연산자 : +(덧셈),-(마이너스),/(나누기),//(몫),%(나머지),**(거듭제곱)

#+덧셈
num1 = 10
num2 = 20
print(num1+num2,type(num1+num2)) #정수+정수=정수형

#-뺄셈
print(num1-num2,type(num1-num2)) #정수-정수=정수
print(num1-4.0,type(num1-4.0)) #6.0출력하고 자료형 float. 정수-실수=실수!
print(num1+10.0,type(num1+10.0)) #정수+실수=실수

#*곱하기
print(num1*num2,type(num1*num2)) #정수 * 정수 = 정수
print(num1*10.0,type(num1*10.0)) #정수 * 실수 = 실수

#/ 나누기
print(num2/num1,type(num2/num1))#나누기의 경우 정수/정수 해도 결과가무조건 실수로 출력!
#int/int=float(값이 딱 떨어져도 무조건 실수로 출력)
print(3.14/num1,type(3.14/num1)) #정수 / 실수 가능
print(num1/3.14,type(num1/3.14)) #실수/ 정수 가능

#/나누기 연산자 에러
# print(num1/0,type(num1/0))  #나누기의 분모자리에는 0이 들어갈 수 없기때문에
#0 이 들어가면 무조건 에러가남
# print(3.14/0,type(3.14/0)) #소수 마찬가지로 0이들어가면 에러
# print(0/3.14,type(0/3.14))

#//몫
print(num2//num1,type(num2//num1)) #20나누기 10은 2이기때문에 몫인 2가 출력되며
#20/10의 몫은 딱 2로 떨어지므로 소수점이 아니여서 정수출력
print(10//3,type(10/3)) # 10/3 = 3.3333333....에서 뒤에 소수점자리 빼고 3만 출력함
#10/3은 결론적으로는 3.3333인 소수이므로 float인 실수형 출력

#% 나머지
num3 = 10
num4 = 3
print(num3%num4,type(num3%num4)) # 1출력 나머지를 가져오며 정수형!

#%나머지 연산자로 구별하는 짝수, 홀수!
#짝수 : 2로 나누면 나머지가 무조건 0
#홀수  :2로 나누면 나머지가 무조건 1
print(10%2,type(10%2)) #정수형이면서 나머지 0
print(11%2,type(11%2)) #정수형이면서 나머지 1

#%나머지 연산자로 배수 구분하기
#3의 배수를 구할때 3으로나누면 나머지 0, 4의 배수를 구할때 4로 나누면 나머지 0
print(9%3,type(9%3)) #3은 9의 배수. 나머지 0 출력
print(10%2,type(10%2)) #10은 짝수이면서 2의배수. 나머지 0출력

#**거듭제곱
print(10**2,type(10**2)) #10*10=100 정수형 출력
print(num2**10,type(num2**10)) #정수형 출력

산술연산자는 수학에서 사용되는 연산자와 동일하다. +덧셈, -뺄셈, *곱하기, /나누기로 사용한다. 나누기의 경우 분모자리에 0이들어갈 수 없기때문에 0이 들어가게되면 에러가 발생한다. 또한 나누기의 값은 무조건 실수형으로 출력된다.

//몫연산자로 나누기를 했을때 몫을 반환해주며 %나머지 연산자는 나머지를 나눗셈을 했을때 나머지를 반환해준다. 나머지 연산자는 배수나 짝수, 홀수를 구분하는데 주로 사용된다. 마지막으로는 **거듭제곱 연산자가 있다. **거듭제곱 연산자를 사용하여 원하는 값들을 거듭제곱 시킬 수 있다.

 

 

관계연산자

# 관계연산자
#python에서의 관계연산자는 관계에 대한 정의가 아니라 물어보는 뜻
#때문에 관계연산자의 답은 항상 bool(논리형)인 True과 False로만 출력된다!

num1 = 10
num2 = 15

print(num1>num2,type(num1>num2)) #10이 15보다 크니? => 아니! 크지않아!(False)
print(num1<num2,type(num1<num2)) #10이 15보다 작니? => 어! 작아!(True)
print(num1==100,type(num1==100)) #10이 100과 같니? => 아니! 달라!(False)

#<실습>
#f-string을 사용하여 관계연산자 이해하기!
print(f"{num1}>{num2}: {num1>num2}") # f-string으로 식만들어주고
 #{안에 관계연산자를 넣어 값만 출력하는것}
print(f"{num1}<={num2}: {num1<=num2}")
print(f"{num2}>{num1}: {num2>num1}")
print(f"{num1}!={10}: {num1!=10}")

#관계연산자의 ==,!=는 문자열도 계산가능
print('안녕'=='안녕') #안녕은 안녕과 같기때문에 True
print('안녕'!='안녕') #안녕은 안녕과 다르지않기때문에 False

수학에서의 관계연산자는 관계에 대한 정의이지만 파이썬에서는 정의가 아니라 이 관계가 맞냐고 물어보는 뜻이다. 때문에 파이썬에서의 관계연산자의 답은 항상 논리형으로 출력된다. 

즉 5>3이 수학이었다면 5는 3보다 '크다'로 정의 됐겠지만 파이썬에서는 5가 3보다 큰관계니? 하고 물어보는것 이기때문에 크다면 True가 작다면 False가 출력되는 것이다. 관계연산자는 같냐고 물어보는==과 같지 않냐고 물어보는!=도 사용할 수 있으며  이 두가지는 문자열에서도 사용이 가능하다. 

 

논리연산자 

#논리연산자

# 논리연산자 and
num1 = 10
num2 = 0
print(f"{num1}>10 and {num2}>=0: {num1 > 10 and num2 >=0}") #False반환
#10이 10보다 크다는것은 False 0이 0보다 크거나 같다는것은 True

print(f"{num1}>=4 and {num2}==0: {num1>=4 and num2==0}")
#10이 4보다 크다는것은 True 0은 0인것은 True이기때문에 둘다 True로 True를 반환

print(100>= 50 and 400<20) #False
print(100==100 and 40>20) #True

#논리연산자 or
print(f"{num1}>10 or {num2}>=0: {num1>10 or num2 >=0}")
#10이 10보다 크다는 것은 False이지만 0이 0보다 크거나 같다는것은True이므로 True가
#한개라도 포함이 되어있기때문에 or는 True가 반환
print(100>100 or 0==0) #True

#논리연산자 not : 원래 가지고 있는값의 반대값을 반환함
print(not True)
print(not False)
print(f"not{num1}: {not num1}",type(f"not{num1}: {not num1}"))
#자동적으로 논리형변환이 되어 10은 True인데 not인 반대를 보여달라고 했기때문에 False반환
print(f"not{num1}==10: {not num1==10}")

논리연산자는 and와 or, not으로 구성되어있다. and의 경우 둘다 참일경우에만 True를 반환하고 하나라도 거짓이 있다면 False를 반환한다. or의 경우 참이 하나라도 있다면 True를 반환하고 모두 거짓일경우에만 False를 반환한다. not의 경우 출력되는 결과값의 반대값을 반환하는 연산자이다. 결과값이 True라면 False를, False라면 True를 반환한다.

 

삼항연산자

#삼항 연산자
#3개의 항을 이용
#조건식이 참일때 실행: if조건식
#거짓일때 실행 : else

print("True는 참" if True else "False는 거짓")
#조건식에 True가 입력되어있으므로 참일때 실행되는 왼쪽 실행문이 출력
print("True는 참" if False else "False는 거짓")
#조건식에 False가 입력되었으므르 거짓일때 실행되는 오른쪽 실행문이 출력

print("10은 5보다 큽니다" if 10>5 else "10은 5보다 작습니다")

삼항연산자는 3개의 항을 사용하는 연산자이며 if조건식과 비슷한 형태를 가지고 있다. if~else의 조건으로 사용하며 삼항 연산자의 왼쪽에는 if조건문이 참일때 실행되는 실행문을, 오른쪽 else에는 조건식이 거짓일때 실행될 실행문을 적는다.

 

삼항연산자 실습

# <실습1>
#정수를 입력받고 입력받은 정수가 짝수라면 "짝수입니다"출력
#홀수이면 "홀수입니다" 출력

#삼항연산자와 짝수, 홀수구분은 %나머지연산자 활용

#1) 정수입력받기
num= int(input("숫자를 입력해주세요"))

#2)삼항 조건식 작성하기
result="짝수입니다"if num%2==0 else "홀수입니다"
#삼항연산자를 변수안에 넣어 출력하는 방법
# print("짝수입니다"if num%2==0 else"홀수입니다")
#위의 방법처럼 print문에 넣어줄 수 도있음
print(result,type(result))
print("                   ")


#<실습2>
#정수를 입력받고 입력받은 정수가 3의 배수라면 입력받은 정수를 출력하고
#아니라면 '배수가 아닙니다' 출력하기

num1= int(input('숫자를 입력해주세요'))
result2= num1 if num1%3==0 else "3의 배수가 아닙니다"
print(result2)
print("                   ")


#<실습3>
#관계연산자, 삼항 연산자를 활용해서
#정수2개를 입력받고 2개의 숫자의 차이를 절대값으로 출력하는 프로그램만들기
#절대값은 10 -> 10    -10의 절대값은 10

num2 = int(input("첫번째 숫자를 입력해주세요: "))
num3 = int(input("두번째 숫자를 입력해주세요: "))

result3 = num2- num3 if num2>num3 else num2 - num3
print(result3)
print(f"{num2}과 {num3}의 차이는  {result3}입니다")


#밴드이름으로 if문 해보기(print문에 바로출력하기)
band1 = input('밴드이름을 입력하세요: ')
result4="수상자 입니다" if band1=='유다빈 밴드' else "수상자가 아닙니다"
print(result4)
print(f"{band1}은(는) 이번 2024어워드 {result4}")

 

 

대입연산자

# 대입연산자와 복합대입 연산자

#대입연산자 : =
number = 10
print(number) #일반 대입연산자를 사용했기때문에 number에는 10추출

#복합대입 연산자: +=, -=, *=, **=, /=, //=, %= 등등
number +=10
print(number)#위의 number(10)에 10을 더한다음 다시 변수안에 넣었기때문에 20추출

num6= 50
num6 -= 30
print(num6)

num7 = 100
num7 %=2
print(num7)

num8=100
num8 //=2
print(num8)

num9=10
num9/=3
print(num9,type(num9)) #나누기면 무조건 실수

#복합연산자를 사용할때는 변수명 뒤에 대입연산자를 써줄 필요가없음
#ex) num=+=10(X) num+=10(O)

대입연산자는 대입연산자 기준으로 오른쪽에 있는 값을 왼쪽의 저장공간에 저장할때 사용하는 연산자이다. 대입연산자에는 일반 대입연산자 외에도 복합대입연산자라는 것이 존재하ㅡㄴ데 +=,-=처럼 대입연산자가 산술연산자와 같이 사용되는 경우를 말한다. 복합 연산자의 경우 변수에 값을 저장할때 해당 산술을 계산한뒤에 다시 변수에 값을 저장해달라는 뜻으로 사용된다.

 


학습일기

오늘은 연산자파트를 복습했다. 연산자를 처음 배울때도 느꼈지만 연산자들은 개념을 알고있다는 것보다도 너무 기본적인 내용이라 어떻게 활용을 하느냐가 훨씬 중요하다는 것이다. 특히 일반 연산자보다도 복합대입연산자는 반복문과 함께 사용하여 한번 반복될때마다 변수의 값을 재정의 해주는용도로도 많이 사용되기때문에 티스토리를 정리면서 완전한 기초내용을 다시 잡을 수 있어서 좋았다.