[Python Note] 제어문(If, While, For)
Note 들여쓰기가 아주 중요하다!!
1. If 조건문
-
만약 “조건1”이 참(True)이면 “수행1”을 하고,
그렇지 않으면 “조건2”가 참(True)일 때는 “수행2”
그 외에는 “수행3”을 하라.if '조건1': '수행1' elif '조건2': '수행2' else: '수행3'
-
한 줄로 표현할 수 있다.
만약 ‘조건’이 참(True)이면 a이고 그렇지 않으면 b이다.'수행1' if '조건1' else '수행2'
Examples
예제 1. 학점 계산하기
name = 'Park Ji Soo'
score = 76
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'F'
print(name+'님의 학점은 '+grade+' 입니다.')
Park Ji Soo님의 학점은 C 입니다.
예제 2. 재고 확인하기
snack = '꿀꽈배기'
snacks = {'허니버터칩':1, '꼬깔콘':3, '양파링':10, '매운새우깡':4}
if snack not in snacks.keys():
print('현재 '+ snack + '의 재고는 없습니다.')
else:
print('현재 '+snack+'은 '+str(snacks[snack])+'개 남아있습니다.')
snack = '매운새우깡'
snacks = {'허니버터칩':1, '꼬깔콘':3, '양파링':10, '매운새우깡':4}
if snack not in snacks.keys():
print('현재 '+ snack + '의 재고는 없습니다.')
else:
print('현재 '+snack+'은 '+str(snacks[snack])+'개 남아있습니다.')
재 꿀꽈배기의 재고는 없습니다.
현재 매운새우깡은 4개 남아있습니다.
예제 3. 생년월일(8자리)을 통해 청소년인지 아닌지 구분하기.
(청소년은 만 9세이상 만 24세 이하인 사람을 말한다.)
name = 'Kim Young Hee'
birth = '20010315'
age = 2022 - int(birth[:4])
if 9 <= age <= 24:
print(name + '님은 만 ' + str(age) + '세로 청소년입니다.')
else:
print(name + '님은 만 ' + str(age) + '세로 청소년이 아닙니다.')
Kim Young Hee님은 만 21세로 청소년입니다.
2. 반복문
1) For 반복문
-
리스트/튜플/문자열의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 “수행1”, “수행2”를 한다.
for '변수' in '리스트/튜플/문자열': '수행1' '수행2' ...
-
한줄로 표현이 가능하다.
['수행1' for '변수' in '리스트/튜플/문자열']
-
만약 ‘변수’에 상관없는 반복일 경우에는
_
로 대체해도 가능하다.Example. 'HA' 10번 반복해서 한 줄로 출력하기
for _ in range(10): print('HA', end=' ')
HA HA HA HA HA HA HA HA HA HA
2) While 반복문
-
“조건”을 만족하는 동안 “수행1”을 반복한다.
while '조건': '수행1'
-
무한 루프: “수행1”을 무한으로 반복한다. 빠져나오기 위해서는 조치가 필요하다.
break
: 루프를 중단하고 빠져나온다.continue
: 처음으로 돌아간다.
while True: '수행1'
- STEP 1. 변수
i
에 초기값을 설정한다. - STEP 2. 변수
i
를 변경한다. - STEP 3. 어떤 조건을 만족하면
break
로 빠져나온다.
3) Examples
예제 1. 2의 거듭제곱 차례대로 n개 출력하기
n = 10
# For문 (한 줄)
lst = [2 ** i for i in range(n)]
print(lst)
# For문
lst = []
for i in range(n):
lst.append(2 ** i)
print(lst)
# While문
i = 0
lst = []
while i < n:
lst.append(2 ** i)
i += 1
print(lst)
# While문(무한 루프)
i = 0
lst = []
while True:
if i == n:
break
lst.append(2 ** i)
i += 1
print(lst)
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
예제 2. 1부터 n까지의 3과 5의 최소공배수 구하기
n = 100
# For문(한 줄)
lst = [i for i in range(1,n+1) if (i % 3 == 0) and (i % 5 == 0)]
print(lst)
# For문
lst = []
for i in range(1, n+1):
if (i % 3 == 0) and (i % 5 == 0):
lst.append(i)
print(lst)
# While문
i = 0
lst = []
while i < n:
i += 1
if (i % 3 == 0) and (i % 5 == 0):
lst.append(i)
print(lst)
# While문(무한 루프)
i = 0
lst = []
while True:
i += 1
if (i % 3 == 0) and (i % 5 == 0):
lst.append(i)
if i == n:
break
print(lst)
[15, 30, 45, 60, 75, 90]
[15, 30, 45, 60, 75, 90]
[15, 30, 45, 60, 75, 90]
[15, 30, 45, 60, 75, 90]
예제 3. 행운의 로또 번호 생성하기(1 ~ 50, 7자리, 비복원추출)
import random
에서 randint(start, end)
함수를 이용하자.
randint
함수는 start부터 end 사이(end 포함안됨)의 정수를 랜덤으로 하나를 뽑는다.
import random
# For문(한 줄) - 복원 추출
lotto = [random.randint(1, 50) for i in range(7)]
lotto.sort()
print(lotto)
# For문 - 비복원 추출
lotto = []
for _ in range(100):
num = random.randint(1, 50)
if num in lotto:
continue
else:
lotto.append(num)
if len(lotto) == 7:
lotto.sort()
break
print(lotto)
# While문 - 비복원 추출
lotto = []
while len(lotto) < 7:
num = random.randint(1, 50)
if num in lotto:
continue
else:
lotto.append(num)
lotto.sort()
print(lotto)
# While문(무한 루프) - 비복원 추출
lotto = []
while True:
num = random.randint(1, 50)
if num in lotto:
continue
else:
lotto.append(num)
if len(lotto) == 7:
lotto.sort()
break
print(lotto)
[5, 6, 11, 12, 13, 47, 49]
[3, 6, 11, 18, 24, 39, 49]
[8, 14, 33, 35, 38, 42, 43]
[1, 5, 20, 23, 33, 35, 42]
Reference
- 점프 투 파이썬, link: https://wikidocs.net/book/1
- IT CookBook, 데이터 과학을 위한 파이썬 프로그래밍, link: https://www.hanbit.co.kr/store/books/look.php?p_code=B3659877244
- 메타코드, 파이썬 입문 무료 강의 link: https://youtu.be/H3u2HtYGITQ
댓글남기기