파이썬 9, 10, 11, 12

윤선민·2023년 11월 24일

파이썬

목록 보기
4/14

25_조건식

조건식이란, 어떤 조건에 따라 실행이 분기 되는 식
a if 조건식 else b -> 조건식의 결과가 True 이면 a실행, 그렇지 않으면 b

num1 = 10
num2 = 100

numResult = Treu if num1 > num2 else False
print('num1 > num2 : {}'.format(numResult))
print('num1은 num2보다 크다.') if numResult else print('num1은 num2보다 크지 않다.')
=====================================================================================
num1 > num2 : False
num1은 num2보다 크지 않다.
limitSnowAmount = 30
snowAmount = int(input('적설량 입력(mm) : '))

print('적설량 : {}mm, {}'.format(snowAmount, '대설 경보 발령')) if snowAmount >= limitSnowAmount else \
    print('적설량 : {}mm, {}'.format(snowAmount, '적설 경보 해제'))
    
===============================================================
   적설량 입력(mm) : 35
적설량 : 35mm, 대설 경보 발령
import operator

passScore1 = 60
passScore2 = 70

kor = int(input('국어 점수 입력 : '))
eng = int(input('영어 점수 입력 : '))
mat = int(input('수학 점수 입력 : '))

totalScore = kor + eng + mat
scoreAvg = totalScore / 3

print('국어 : PASS') if operator.ge(kor, passScore1) else print('국어 : FAIL')
print('영어 : PASS') if operator.ge(eng, passScore1) else print('영어 : FAIL')
print('수학 : PASS') if operator.ge(mat, passScore1) else print('수학 : FAIL')
print('시험 : PASS') if operator.ge(scoreAvg, passScore2) else print('시험 : FAIL')


print('총점 : %d, 평균 : %.2f' % (totalScore,scoreAvg ))
========================================================
국어 점수 입력 : 55
영어 점수 입력 : 65
수학 점수 입력 : 75
국어 : FAIL
영어 : PASS
수학 : PASS
시험 : FAIL
총점 : 195, 평균 : 65.00

26_조건문(if문)

특정 조건에 따라 프로그램을 분기한다.
조건문의 종류

  • if문 : 단일조건
    if 조건문 :
    실행문(코드블럭)

  • if ~ else문 : 양자택일

  • if ~ elif문 : 다자택일(다중조건)

kor = int(input('국어 점수 입력 : '))
eng = int(input('영어 점수 입력 : '))
mat = int(input('수학 점수 입력 : '))

avg = (kor + eng + mat) / 3
print('평균 : {}'.format(avg))

if avg >= 90:
    print('참 잘했어요~!')
    ========================
국어 점수 입력 : 90
영어 점수 입력 : 85
수학 점수 입력 : 100
평균 : 91.66666666666667
참 잘했어요~!
highTemperature = 28
lowTemperature = 20

innerTemperature = int(input('실내 온도 입력 : '))

if innerTemperature >= highTemperature:
    print('냉방 작동!')

if innerTemperature <= lowTemperature:
    print('난방 작동!')
    =======================================
실내 온도 입력 : 15
난방 작동!

27_양자택일 조건문(if~else문)

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

seniorAge = 65

passengerAge = int(input('나이 입력 : '))

if passengerAge >= seniorAge:
    print('무료 대상 승객입니다.')
else:
    print('유료 대상 승객입니다.')
==========================================
나이 입력 : 45
유료 대상 승객입니다.

28_if~else문과 조건식

모든 조건식(삼항연산자)은 if ~ else문으로 변경할 수 있다.
but, 모든 if ~ else문이 조건식으로 변경할 수 있는건 아니다.

rainPercentage = int(input('비올 확률 입력 : '))
minRainPercentage = 55

print('우산을 챙기세요') if rainPercentage >= minRainPercentage else print('양산을 챙기세요') > 조건식

if rainPercentage >= minRainPercentage: > if ~ else문
    print('우산을 챙기세요.')
else:
    print('양산을 챙기세요.')
=====================================
비올 확률 입력 : 45
양산을 챙기세요
양산을 챙기세요.
lowTemperature = int(input('최저 기온 입력 : '))
highTemperature = int(input('최고 기온 입력 : '))

