Python[1주차-2일] 연산자, 조건문

이동일·2023년 7월 5일

Python

목록 보기
2/10

1. 연산자

1-1 연산자(덧셈,뺄셈)

연산자 종류

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

주의) 숫자와 문자를 이용한 덧셈은 사용 불가능하다.
ex)

result = num1 +str1
print(f;result : {result}'})

1-2 뺄셈 연산자

주의) 문자열을 더할수는 있지만 뺄수는 없다.

str1 = 'Good'
str2= ' '
str3 = 'afternoon'
result = str1- str2 - str3
print('result : {}'.format(result))

1-3 곱셈 연산자

  • 숫자(정수,실수)를 이용한 곱셈이다.
  • 0을 나눗셈 하는경우 결과가 0이 출력된다
    ex) 0/3 -->0
  • 0으로 나누면 에러 메시지가 뜬다.
    ex) 3 / 0 --> 에러

1-4 나눗셈 연산자

  • 나눗셈 결과는 항상 float 타입이다.
  • float를 없앨려면 integer를 사용하자
num1 = 20
num2 = 5
result = num1 / num2

print('result: {}'.format(result))
#실수 4.0이 출력된다.

1-5 산술 연산자(나머지와 몫)

-나눗셈 후 결과 나머지만 구한다.(나누기를 했을때 '나머지'만 구한다.)
ex)

num1 =10
num2 = 3

result = num1 // num2
print(result) #10나누기3 의 나머지 1이 나온다.

divmod()함수

  • 나머지와 몫을 한번에 구해준다.
    ex)
num1 =10
num2 = 3

result = num1 // num2
print(result) #10나누기3 의 나머지 1이 나온다

####### 또다른 예시
allStuCnt = int(input('전체 학생 수:'))
stuCntOfGroup = int(input('한모둠 한생 수: '))

result = divmod(allStuCnt, stuCntOfGroup) # 전체학생25, 한모둠 4 입력시  divmod의 값(6,1)

# groupCnt = allStuCnt // stuCntOfGroup
# overStuCnt = allStuCnt % stuCntOfGroup #남는학생

print('전체 학생 수: {}'.format(allStuCnt))
print('한 모둠 학생 수 : {}'.format(stuCntOfGroup))

print('모둠 수: {}'.format(result[0]))
print('남는 학생 수: {}'.format(result[1]))



1-6 거듭제곱 연산자

  • 같은 수를 여러 번 곱한 값을 구한다.
num1 = 2
num2 = 3

result = num1 ** num2
print('result: {}'.format(result)) #8출력

####################
#제곱근 구하기
#-n의 m제곱근 공식
#n**(1/m)

#2의 2제곱근
result = 2 ** (1/2)
print('result %.2f'% result)



#2의 3제곱근
result = 2 ** (1/3)
print('result %.2f'% result)




#거듭제곱 실습문제
# 첫달 200원을 받고 매월 이전 달의 2배식 인상하기로 한다.
# 12개월째 되는 달에는 얼마를 받을 수있는지 계산해보자
firstMonthMoney = 200

after12Month = ((firstMonthMoney * 0.01) ** 12)* 100
# 200 *0.01 곱하면 2가된다. 괄호밖에 100을
#수행해서 12개월 후 받을 수있는 금액을 구할 수 있다.

print('12개월 후 용돈 : {}'.format(after12Month))
strResult = format(after12Month,',')
print(strResult, '원')

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

  • sqrt, pow 사용시 import math 작성해야한다.
  • sqrt 함수의 경우 2의 제곱근만 구해진다,
  • 한개의 매개변수 필요 -->(2,3)X (2) O
#sqrt() 예시
import math
print(math.sqrt(5)) #5의 제곱근  2.2360....출력


#pow() 예시
import math
print(math.pow(2,3)) # 2*2*2  = 8 출력

1-7 복합연산자

  • '+=' 덧셈 연산 후 할당
  • '-=' 뺼셈 연산 후 할당
  • '*=' 곱셈 연산 후 할당
  • '/=' -> 나눗셈 연산 후 할당
  • '%=' -> 나머지 연산 후 할당
  • '//=' -> 몫 연산 후 할당
  • '**=' -> 거듭제곱 연산 후 할당

복합 연산자 ex)

num1 = 10
num1 +=3 # num1 = num1 + 3
print('num1 : {}'.format(num1))


#거듭 제곱도 가능
num = 10
num **=3 # num = num**3
print('num: {}'.format(num))

1-8 비교연산자(숫자비교)

  • num1> num2 : True
  • num1 >= num2 : True
  • num1 < num2 : False
  • num1 <= num2 : False
  • num1 == num2 : False
  • num1 != num2 : True
    연산 결과는 bool이다.(True, False)****

ex)

num1 = 10; num2 = 5

result = num1 > num2
print('num1 > num2 : {}'.format(result))

result = num1 >= num2
print('num1 > num2 : {}'.format(result))

result = num1 < num2
print('num1 <= num2 : {}'.format(result))

result = num1 == num2
print('num1 == num2 : {}'.format(result))

