[Python] 연산자

·2023년 3월 2일
0

[Python] 제로베이스

목록 보기
4/11
post-thumbnail

✒️연산자

result = A + B : = , + 가 연산자

연산자 종류

산술 연산자 : +, -, *, /, %
할당 연산자 : =, +=, -=, /=
비교 연산자 : >, >=, <, <=
논리 연산자 : and, or, not

✒️산술 연산자


num1 = 13
num2 = 223.456
sum = num1 + num2
print("num1+num2=%.2f" % sum)

📌결과

num1+num2=236.46

partTimeMoney = int(input("알바비:"))
cardMoney = int(input("카드값:"))
result = partTimeMoney - cardMoney
print('알바비 : {}  -  카드값 : {} = 잔액 : {}'.format(partTimeMoney, cardMoney, result))

📌결과
 
알바비:2000000
카드값:1800000
알바비 : 2000000  -  카드값 : 1800000 = 잔액 : 200000

str = 'hi '
print("{}".format(str * 8))

📌결과
hi hi hi hi hi hi hi hi 

나머지 연산자

divmod( num1, num2 )


num1 = 3
num2 = 1
print(f"{num1} 나누기 {num2} \n몫 = {num1 / num2} 나머지 = {num1 % num2}")

📌결과

3 나누기 1= 3.0 나머지 = 0

result = divmod(num1, num2)
print("몫 : %.0f" % result[0])
print("나머지 : %d" % result[1])

📌결과

몫 : 3
나머지 : 0


allStudent = int(input("전체 학생 수 : "))
studentGroup = int(input("모둠 별 학생 수 :"))
groupCnt = int(allStudent / studentGroup)
overStudent = allStudent % studentGroup

print(f'모둠 수 : {groupCnt}  남은 학생 수 : {overStudent}')

📌결과

전체 학생 수 : 100
모둠 별 학생 수 :8
모둠 수 : 12  남은 학생 수 : 4

거듭제곱 연산자


num1 = 2
num2 = 3

result = num1 ** num2
print(result)

📌결과
8

제곱근 구하기

n의 m제곱근 공식
n ** (1/m)


result1 = 2 ** (1 / 2)
result2 = 2 ** (1 / 3)
result3 = 2 ** (1 / 4)

print("2의 2제곱근 : %.2f" % result1)
print("2의 3제곱근 : %.2f" % result2)
print("2의 4제곱근 : %.2f" % result3)

📌결과
22제곱근 : 1.41
23제곱근 : 1.26
24제곱근 : 1.19

math 모듈의 sqrt()와 pow() 함수

sqrt 함수는 2의 제곱근만 구해줌


import math

print("2의 2제곱근 : %.2f" % math.sqrt(2))
print("2의 3제곱근 : %.2f" % math.sqrt(3))
print("2의 4제곱근 : %.2f" % math.sqrt(4))

print("3의 거듭 제곱 : %d" % math.pow(3, 2))
print("3의 세제곱 : %d" % math.pow(3, 3))
print("3의 네제곱 : %d" % math.pow(3, 4))

📌결과

22제곱근 : 1.41
23제곱근 : 1.73
24제곱근 : 2.00
3의 거듭 제곱 : 9
3의 세제곱 : 27
3의 네제곱 : 81

✍️실습

첫 달 용돈은 200이며 다음 달이 될때마다 전 달의 두배씩 올리니다면 12월달의 용돈은?


firstMonthMoney = 200
after12Month = int(firstMonthMoney * math.pow(2, 11))
print(f"1월 용돈 : {firstMonthMoney} ... 12월 용돈 : {after12Month}")


📌결과

1월 용돈 : 200 ... 12월 용돈 : 409600

✒️복합 연산자

  • += 덧셈 연산 후 할당
  • -= 뺄셈 연산 후 할당-
  • /= 나눗셈 연산 후 할당
    . . .

✍️실습

누적 강수량 구하기


rainAvgAmount = 0
totalAmount = 0

totalAmount += 30
print(f"1월 누적 강수량 : {totalAmount}")

totalAmount += 50
print(f"2월 누적 강수량 : {totalAmount}")