dailyTemperature = highTemperature - lowTemperature

if dailyTemperature >= 11:
    print('일교차 : {}'.format(dailyTemperature))
    print('감기 조심하세요')
else:
    print('일교차 : {}'.format(dailyTemperature))
    print('산책하기 좋은 날씨입니다.')
=================================================
최저 기온 입력 : 10
최고 기온 입력 : 20
일교차 : 10
산책하기 좋은 날씨입니다

29_다자택일 조건문(if~elif문)

if~elit : 여러 가지 조건식 결과에 따라 실행문이 결정됨.

print('계절 : 봄, 여름, 가을, 겨울')
seasonStr = input('계졀 입력 : ')

if seasonStr == '봄':
    print('{} : {}'.format('봄', 'Spring'))
elif seasonStr == '여름':
    print('{} : {}'.format('여름', 'Summer'))
elif seasonStr == '가을':
    print('{} : {}'.format('가을', 'Fall'))
elif seasonStr == '겨울':
    print('{} : {}'.format('겨울', 'Winter'))
else:
    print('검색할 수 없습니다.')
=================================================
계절 : 봄, 여름, 가을, 겨울
계졀 입력 : 봄
봄 : Spring
userSelectNumber = int(input('메뉴 선택 : '))

print('-'*30)
if userSelectNumber == 1:
    print('메뉴 : {} \n 가격 : {}'.format('카페라떼', '3,500원'))
elif userSelectNumber == 2:
    print('메뉴 : {} \n 가격 : {}'.format('에스프레소', '3,000원'))
elif userSelectNumber == 3:
    print('메뉴 : {} \n 가격 : {}'.format('아메리카노', '2,000원'))
elif userSelectNumber == 4:
    print('메뉴 : {} \n 가격 : {}'.format('곡물라떼', '4,000원'))
elif userSelectNumber == 5:
    print('메뉴 : {} \n 가격 : {}'.format('밀크티', '4,300원'))
else:
    print('없는 메뉴 입니다.')
print('-'*30)
==========================================================================
1.카페라떼(3.5) 	 2.에스프레소(3.0) 	 3.아메리카노(2.0) 	 4.곡물라떼(4.0) 	 5.밀크티(4.3)
메뉴 선택 : 4
------------------------------
메뉴 : 곡물라떼 
 가격 : 4,000원
------------------------------

30_다자택일 조건문 사용 시 주의할 점

  • 조건식의 순서가 중요하다.
  • 조건 범위를 명확히 명시한다.
carDisplacement = int(input('자동차 배기량 입력 : '))

if carDisplacement < 1000:
    print('세금 : 100,000원')
elif carDisplacement < 2000 and carDisplacement >= 1000:
    print('세금 : 200,000원')
elif carDisplacement < 3000 and carDisplacement >= 2000:
    print('세금 : 300,000원')
elif carDisplacement < 4000 and carDisplacement >= 3000:
    print('세금 : 400,000원')
elif carDisplacement < 5000 and carDisplacement >= 4000:
    print('세금 : 500,000원')
elif carDisplacement >= 5000:
    print('세금 : 600,000원')
===================================================================
자동차 배기량 입력 : 4500
세금 : 500,000원

31_중첩 조건문

  • 조건문 안에 또 다른 조건문이 있을 수 있다.(조건문 안에 또 다른 조건문을 선언한다)
selectNum = (int(input('출퇴근 대상자인가요? 1.Yes \t 2.No : ')))

if selectNum == 1:
    print('교통수단을 선택하세요')
    trans = int(input('1.도보, 자전거 \t 2.버스, 지하철 \t 3.자가용 : '))

    if trans == 1:
        print(' 세금 감면 5%')
    elif trans == 2:
        print(' 세금 감면 3%')
    elif trans == 3:
        print(' 추가 세금 1%')

elif selectNum == 1:
    print('세금 변동 없습니다.')
=============================================================
출퇴근 대상자인가요? 1.Yes 	 2.No : 1
교통수단을 선택하세요
1.도보, 자전거 	 2.버스, 지하철 	 3.자가용 : 2
 세금 감면 3%

