728x90
프로그램의 흐름 제어
- IF 문
- WHILE 문
- FOR 문
if 문
- 주어진 조건을 판단한 후 그 상황에 맞게 처리해야 할 경우
# '돈이 있으면 택시를 타고 가고, 돈이 없으면 걸어간다.'
>>> money = True
>>> if money:
... print("택시를 타고 가라")
... else:
... print("걸어 가라")
...
택시를 타고 가라
if 문의 기본 구조
- if와 else를 사용한 조건문의 기본 구조
if 조건문:
수행할_문장1
수행할_문장2
⋮
else:
수행할_문장A
수행할_문장B
⋮
- 조건문이 참이면 if 블록 수행
- 조건문이 거짓이면 else 블록 수행
들여쓰기 방법 알아보기
- if 문을 만들 때는 if 조건문 바로 다음 문장부터 모든 문장에 들여쓰기(indentation)
if 조건문:
수행할_문장1
수행할_문장2
수행할_문장3
- 들여쓰기를 무시하는 경우 오류 발생
조건문
- if 조건문에서 '조건문'이란 참과 거짓을 판단하는 문장
>>> money = True
>>> if money:
- 비교 연산자
비교 연산자 | 설명 |
x < y | x가 y보다 작다. |
x > y | x가 y보다 크다. |
x == y | x와 y가 같다. |
x != y | x와 y가 같지 않다. |
x >= y | x가 y보다 크거나 같다. |
x <= y | x가 y보다 작거나 같다. |
>>> x = 3
>>> y = 2
>>> x > y # 3 > 2
True
>>> x < y # 3 < 2
False
>>> x == y # 3 == 2
False
>>> x != y # 3 != 2
True
# if 조건문에 비교 연산자를 사용하는 EXAMPLE
# '만약 3000원 이상의 돈을 가지고 있다면 택시를 타고 가고, 그렇지 않으면 걸어가라.'
>>> money = 2000 # 2,000원을 가지고 있다고 설정
>>> if money >= 3000:
... print("택시를 타고 가라")
... else:
... print("걸어가라")
...
걸어가라
- and, or, not
연산자 설명 x or y x와 y 둘 중 하나만 참이어도 참이다. x and y x와 y 모두 참이어야 참이다. not x x가 거짓이면 참이다. - or 연산자의 사용법
# 돈이 3000원 이상 있거나 카드가 있다면 택시를 타고 가고, 그렇지 않으면 걸어가라. >>> money = 2000 >>> card = True >>> if money >= 3000 or card: ... print("택시를 타고 가라") ... else: ... print("걸어가라") ... 택시를 타고 가라
- in, not in
in | not in |
x in 리스트 | x not in 리스트 |
x in 튜플 | x not in 튜플 |
x in 문자열 | x not in 문자열 |
>>> 1 in [1, 2, 3] # 1이 [1,2,3]안에 있는가?
True
>>> 1 not in [1, 2, 3] # 1이 [1,2,3]안에 없는가?
False
>>> 'a' in ('a', 'b', 'c')
True
>>> 'j' not in 'python'
True
- 다양한 조건을 판단하는 elif
- if와 else만으로는 조건 판단에 어려움이 있음
- if와 else만으로는 이해하기 어렵고 산만한 느낌
# 주머니에 돈이 있으면 택시를 타고, 주머니에 돈은 없지만 카드가 있으면 택시를 타고, 돈도 없고 카드도 없으면 걸어 가라. >>> pocket = ['paper', 'cellphone'] # 주머니 안에 종이, 휴대전화가 있다. >>> card = True # 카드를 가지고 있다. >>> if 'money' in pocket: ... print("택시를 타고 가라") ... else: ... if card: ... print("택시를 타고 가라") ... else: ... print("걸어가라") ... 택시를 타고 가라
- 조건 판단하는 부분
- 주머니에 돈이 있는지 판단
- 주머니에 돈이 없으면, 주머니에 카드가 있는지 판단
# 주머니에 돈이 있으면 택시를 타고, 주머니에 돈은 없지만 카드가 있으면 택시를 타고, 돈도 없고 카드도 없으면 걸어 가라. >>> pocket = ['paper', 'cellphone'] >>> card = True >>> if 'money' in pocket: ... print("택시를 타고가라") ... elif card: ... print("택시를 타고가라") ... else: ... print("걸어가라") ... 택시를 타고가라
- elif는 이전 조건문이 거짓일 때 수행됨
- elif는 개수에 제한 없이 사용 가능
- score가 60 이상일 경우 message에 문자열 "success", 아닐 경우에 문자열 "failure" 대입하는 코드
>>> if score >= 60: ... message = "success" ... else: ... message = "failure"
- 파이썬의 조건부 표현식(conditional expression) 사용
# 변수 = 조건문이_참인_경우의값 if 조건문 else 조건문이_거짓인_경우의_값 >>> message = "success" if score >= 60 else "failure"
- if와 else만으로는 조건 판단에 어려움이 있음
if 문 실습
- 숫자를 입력 받아 짝수, 홀수를 판별하는 프로그램
- Solution
user_number = int(input('숫자: ')) check = user_number%2==1 if check : print('짝수') else : print('홀수')
- 숫자를 입력 받아 양수, 음수, 0을 판별하는 프로그램
- Solution
a = int(input('정수 입력:')) if a == 0 : print("영") elif a == abs(a) : print("양수") else : print("음수")
- 독감 예방 접종이 가능한지 여부를 확인하는 프로그램
- Solution
user_age = int(input('나이: ')) check = user_age<15 or user_age>=65 if check : print('독감예방접종 가능') else : print('독감예방접종 불가능')
- 특정 연도 건강검진 대상 여부 판별 및 검진 종류 확인
- 조건
- 매개 변수로 올해 연도와 태어난 해(연도)를 전달받음
- 대한민국 성인(20세)의 경우 무료로 2년마다 건강검진을 받을 수 있음
- 짝수 해에 태어난 사람은 올해가 짝수년이라면 검사 대상이 됨
- 40 이상의 경우는 암 검사도 무료로 검사를 할 수 있음
- Solution
birth_year = int(input('태어난 년도 입력: ')) u_age = 2023-birth_year medical_chk = (2024+birth_year)%2==0 and u_age >= 20 if medical_chk : print('올해 대상자') if u_age >= 40 : print('암 검진 대상자') else : print('올해 대상자 아님')
- 조건
while 문
while 문의 기본 구조
- 반복해서 문장을 수행해야 할 경우 while 문 사용
- 반복문이라고도 부름
while 조건문:
수행할_문장1
수행할_문장2
수행할_문장3
...
- while 문은 조건문이 참인 동안에 while 문에 속한 문장이 반복해서 수행됨
- EXAMPLE. ‘열 번 찍어 안 넘어가는 나무 없다’는 속담 구현
- while 문의 조건문은 treeHit < 10
- treeHit이 10보다 작은 동안 while 문에 포함된 문장 반복 수행
>>> treeHit = 0 # 나무를 찍은 횟수 >>> while treeHit < 10: # 나무를 찍은 횟수가 10보다 작은 동안 반복 ... treeHit = treeHit + 1 # 나무를 찍은 횟수 1씩 증가 ... print("나무를 %d번 찍었습니다." % treeHit) ... if treeHit == 10: ... print("나무가 넘어갑니다.") ... 나무를 1번 찍었습니다. 나무를 2번 찍었습니다. ... 나무를 10번 찍었습니다. 나무가 넘어갑니다.
- while 문 디버깅
treeHit 조건문 조건 판단 수행하는 문장 while 문 0 0 < 10 참 나무를 1번 찍었습니다. 반복 1 1 < 10 참 나무를 2번 찍었습니다. 반복 2 2 < 10 참 나무를 3번 찍었습니다. 반복 3 3 < 10 참 나무를 4번 찍었습니다. 반복 4 4 < 10 참 나무를 5번 찍었습니다. 반복 5 5 < 10 참 나무를 6번 찍었습니다. 반복 6 6 < 10 참 나무를 7번 찍었습니다. 반복 7 7 < 10 참 나무를 8번 찍었습니다. 반복 8 8 < 10 참 나무를 9번 찍었습니다. 반복 9 9 < 10 참 나무를 10번 찍었습니다. 나무 넘어갑니다. 반복 10 10 < 10 거짓 종료
while 문 만들기
- 예제) 여러 가지 선택지 중 하나를 선택해 입력받기
- number가 4가 아닌 동안 ‘prompt 부분’을 출력
- 사용자가 4를 입력하면 조건문이 거짓이 되어 while 문을 빠져나감
>>> prompt = """
... 1. Add
... 2. Del
... 3. List
... 4. Quit
...
... Enter number: """
>>> number = 0
>>> while number != 4:
... print(prompt)
... number = int(input())
...
1. Add
2. Del
3. List
4. Quit
Enter number:
while 문 강제로 빠져나가기
- break 문 사용
>>> coffee = 10 # 자판기에 커피가 10개 있다
>>> money = 300 # 자판기에 넣을 돈은 300원이다.
>>> while money:
... print("돈을 받았으니 커피를 줍니다.")
... coffee = coffee - 1 # while문을 한 번 돌때마다 커피가 1개씩 줄어든다.
... print("남은 커피의 양은 %d개입니다." % coffee)
... if coffee == 0:
... print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
... break
...
# money가 300으로 고정되어 있어, while문의 조건문은 항상 참 -> 무한 루프
# break문 호출 시 while문 종료
while 문의 맨 처음으로 돌아가기
- while 문을 빠져나가지 않고 while 문의 맨 처음(조건문)으로 다시 돌아가야 할 때 사용
- 1부터 10까지의 숫자 중 홀수만 출력하는 예시
- 조건문이 참이 되는 경우 → a가 짝수
- continue 문장 수행 시 while 문의 맨 처음, 즉 조건문 a < 10으로 돌아감
- 따라서 a가 짝수이면 print(a)는 수행되지 않음
>>> a = 0
>>> while a < 10:
... a = a + 1
... if a % 2 == 0: continue # a를 2로 나누었을 때 나머지가 0이면 맨 처음으로 돌아간다.
... print(a)
1
3
5
7
9
무한 루프
- 무한히 반복한다는 뜻의 무한 루프(endless loop)
- 파이썬에서의 무한 루프는 while 문으로 구현
- while 문의 조건문이 True이므로 항상 참
- → while 문 안에 있는 문장들은 무한 수행
- while 문의 조건문이 True이므로 항상 참
- 무한 루프 예
# while True:
# 수행할_문장1
# 수행할_문장2
# ...
>>> while True:
... print("Ctrl+C를 눌러야 while 문을 빠져나갈 수 있습니다.")
...
Ctrl+C를 눌러야 while 문을 빠져나갈 수 있습니다.
Ctrl+C를 눌러야 while 문을 빠져나갈 수 있습니다.
Ctrl+C를 눌러야 while 문을 빠져나갈 수 있습니다.
(…생략…)
for 문
for 문의 기본 구조
>>> for 변수 in 리스트(또는 튜플, 문자열):
... 수행할_문장1
... 수행할_문장2
... ...
- 리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 '수행할 문장1', '수행할 문장2' 등이 수행
for 문 예제
- EXAMPLE. 전형적인 for 문
>>> test_list = ['one', 'two', 'three']
>>> for i in test_list:
... print(i)
...
one
two
three
- EXAMPLE. 다양한 for 문의 사용
>>> a = [(1,2), (3,4), (5,6)]
>>> for (first, last) in a:
... print(first + last)
...
3 # first: 1, last: 2
7 # first: 3, last: 4
11 # first: 5, last: 6
- EXAMPLE. for 문의 응용
# 총 5명의 학생이 시험을 보았는데 시험 점수가 60점 이상이면 합격이고 그렇지 않으면 불합격이다.
# 합격인지, 불합격인지 결과를 보여 주시오.
>>> marks = [90, 25, 67, 45, 80] # 학생들의 시험 점수 리스트
>>> number = 0 # 학생에게 붙여 줄 번호
>>> for mark in marks: # 90, 25 67, 45, 80을 순서대로 mark에 대입
... number = number + 1
... if mark >= 60:
... print("%d번 학생은 합격입니다." % number)
... else:
... print("%d번 학생은 불합격입니다." % number)
1번 학생은 합격입니다.
2번 학생은 불합격입니다.
3번 학생은 합격입니다.
4번 학생은 불합격입니다.
5번 학생은 합격입니다.
for 문과 continue 문
- for 문 안의 문장을 수행하는 도중 continue 문을 만나면 for 문의 처음으로 돌아감
- 60점 이상인 사람에게는 축하 메시지를 보내고 나머지 사람에게는 아무런 메시지도 전하지 않는 프로그램
>>> marks = [90, 25, 67, 45, 80]
>>> number = 0
>>> for mark in marks:
... number = number + 1
... if mark < 60: continue
... print("%d번 학생 축하합니다. 합격입니다." % number)
for 문과 함께 자주 사용하는 range 함수
- 숫자 리스트를 자동으로 만들어주는 함수
- range(10)은 0부터 10 미만의 숫자를 포함하는 range 객체를 만들어 준다.
>>> a = range(10)
>>> a
range(0, 10) # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
- range(a, b)
- a: 시작 숫자
- b: 끝 숫자 (반환 범위에 포함되지 않음)
>>> a = range(1, 11)
>>> a
range(1, 11) # 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
- EXAMPLE. for와 range 함수를 사용하여 1부터 10까지 더하기
>>> sum = 0
>>> for i in range(1, 11):
... sum = sum + i
>>> print(sum)
55
- EXAMPLE. for와 range를 이용한 구구단
- (1)번 for문
- 2부터 9까지의 숫자(range(2, 10))가 차례로 i에 대입됨
- (2)번 for문
- 1부터 9까지의 숫자(range(1, 10))가 차례로 j에 대입됨
- print(i*j) 수행
- (1)번 for문
>>> for i in range(2, 10): # (1)번 for문
... for j in range(1, 10): # (2)번 for문
... print(i*j, end=" ")
... print('')
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
리스트 컴프리헨션(list comprehension) 사용하기
- 리스트 안에 for 문 포함하기
- a 리스트의 각 항목에 3을 곱한 결과를 result 리스트에 담기
>>> a = [1, 2, 3, 4] >>> result = [] >>> for num in a: ... result.append(num * 3) ... >>> print(result) [3, 6, 9, 12]
- 리스트 컴프리헨션을 사용하도록 수정
>>> a = [1, 2, 3, 4] >>> result = [num * 3 for num in a] >>> print(result) [3, 6, 9, 12]
- 리스트 안에 for 문 포함하기
- 리스트 컴프리헨션 안에 ‘if 조건’ 사용 가능
- [1, 2, 3, 4] 중에서 짝수에만 3을 곱하여 담도록 수정
>>> a = [1, 2, 3, 4] >>> result = [num * 3 for num in a if num % 2 == 0] >>> print(result) [6, 12]
- 리스트 컴프리헨션 문법
- ‘if 조건문’ 부분은 생략 가능
[표현식 for 항목 in 반복_가능_객체 if 조건문]
- for 문 여러 개 사용 가능
[표현식 for 항목1 in 반복_가능_객체1 if 조건문1 for 항목2 in 반복_가능_객체2 if 조건문2 ... for 항목n in 반복_가능_객체n if 조건문n]
728x90
'03. Python' 카테고리의 다른 글
03. 시퀀스 자료형 (0) | 2024.10.27 |
---|---|
02. 변수와 자료형 (3) | 2024.10.27 |
01. Python (7) | 2024.10.27 |