1-9 비교연산자(문자비교)

1.문자 비교: 아스키 코드를 이용한 비교연산이다.
ex)1
char1 = 'A' #65
char2 = 'S' #83

ex)2
total = char1 > char2
print(total)
A는 S보다 작기때문에 bool의 False가 출력된다.

2.문자와 아스키 코드 변환 (소문자,대문자 값이 서로 다르다)
ex)
ord함수(문자를 10진수 정수로 표현)
print('A -> {}'.format(ord('A))) ->65

char()함수(정수10진수를 문자로 표현)
print('65 -> {}'.format(char(65))) -> A

3.문자열 비교(문자열 자체를 비교 한다.)
크다 작다 와 같은 비교는 못하고 문자열 자체를 비교
ex) str1= 'Hello'와 str2= 'hello' -> Hello와 hello를 비교한다

str1 = 'Hello'
str2 = 'hello'

print('{} == {} : {}'.format(str1,str2, (str1 == str2)))   #False
print('{} != {}: {}'.format(str1,str2, (str1 != str2)))	   #True

1-10 논리 연산자

  • 논리 연산자란, 피연산자의 논리(True,False)를 이용한 연산이다.
  • 종류: and, or, not
  1. and 연산 (A and B --> A와 B모두 True)
  2. or 연산 (A or B: --> A와 B중 어느하나만 True이면 결과 값은 True이다.)
  3. not A 연산(A 상태를 부정하는 결과를 나타낸다.)
#and

print('{} and {}: {}'.format(True, True, (True and True)))
print('{} and {}: {}'.format(False, True, (False and True)))
print('{} and {}: {}'.format(True, False, (True and False)))
print('{} and {}: {}'.format(False, False, (False and False)))

#or
print('{} and {}: {}'.format(True, True, (True or True)))
print('{} and {}: {}'.format(False, True, (False or True)))
print('{} and {}: {}'.format(True, False, (True or False)))
print('{} and {}: {}'.format(False, False, (False or False)))


#not
not A: A이 상태를 부정하는 결과를 나타낸다.
print('not{}: {}'.format(True,(not True)))
#False를 부정했더니 True 출력

print('not{}: {}'.format(False,(not False)))
#True를 부정했더니 False 출력

2 operator 모듈

  • 누군가 이미 만들어 놓은 기능이다.
  • 산술 연사자 관련 함수 사용시 import operator 사용
  • 수학, 난수, 연산자 관련 모듈이다.

종류:
"+" --> operator.add()
"-" --> operator.sub()
"*" --> operator.mul()
"/" --> operator.truediv()
"%" --> operator.mod()
"//" --> operaotr.floordiv()
"**" --> operator.pow()
ex)기본사용

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.mul(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)))

2-1 산술 연산자와 random 함수를 이용한 문제풀이

import random

rInt = random.randint(10, 100) #10~100사이의 랜덤수를 뽑아내서 num10과 num1에 들어간다.
num10 = operator.floordiv(rInt, 10)  #loordiv는 // 를 의미하며 몫만 구한다.  10의자리 구한다
num1 = operator.mod(rInt, 10) #  mod는  %를 의미하며 나머지를 의미한다. 1의자리를 구한다.

print('난수: {}'.format(rInt))
print('십의 자리: {}'.format(num10))
print('일의 자리: {}'.format(num1))

print('십의 자리를 3의 배수이다. : {}'.format(operator.mod(num10, 3) ==0))
print('일의 자리는 3의 배수이다. : {}'.format(operator.mod(num1, 3) ==0))

2-2 비교 연산자, 논리 연산자

  1. 비교연산자

"==" --> operator.eq()
"!=" --> operaotr.ne()
">" --> operator.gt()
">=" --> operator.ge()
"<" --> oprator.lt()
"<=" --> operator.le()

2.논리 연산자 함수
and --> operator.and()
or --> operator.or
()
not --> operator.not_()

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)))

print('---------------')


#비교 연산자와 import operator를 이용한 실습문제
import operator
age = int(input('나이 입력'))
vac = operator.or_(operator.lt(age , 20), operator.ge(age, 65))
#operator.lt 는 비교연산자  '<' '>'를 의미한다.
#operator.ge 는 비교 연산자 '<=' '=>'를 의미한다.

print('age: {}, vaccine: {}'.format(age,vac))

3 조건문

1.조건식이란, 어떤 조건에 따라 실행이 분기 되는 식이다.
2. A if 조건식 else B -> 조건식 결과가 True이면 A실행, 그렇지 않으면 B실행
ex)예제

 num1 = 1000
 num2 = 100

numResult = True if num1 > num2 else False
print('num > num2 : {}'.format(numResult))

print('num1은 num2보다 크다.') if numResult  else print('num1은 num2 보다 크지않다.')


3-1 if와, if~elif

-if 조건문 종류-

  1. if문 -> 단일조건

  2. if~else문 -> 양자택일 (둘중하나 고른다.)

  3. if~elif문 -> 다자택일(다중조건: 여러가지 조건이 나올때 사용한다.)
    ex) 90점이상 A , 80점이상 B, 70점 이상 C

  4. (들여쓰기 필수!)
    if 조건식:
    실행문