32_반복문

  • 반복문이란 특정 실행을 반복하는 것.
  • 반복문을 사용하면 프로그래밍이 간결하고 유지 보수가 쉽다.
    예) 대량 메일 및 문자 발송, 인사말 반복, 타이머, 영어 단어 반복 학습 도구
  • 횟수에 의한 반복 : 횟수 지정 후 횟수만큼 반복 실행
  • 조건에 의한 반복

33_횟수에 의한 반복(for문)

  • for i(변수 : 0~4) in(키워드) range(5)(반복횟수: 0~4까지 다섯번 반복)
  • pass사용 : 반복은 하되 넘어가겠다. (실행문이 정해지지않았을 때 오류 나오지 않게 함)
for i in range(9):
    print('{} * {} = {}'.format(6, (i+1),6 * (i+1)))
=========================================================
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54

34_반복 범위 설정(range() 함수)

  • for i in range(1(시작), 11(끝), 1(단계)):
    1부터 10까지 1씩 증가
  • 단계가 1인 경우 매개변수 생략 가능
  • 시작인 0인 경우 생략 가능
startNum = int(input('반복의 시작 입력 : '))
endNum = int(input('반복의 끝 입력 : '))

for i in range(startNum,(endNum+1)):
    print(i)
===========================================
반복의 시작 입력 : 5
반복의 끝 입력 : 9
5
6
7
8
9
startNum = int(input('반복의 시작 입력 : '))
endNum = int(input('반복의 끝 입력 : '))

for i in range(startNum,(endNum+1),2):
    print(i)
===========================================
반복의 시작 입력 : 5
반복의 끝 입력 :  15
5
7
9
11
13
15

35_조건에 의한 반복(while문)

  • 조건에 만족하면 반복실행한다. 그렇지않으면 반복을 중단한다.
    예) 매일 아침 기상 알람, 게임 반복 실행, 타이머
  • 조건에 의한 반복은 while문이 주로 사용
    조건문이 True이면 반복문 실행됨
    ❗ 조건문이 계속 True이면 무한 반복 -> 코드에 악영향을 미칠 수 있음.
n = 1
while n < 101:
    if n % 2 == 0:
        print('{}은 2의 배수이다.'.format(n))

    if n % 3 == 0:
        print('{}은 3의 배수이다.'.format(n))
    n += 1
====================================================
2은 2의 배수이다.
3은 3의 배수이다.
4은 2의 배수이다.
6은 2의 배수이다.
6은 3의 배수이다.
8은 2의 배수이다.
9은 3의 배수이다.
10은 2의 배수이다.
12은 2의 배수이다.
12은 3의 배수이다.
14은 2의 배수이다.
15은 3의 배수이다.
16은 2의 배수이다.
18은 2의 배수이다.
18은 3의 배수이다.
20은 2의 배수이다.
21은 3의 배수이다.
22은 2의 배수이다.
24은 2의 배수이다.
24은 3의 배수이다.
26은 2의 배수이다.
27은 3의 배수이다.
28은 2의 배수이다.
30은 2의 배수이다.
30은 3의 배수이다.
32은 2의 배수이다.
33은 3의 배수이다.
34은 2의 배수이다.
36은 2의 배수이다.
36은 3의 배수이다.
38은 2의 배수이다.
39은 3의 배수이다.
40은 2의 배수이다.
42은 2의 배수이다.
42은 3의 배수이다.
44은 2의 배수이다.
45은 3의 배수이다.
46은 2의 배수이다.
48은 2의 배수이다.
48은 3의 배수이다.
50은 2의 배수이다.
51은 3의 배수이다.
52은 2의 배수이다.
54은 2의 배수이다.
54은 3의 배수이다.
56은 2의 배수이다.
57은 3의 배수이다.
58은 2의 배수이다.
60은 2의 배수이다.
60은 3의 배수이다.
62은 2의 배수이다.
63은 3의 배수이다.
64은 2의 배수이다.
66은 2의 배수이다.
66은 3의 배수이다.
68은 2의 배수이다.
69은 3의 배수이다.
70은 2의 배수이다.
72은 2의 배수이다.
72은 3의 배수이다.
74은 2의 배수이다.
75은 3의 배수이다.
76은 2의 배수이다.
78은 2의 배수이다.
78은 3의 배수이다.
80은 2의 배수이다.
81은 3의 배수이다.
82은 2의 배수이다.
84은 2의 배수이다.
84은 3의 배수이다.
86은 2의 배수이다.
87은 3의 배수이다.
88은 2의 배수이다.
90은 2의 배수이다.
90은 3의 배수이다.
92은 2의 배수이다.
93은 3의 배수이다.
94은 2의 배수이다.
96은 2의 배수이다.
96은 3의 배수이다.
98은 2의 배수이다.
99은 3의 배수이다.
100은 2의 배수이다.
gugudan = int(input('희망 구구단 입력 : '))