totalAmount += 120
print(f"3월 누적 강수량 : {totalAmount}")

totalAmount += 40
print(f"4월 누적 강수량 : {totalAmount}")

totalAmount += 75
print(f"5월 누적 강수량 : {totalAmount}")

rainAvgAmount = totalAmount / 5
print("평균 강수량 : %.2f" % rainAvgAmount)
print(f"전체 강수량 : {totalAmount}")

📌결과

1월 누적 강수량 : 30
2월 누적 강수량 : 80
3월 누적 강수량 : 200
4월 누적 강수량 : 240
5월 누적 강수량 : 315
평균 강수량 : 63.00
전체 강수량 : 315

✒️비교 연산자

숫자 비교

✍️실습

자동차의 전장과 진폭을 입력하면 자동차 기계 세차 가능여부를 출력하는 코드를 작성해 보자. (최대 전장 길이 : 5200mm, 최대 전폭 길이 : 1985mm )


maxLength = 5200
maxWidth = 1985

myCarLength = int(input("전장 길이 : "))
myCarWidth = int(input("전폭 길이 : "))

print(f'전장 가능 여부 : {myCarLength <= maxLength}')
print(f'전폭 가능 여부 : {myCarWidth <= maxWidth}')


📌결과

전장 길이 : 5100
전폭 길이 : 2000
전장 가능 여부 : True
전폭 가능 여부 : False

문자 비교

아스키 코드를 이용한 비교 연산

ASCII CODE

char1 = 'A'  # 65
char2 = 'H'  # 72

print('\'{}\' > \'{}\' : {}'.format(char1, char2, char1 > char2))
print('\'{}\' >= \'{}\' : {}'.format(char1, char2, char1 >= char2))
print('\'{}\' < \'{}\' : {}'.format(char1, char2, char1 < char2))
print('\'{}\' <= \'{}\' : {}'.format(char1, char2, char1 <= char2))
print('\'{}\' == \'{}\' : {}'.format(char1, char2, char1 == char2))
print('\'{}\' != \'{}\' : {}'.format(char1, char2, char1 != char2))

📌결과

'A' > 'H' : False
'A' >= 'H' : False
'A' < 'H' : True
'A' <= 'H' : True
'A' == 'H' : False
'A' != 'H' : True


# 문자 -> 아스키 코드
print(' \'a\' -> {} '.format(ord('a')))
print(' \'h\' -> {} '.format(ord('h')))

# 아스키 코드 -> 문자
print(' 97 -> {} '.format(chr(97)))
print(' 104 -> {} '.format(chr(104)))

📌결과

 'a' -> 97 
 'h' -> 104 
 97 -> a 
 104 -> h 

문자열 비교

문자열은 아스키 코드를 이용해 비교하는 문자와 다르게 문자열 자체를 비교하므로 == 와 != 만 비교 가능


Hello == hello : False
Hello != hello : True
Hello > hello : False
Hello < hello : True

📌결과

Hello == hello : False
Hello != hello : True 
Hello > hello : False #비교기준이 뭔지 알아볼 필요 있음 
Hello < hello : True

✒️논리 연산자

논리 연산자란, 피연산자의 논리를 이용한 연산

논리 연산자 종류 : and, or, not

  • and : A와 B 모두 True 면 True
  • or : A와 B 중 하나만 True 면 True
  • not A : A가 True 면 False
print('{} and {} : {}'.format(True, True, True and False))
print('{} and {} : {}'.format(True, True, True and True))
print('{} or {} : {}'.format(True, True, True or True))
print('{} or {} : {}'.format(True, True, True or False))
print('{} not : {}'.format(True, (not True)))
print('{} not : {}'.format(False, (not False)))

📌결과

True and True : False
True and True : True
True or True : True
True or True : True
True not : False
False not : True

✍️실습

국어, 영어, 수학 점수를 입력하고 평균이 70점 이상이면 True를 출력하는 코드 작성 (단, 과복별 점수가 최소 60 이상인 경우에 True를 출력)



mathScore = int(input("수학 : "))
engScore = int(input("영어 : "))
korScore = int(input("국어 : "))
passScore = 60
avg = (mathScore + engScore + korScore) / 3
mathResult = mathScore >= 60
engResult = engScore >= 60
korResult = korScore >= 60
result = ((avg > 70) and mathResult and engResult and korResult)