ex) if문 기본 예제

if 10 < 5:   #10< 5로 설정되어있으면  if문을 바로 빠져나와서 밑에 조건문이 끝났다.를 실행한다.
   print('10은 5보다 크다')
   print('또 다른 실행문')
   
   # 콜론을 기준으로 밑으로 코드블록이라고 한다. 코드 블록을 들여쓰기를 해야한다.
   # print('10은 5보다 크다') -> 코드 블록
   # print('또 다른 실행문') -> 코드 블록
print('조건문이 끝났다.') #if문의 실행문이 아니므로 항상 실행된다.

3-2 양자택일 조건(if~else)

  1. if~else: 조건식 결과에 따라 둘 중 하나가 실행된다.

    ex) if~else 예시와 구현을 미루는 pass

#pass 키워드

passScore = 80
myScore = int(input('점수 입력:'))

# if myScore >= passScore:
#     print('pass!')
#
# if myScore < passScore:
#     print('Fail')

if myScore >= passScore :
   pass #조건된 실행문은 없지만 넘어간다 는뜻

else:
    pass #지금은 안쓰지만 추후에 사용하겠다
         #출력하면 에러 발생이 없다

###############################



#소수점 첫 번째 자리에서 반올림하는 프로그램을 만들어 보자
#1.소수입력 :3.56 --> 결과: 4
#2.소수입력 :3.14 --> 결과 :3
floatNum = float(input('소수 입력:'))
if floatNum - int(floatNum) >= 0.5:
    #3.56을 넣으면 int(floatNum)은 int에 의해서 3이된다.
    #즉 3.56-3 = 0.56이되어서  >=0.5랑 조건이 충족이되고
    #올림이 되어서 4가 출력이된다.

    #3.14의 경우  0.14가 되어서 >=0.5랑 충족이 되지 않는다.
    #그래서 else로 넘어가고 버림이 되어 3이 출력이된다.

    print('올림: {}'.format(int(floatNum) +1))
else:
    print('버림: {}'.format(int(floatNum)))


3-3 삼한연산자 조건식 두가지 사용법

#1. 조건식 결과에 따른 실행만 하는 경우

print('포인트 사용') if userPoint >= minAblePoint else print('포인트 사용 불가능')
# --> 변수 없이 바로 print함수로 if의 결과가 실행된다.



#2. 조건식 결과를 변수에 할당하는 경우
result = '가능' if userPoint >= minAblePoint else '불가능'
print('포인트 사용 가능 여부 : {}.format(result))
#--> 1번과 달리  문자를 result 변수에 초기화 해서 내용을 출력했다.



#3. if~else문은 모든 조건식(삼항 연산자)를
#if~else로 변경할수있지만 조건식이 너무 많은 경우는 변경이 힘들다


if userPoint >=minAblePoint:
	result = '가능'
else:
	result = '불가능'
	lackPoint = minAblePoint - userPoint
	print('포인트가 {}부족합니다.'.format(lackPoint)

print('포인트 사용 가능 여부: {}'.format(result))



3-4 다자택일 조건문 사용시 주의점

  • 조건 범위 명시할것
    ex)
#잘못된 예시

# 위경우 70점일떄의 조건을 먼저 정의했는데
# 이러면 문제가 발생한다. 80을 넣어도  C , 90을 넣어도 C가 출력된다.
# 그 이유는 if의 70점 조건때문이다.

exampleScore = int(input('시험 성적 입력 : '))
grades = ''

if exampleScore >=70 :
    grades = 'C'

elif exampleScore >=90:
    grades = 'A'

elif exampleScore >= 80:
    grades = 'B'

elif exampleScore >=60:
    grades = 'D'

else:
    grades = 'F'
print('성적: {} \t 학점: {}'.format(exampleScore, grades) )


#########################



#위 코드를 올바르게 수정
#위 문제 같은경우는 논리 연산자를 사용해서 정의할수 있다.
exampleScore = int(input('시험 성적 입력: '))
grades = ''

if exampleScore >=70 and exampleScore < 80:
    grades = 'C'
elif exampleScore >= 90:
    grades = 'A'
elif exampleScore >=80 and exampleScore < 90:
    grades = 'B'
elif exampleScore >= 60 and exampleScore < 70:
    grades = 'D'
else:
    grades = 'F'

print('성적: {} \t 학점: {}'.format(exampleScore, grades))




오늘의 후기:

제로베이스 2일 차! 오늘도 파이썬 강의를 들었다.
오늘은 공부 방법을 조금 바꾸어 보았다. 제대로 알고 있는 부분은
2배속으로 돌려서 강의 시청을 했다. 어제보다 1시간 일찍 공부를 끝냈다.
아직까진 공부에 부담은 없지만~~ 1~2주 내로 부담이 생길 거 같다^^
벨로그 작성 시간이 생각보다 오래 걸리는데 시간을 단축 시켜봐야겠다.
차근차근 공부해서 최종 프로젝트까지 가보자!

0개의 댓글