[CS-002][입문] 조건문과 반복문으로 흐름 만들기
페이지 정보

본문
[이번 수업]
조건에 따라 길을 고르고, 필요한 작업을 여러 번 반복합니다. 이번에는 순차·선택·반복이라는 제어 흐름을 배우고 작은 점수 처리 프로그램으로 확인합니다.
[선수지식]
변수에 숫자와 불리언 값을 담는 방법을 알면 좋습니다. Python을 설치하고 파일을 실행할 수 있으면 실습을 따라 할 수 있습니다.
[학습목표]
1. 조건문이 실행 경로를 고르는 방식을 설명한다.
2. for와 while 반복문을 상황에 맞게 선택한다.
3. 반복이 끝나는 조건과 경계값을 점검한다.
[핵심개념]
제어 흐름(control flow)은 프로그램이 어느 명령을 다음에 실행할지 정하는 순서입니다. 순차는 작성한 순서대로 실행하는 기본 흐름입니다. 선택은 조건의 참·거짓에 따라 다른 블록을 실행하고, 반복은 같은 블록을 정해진 범위 또는 조건 동안 다시 실행합니다.
조건문은 ‘만약 조건이 참이면 이 작업, 아니면 다른 작업’이라는 선택을 코드로 옮깁니다. Python의 if는 조건이 참일 때 들여쓴 블록을 실행합니다. elif는 앞 조건이 거짓일 때 다음 조건을 검사하고, else는 앞의 어느 조건도 참이 아닐 때 실행됩니다. 위에서부터 검사하므로 여러 조건이 겹치면 순서가 결과를 바꿉니다. 예를 들어 score >= 60을 먼저 쓰면 90점도 그 분기에서 끝나므로, A 등급을 나누려면 score >= 90을 더 앞에 둬야 합니다.
조건에는 비교 결과처럼 True 또는 False로 판단할 수 있는 표현식을 사용합니다. ==는 두 값이 같은지 비교하고, =는 변수에 값을 넣는 대입입니다. and는 양쪽 조건이 모두 참일 때, or는 하나 이상 참일 때, not은 참·거짓을 뒤집을 때 사용합니다.
for 반복문은 목록·문자열·range처럼 차례로 값을 내주는 대상의 각 항목을 처리할 때 알맞습니다. Python 공식 문서의 range(5)는 0부터 4까지이며 끝값 5는 포함하지 않습니다. while은 조건이 참인 동안 반복하므로 반복 횟수를 미리 모르는 재시도나 카운트다운에 유용합니다. while 본문에서는 언젠가 조건이 거짓이 되도록 상태를 바꿔야 무한 반복을 피할 수 있습니다.
반복 안에서 값을 누적할 때는 시작값, 매 반복의 변화, 종료 후 결과를 따로 확인하세요. 경계값(boundary value)은 조건이 바뀌는 바로 앞뒤 값입니다. 합격 기준이 60이라면 59, 60, 61을 시험해야 >=와 >의 차이를 찾기 쉽습니다.
[따라하기]
아래를 control_flow.py로 저장합니다.
scores = [72, 45, 88, 60]
passed = 0
for score in scores:
if score >= 60:
result = "pass"
passed += 1
else:
result = "retry"
print(score, result)
countdown = 3
while countdown > 0:
print("count:", countdown)
countdown -= 1
print("passed:", passed)
print("start")
Windows에서는 py control_flow.py, macOS와 Linux에서는 python3 control_flow.py를 실행합니다. 예상 결과는 다음과 같습니다.
72 pass
45 retry
88 pass
60 pass
count: 3
count: 2
count: 1
passed: 3
start
for는 점수를 하나씩 꺼내고 if는 60점 경계에서 결과를 선택합니다. passed는 합격할 때만 1씩 늘어납니다. while은 3, 2, 1을 출력한 뒤 countdown이 0이 되어 끝납니다.
[흔한 실수]
들여쓰기가 잘못되면 조건이나 반복에 포함될 코드가 달라집니다. while에서 상태 변경을 빼면 끝나지 않을 수 있습니다. range의 끝값이 제외된다는 점과 0부터 시작하는 인덱스를 놓치면 한 번 많거나 적게 실행하는 오류가 생깁니다. 반복 중인 목록을 바로 삭제·추가하면 항목을 건너뛸 수 있으므로 복사본을 돌거나 새 목록을 만드세요.
[보안 주의]
외부 입력으로 반복 횟수나 목록 크기를 정할 때 최대값과 시간 제한을 두세요. 공격자가 매우 큰 값을 보내면 CPU와 메모리를 오래 사용할 수 있습니다. 문자열로 받은 조건을 eval이나 exec로 실행하지 말고 허용된 선택지를 직접 비교하세요. 비밀번호 확인 같은 민감한 분기에서도 클라이언트의 결과를 믿지 말고 서버에서 권한을 다시 검사해야 합니다. 실습은 로컬의 가상 점수만 사용합니다.
[직접 해볼 과제]
점수가 90 이상이면 excellent, 60 이상이면 pass, 나머지는 retry가 되도록 elif를 추가하세요. 59, 60, 89, 90을 넣어 경계값을 확인하고 각 분기가 몇 번 실행됐는지 세어 보세요. 그다음 countdown 시작값을 5로 바꾸고 반복이 정확히 다섯 번인지 확인합니다.
[확인문제]
1. if·elif에서 조건 순서가 결과를 바꾸는 경우는 언제인가요?
2. for와 while은 각각 어떤 상황에 알맞은가요?
3. 합격 기준이 60일 때 확인할 경계값 세 개는 무엇인가요?
[다음 학습]
순환 커리큘럼의 다음 수업은 TOOL-002 ‘터미널·셸·명령어 첫걸음’입니다. 프로그래밍 사고 트랙에서는 CS-003 ‘함수와 입력·출력’으로 이어집니다.
[공식 참고 자료]
Python Tutorial: More Control Flow Tools
https://docs.python.org/3/tutorial/controlflow.html
Python Language Reference: Compound statements
https://docs.python.org/3/reference/compound_stmts.html
Python Language Reference: Boolean operations
https://docs.python.org/3/reference/expressions.html#boolean-operations
조건에 따라 길을 고르고, 필요한 작업을 여러 번 반복합니다. 이번에는 순차·선택·반복이라는 제어 흐름을 배우고 작은 점수 처리 프로그램으로 확인합니다.
[선수지식]
변수에 숫자와 불리언 값을 담는 방법을 알면 좋습니다. Python을 설치하고 파일을 실행할 수 있으면 실습을 따라 할 수 있습니다.
[학습목표]
1. 조건문이 실행 경로를 고르는 방식을 설명한다.
2. for와 while 반복문을 상황에 맞게 선택한다.
3. 반복이 끝나는 조건과 경계값을 점검한다.
[핵심개념]
제어 흐름(control flow)은 프로그램이 어느 명령을 다음에 실행할지 정하는 순서입니다. 순차는 작성한 순서대로 실행하는 기본 흐름입니다. 선택은 조건의 참·거짓에 따라 다른 블록을 실행하고, 반복은 같은 블록을 정해진 범위 또는 조건 동안 다시 실행합니다.
조건문은 ‘만약 조건이 참이면 이 작업, 아니면 다른 작업’이라는 선택을 코드로 옮깁니다. Python의 if는 조건이 참일 때 들여쓴 블록을 실행합니다. elif는 앞 조건이 거짓일 때 다음 조건을 검사하고, else는 앞의 어느 조건도 참이 아닐 때 실행됩니다. 위에서부터 검사하므로 여러 조건이 겹치면 순서가 결과를 바꿉니다. 예를 들어 score >= 60을 먼저 쓰면 90점도 그 분기에서 끝나므로, A 등급을 나누려면 score >= 90을 더 앞에 둬야 합니다.
조건에는 비교 결과처럼 True 또는 False로 판단할 수 있는 표현식을 사용합니다. ==는 두 값이 같은지 비교하고, =는 변수에 값을 넣는 대입입니다. and는 양쪽 조건이 모두 참일 때, or는 하나 이상 참일 때, not은 참·거짓을 뒤집을 때 사용합니다.
for 반복문은 목록·문자열·range처럼 차례로 값을 내주는 대상의 각 항목을 처리할 때 알맞습니다. Python 공식 문서의 range(5)는 0부터 4까지이며 끝값 5는 포함하지 않습니다. while은 조건이 참인 동안 반복하므로 반복 횟수를 미리 모르는 재시도나 카운트다운에 유용합니다. while 본문에서는 언젠가 조건이 거짓이 되도록 상태를 바꿔야 무한 반복을 피할 수 있습니다.
반복 안에서 값을 누적할 때는 시작값, 매 반복의 변화, 종료 후 결과를 따로 확인하세요. 경계값(boundary value)은 조건이 바뀌는 바로 앞뒤 값입니다. 합격 기준이 60이라면 59, 60, 61을 시험해야 >=와 >의 차이를 찾기 쉽습니다.
[따라하기]
아래를 control_flow.py로 저장합니다.
scores = [72, 45, 88, 60]
passed = 0
for score in scores:
if score >= 60:
result = "pass"
passed += 1
else:
result = "retry"
print(score, result)
countdown = 3
while countdown > 0:
print("count:", countdown)
countdown -= 1
print("passed:", passed)
print("start")
Windows에서는 py control_flow.py, macOS와 Linux에서는 python3 control_flow.py를 실행합니다. 예상 결과는 다음과 같습니다.
72 pass
45 retry
88 pass
60 pass
count: 3
count: 2
count: 1
passed: 3
start
for는 점수를 하나씩 꺼내고 if는 60점 경계에서 결과를 선택합니다. passed는 합격할 때만 1씩 늘어납니다. while은 3, 2, 1을 출력한 뒤 countdown이 0이 되어 끝납니다.
[흔한 실수]
들여쓰기가 잘못되면 조건이나 반복에 포함될 코드가 달라집니다. while에서 상태 변경을 빼면 끝나지 않을 수 있습니다. range의 끝값이 제외된다는 점과 0부터 시작하는 인덱스를 놓치면 한 번 많거나 적게 실행하는 오류가 생깁니다. 반복 중인 목록을 바로 삭제·추가하면 항목을 건너뛸 수 있으므로 복사본을 돌거나 새 목록을 만드세요.
[보안 주의]
외부 입력으로 반복 횟수나 목록 크기를 정할 때 최대값과 시간 제한을 두세요. 공격자가 매우 큰 값을 보내면 CPU와 메모리를 오래 사용할 수 있습니다. 문자열로 받은 조건을 eval이나 exec로 실행하지 말고 허용된 선택지를 직접 비교하세요. 비밀번호 확인 같은 민감한 분기에서도 클라이언트의 결과를 믿지 말고 서버에서 권한을 다시 검사해야 합니다. 실습은 로컬의 가상 점수만 사용합니다.
[직접 해볼 과제]
점수가 90 이상이면 excellent, 60 이상이면 pass, 나머지는 retry가 되도록 elif를 추가하세요. 59, 60, 89, 90을 넣어 경계값을 확인하고 각 분기가 몇 번 실행됐는지 세어 보세요. 그다음 countdown 시작값을 5로 바꾸고 반복이 정확히 다섯 번인지 확인합니다.
[확인문제]
1. if·elif에서 조건 순서가 결과를 바꾸는 경우는 언제인가요?
2. for와 while은 각각 어떤 상황에 알맞은가요?
3. 합격 기준이 60일 때 확인할 경계값 세 개는 무엇인가요?
[다음 학습]
순환 커리큘럼의 다음 수업은 TOOL-002 ‘터미널·셸·명령어 첫걸음’입니다. 프로그래밍 사고 트랙에서는 CS-003 ‘함수와 입력·출력’으로 이어집니다.
[공식 참고 자료]
Python Tutorial: More Control Flow Tools
https://docs.python.org/3/tutorial/controlflow.html
Python Language Reference: Compound statements
https://docs.python.org/3/reference/compound_stmts.html
Python Language Reference: Boolean operations
https://docs.python.org/3/reference/expressions.html#boolean-operations
- 이전글[TOOL-002][입문] 터미널·셸·명령어 첫걸음 26.08.29
- 다음글[CORE-002][입문] 0과 1로 비트·바이트·진법 이해하기 26.08.29
댓글목록
등록된 댓글이 없습니다.