print(f"math : {mathResult} | eng : {engResult} | kor : {korResult} | PASS : {result}")

📌결과

수학 : 85
영어 : 58
국어 : 90
math : True | eng : False | kor : True | PASS : False

✒️모듈

모듈이란, 누군가 이미 만들어 놓은 훌륭한 기능

Operator 모듈

산술 연산자 관련 모듈

  • '+' : operator.add()
  • '-' : operator.sub()
  • '*' : operator.mul()
  • '/' : operator.truediv()
  • '%' : operator.mod()
  • '//' : operator.floordiv()
  • '**' : operator.pow()

num1 = 8
num2 = 3

print("{} + {} = {}".format(num1, num2, operator.add(num1, num2)))
print("{} - {} = {}".format(num1, num2, operator.sub(num1, num2)))
print("{} / {} = {}".format(num1, num2, operator.truediv(num1, num2)))
print("{} % {} = {}".format(num1, num2, operator.mod(num1, num2)))
print("{} // {} = {}".format(num1, num2, operator.floordiv(num1, num2)))
print("{} ** {} = {}".format(num1, num2, operator.pow(num1, num2)))

📌결과

8 + 3 = 11
8 - 3 = 5
8 / 3 = 2.6666666666666665
8 % 3 = 2
8 // 3 = 2
8 ** 3 = 512


비교 연산자 관련 모듈

  • '==' : operator.eq()
  • '!=' : operator.ne()
  • '>' : operator.gt()
  • '>=' : operator.ge()
  • '<' : operator.lt()
  • '<=' : operator.le()

num1 = 8
num2 = 3
print("{} == {} = {}".format(num1, num2, operator.eq(num1, num2)))
print("{} != {} = {}".format(num1, num2, operator.ne(num1, num2)))
print("{} > {} = {}".format(num1, num2, operator.gt(num1, num2)))
print("{} >= {} = {}".format(num1, num2, operator.ge(num1, num2)))
print("{} < {} = {}".format(num1, num2, operator.lt(num1, num2)))
print("{} <= {} = {}".format(num1, num2, operator.le(num1, num2)))

📌결과

8 > 3 = True
8 >= 3 = True
8 < 3 = False
8 <= 3 = False

논리 연산자 관련 모듈

  • and : operator.and_()
  • or : operator.or_()
  • not : operator.not_()

print("{} and {} = {}".format(num1, num2, operator.and_(num1, num2))) #논리곱
print("{} or {} = {}".format(num1, num2, operator.or_(num1,num2))) #논리합
print("not {} = {}".format(num1, operator.not_(num1)))

📌결과

8 and 3 = 0
8 or 3 = 11
not 8 = False

✍️실습

백신 접송 대상자는 20세 미만 또는 65세 이상에 한합니다.


age = int(input("나이 : "))
vaccine = operator.or_(operator.ge(age, 65), operator.lt(age, 20))

print(f'age : {age} vaccine : {vaccine}')

📌결과

나이 : 65
age : 65 vaccine : True

random 과 operator 모듈을 사용해서 10 부터 100까지 난수 중 십의 자리와 일의 자리가 각각 3배수인지 판단하는 코드를 작성해보자.


randomInt = random.randint(10, 100)
num10 = operator.floordiv(randomInt, 10)
num1 = operator.mod(randomInt, 10)

print(f"랜덤 숫자 : {randomInt}")
print(f"십의 자리 : {num10}\n일의 자리 : {num1}")
print(f"십의 자리 : {num10}\n일의 자리 : {num1}")
print(f"십의 자리가 3의 배수 인가 : {operator.mod(num10, 3) == 0} ")
print(f"일의 자리가 3의 배수 인가 : {operator.mod(num1, 3) == 0} ")

📌결과

랜덤 숫자 : 86
십의 자리 : 8
일의 자리 : 6
십의 자리 : 8
일의 자리 : 6
십의 자리가 3의 배수 인가 : False 
일의 자리가 3의 배수 인가 : True 
profile
개발하고싶은사람

0개의 댓글