n = 1
while n < 10:
   result = gugudan * n
   print('{} * {} = {}'.format(gugudan, n, result))
   n += 1
===========================================================
희망 구구단 입력 : 9
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81

36_for문과 while문 비교

for문이 적합한 경우

  • 횟수에 의한 반복

while문이 적합한 경우

  • 조건에 의한 반복
currentThicness = 30
rotationCount = 0
removeThickness = 0.15

while currentThicness >= 20:
    rotationCount += 1
    currentThicness -= removeThickness

saferRotationCount = rotationCount - 1
print('운행 가능 횟수 : {}'.format(saferRotationCount))
===============================================================
운행 가능 횟수 : 66

37_무한 루프

  • 반복문을 빠져나올 수 없는 경우를 무한 루프라고 한다.
    while문에서 조건식의 결과가 항상 True인 경우
  • 논리형 데이터 사용
    -> 조건식에 논리형 데이터를 사용해서 무한 반복을 실행할 수 있다.
import random #random 모듈 사용
sum = 0
date = 0
flag = True

while flag:
    patientCount = random.randint(50, 100)  #50~100사이 정의
    sum += patientCount
    date += 1
    print('날짜 : {}, 오늘 환자 수 : {}, 누적 환자 수 : {}'.format(date, patientCount, sum))

    if sum >= 10000:
        flag = False
===============================================================================================
날짜 : 1, 오늘 환자 수 : 85, 누적 환자 수 : 85
날짜 : 2, 오늘 환자 수 : 84, 누적 환자 수 : 169
날짜 : 3, 오늘 환자 수 : 92, 누적 환자 수 : 261
날짜 : 4, 오늘 환자 수 : 83, 누적 환자 수 : 344
날짜 : 5, 오늘 환자 수 : 70, 누적 환자 수 : 414
날짜 : 6, 오늘 환자 수 : 63, 누적 환자 수 : 477
날짜 : 7, 오늘 환자 수 : 61, 누적 환자 수 : 538
날짜 : 8, 오늘 환자 수 : 55, 누적 환자 수 : 593
 (생략)
날짜 : 125, 오늘 환자 수 : 86, 누적 환자 수 : 9328
날짜 : 126, 오늘 환자 수 : 76, 누적 환자 수 : 9404
날짜 : 127, 오늘 환자 수 : 61, 누적 환자 수 : 9465
날짜 : 128, 오늘 환자 수 : 89, 누적 환자 수 : 9554
날짜 : 129, 오늘 환자 수 : 89, 누적 환자 수 : 9643
날짜 : 130, 오늘 환자 수 : 86, 누적 환자 수 : 9729
날짜 : 131, 오늘 환자 수 : 88, 누적 환자 수 : 9817
날짜 : 132, 오늘 환자 수 : 61, 누적 환자 수 : 9878
날짜 : 133, 오늘 환자 수 : 89, 누적 환자 수 : 9967
날짜 : 134, 오늘 환자 수 : 92, 누적 환자 수 : 10059

😓 앞선 수업들은 크게 어렵지 않았는데 반복문부터 조금씩 어려워지는 느낌이다..!
실습문제 보고 바로 머리에 그려지지 않고 한참을 생각하게 된다, 지금은 강의 답안을 보며 이해하기 급급한데 다양한 문제를 풀어보면 나아지겠지,,?
❗복습대상 : 반복문, 루프

이 글은 제로베이스 데이터 분석 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.

0개의 댓글