Python 의 조건문

PythonBeginner
지금 연습하기

소개

본 랩에서는 조건문 (conditional statements) 을 사용하여 Python 프로그램의 흐름을 제어하는 방법을 배웁니다. 순차적 프로그램 실행 (sequential program execution) 의 개념을 이해하는 것부터 시작하여, 프로그램이 결정을 내릴 수 있도록 하는 조건 논리 (conditional logic) 를 소개합니다.

ifif-else 문을 사용하여 단일 분기 및 이중 분기 논리 (single and dual branch logic) 를 구현하고, if-elif-else를 사용하여 다중 분기 논리 (multi-branch logic) 를 탐구할 것입니다. 또한, 중첩된 if 문, pass 문을 다루고 Python 3.10 이상 버전에서 사용 가능한 match-case 문을 소개합니다. 본 랩이 끝날 때쯤에는 특정 조건에 따라 다른 명령어 블록을 실행하는 Python 코드를 작성할 수 있게 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 100%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

순차적 흐름 이해 및 조건부 논리 소개

이 단계에서는 프로그래밍의 순차적 흐름 (sequential flow) 개념을 살펴보고 프로그램이 결정을 내릴 수 있도록 하는 조건 논리 (conditional logic) 를 소개합니다.

순차적 흐름은 가장 기본적인 유형의 프로그램 실행 방식입니다. 명령어들은 위에서 아래로, 순서대로 실행됩니다.

랩 환경에서는 이미 ~/project 디렉토리에 sequential.py라는 파일이 생성되어 있습니다. 왼쪽 패널의 WebIDE 파일 탐색기에서 이 파일을 찾아 열어보십시오.

sequential.py에 다음 코드를 추가합니다:

print("First instruction")
print("Second instruction")
print("Third instruction")

파일을 저장합니다. 스크립트를 실행하려면 WebIDE 에서 통합 터미널을 열고 다음 명령어를 실행합니다:

python ~/project/sequential.py

스크립트에 print 문이 나타난 정확한 순서대로 출력이 인쇄되는 것을 볼 수 있습니다:

First instruction
Second instruction
Third instruction

이것이 순차적 흐름을 보여줍니다. 하지만 프로그램은 종종 특정 조건에 따라 다르게 동작해야 할 필요가 있습니다. 이때 조건 논리가 필요합니다. Python 에서 가장 기본적인 조건문은 if 문이며, 이는 지정된 조건이 참일 경우에만 코드 블록을 실행합니다.

if 문의 기본 구문은 다음과 같습니다:

if condition:
    ## 조건이 참일 때 실행할 코드
    ## 이 블록은 들여쓰기 (indented) 되어야 합니다

이제 if 문을 포함하도록 sequential.py의 내용을 다음 코드로 대체합니다:

x = 10

print("Before the if statement")

if x > 5:
    print("x is greater than 5")

print("After the if statement")

파일을 저장하고 다시 실행합니다:

python ~/project/sequential.py

출력 결과는 다음과 같습니다:

Before the if statement
x is greater than 5
After the if statement

조건 x > 5가 참이므로 if 문 안의 들여쓰기된 코드 블록이 실행되었습니다.

이제 조건이 거짓일 때 어떤 일이 발생하는지 살펴보겠습니다. x의 값을 3으로 변경하여 sequential.py를 수정합니다:

x = 3

print("Before the if statement")

if x > 5:
    print("x is greater than 5")

print("After the if statement")

파일을 저장하고 실행합니다:

python ~/project/sequential.py

출력 결과는 다음과 같습니다:

Before the if statement
After the if statement

이번에는 조건 x > 5가 거짓이므로 if 문 안의 코드 블록은 건너뛰어졌습니다. 이 간단한 예시는 if 문이 어떻게 프로그램에 의사 결정 (decision-making) 을 도입하는지 보여줍니다.

if 및 if-else 를 사용한 단일 및 이중 분기 논리 구현

이 단계에서는 ifif-else 문을 사용하여 단일 분기 논리 (single-branch logic) 와 이중 분기 논리 (dual-branch logic) 를 구현하는 데 중점을 둘 것입니다.

if 문은 단일 분기 실행을 허용합니다. 여러분을 위해 준비된 branching.py 파일을 사용해 보겠습니다. 파일 탐색기에서 branching.py를 엽니다.

단일 분기 if 문을 시연하기 위해 다음 코드를 추가합니다:

score = 85

if score >= 70:
    print("Congratulations! You passed.")

print("End of program.")

파일을 저장하고 터미널에서 실행합니다:

python ~/project/branching.py

출력 결과는 다음과 같습니다:

Congratulations! You passed.
End of program.

score가 85 이므로 조건이 참이 되어 축하 메시지가 인쇄됩니다.

if 문은 유용하지만, 조건이 거짓일 때 다른 코드 블록을 실행해야 하는 경우가 많습니다. 이때 이중 분기 논리를 제공하는 if-else 문이 사용됩니다.

if-else 문의 구문은 다음과 같습니다:

if condition:
    ## 조건이 참일 때 실행할 코드
else:
    ## 조건이 거짓일 때 실행할 코드

if-else 문을 사용하도록 branching.py를 수정해 보겠습니다. 현재 내용을 다음으로 대체합니다:

score = 85

if score >= 70:
    print("Congratulations! You passed.")
else:
    print("Keep trying. You can do better.")

print("End of program.")

스크립트를 저장하고 실행합니다. score가 85 일 때 if 블록이 실행됩니다:

Congratulations! You passed.
End of program.

이제 else 블록을 테스트하기 위해 branching.py에서 score65로 수정합니다:

score = 65

if score >= 70:
    print("Congratulations! You passed.")
else:
    print("Keep trying. You can do better.")

print("End of program.")

파일을 저장하고 다시 실행합니다:

python ~/project/branching.py

이제 출력 결과는 다음과 같습니다:

Keep trying. You can do better.
End of program.

score가 65 이므로 if 조건이 거짓이 되어 else 블록의 코드가 실행됩니다. if-else 문은 두 가지 가능한 결과를 처리하는 데 필수적입니다.

if-elif-else 를 사용한 다중 분기 논리 구현

이 단계에서는 if-elif-else 문을 사용하여 두 가지 이상의 가능한 결과를 처리하는 방법을 배웁니다. 이 구조는 다중 분기 논리 (multi-branch logic) 를 제공합니다.

if-elif-else 구조는 조건을 순차적으로 확인합니다. if 조건이 거짓이면 첫 번째 elif( "else if"의 약어) 조건을 확인하고, 그 다음으로 넘어갑니다. 모든 조건이 참이 아닌 경우, else 블록이 실행됩니다.

기본 구문은 다음과 같습니다:

if condition1:
    ## condition1 이 참일 때 실행됨
elif condition2:
    ## condition1 이 거짓이고 condition2 가 참일 때 실행됨
else:
    ## 이전의 모든 조건이 거짓일 때 실행됨

WebIDE 에서 multibranch.py 파일을 엽니다. 숫자 점수를 기반으로 학점 (letter grade) 을 결정하는 스크립트를 작성할 것입니다. 다음 코드를 추가합니다:

score = 88

if score >= 90:
    print("Grade: A")
elif score >= 80:
    print("Grade: B")
elif score >= 70:
    print("Grade: C")
elif score >= 60:
    print("Grade: D")
else:
    print("Grade: F")

print("Grading complete.")

파일을 저장하고 터미널에서 실행합니다:

python ~/project/multibranch.py

출력 결과는 다음과 같습니다:

Grade: B
Grading complete.

프로그램은 score >= 90 (거짓) 을 확인한 다음, score >= 80 (참) 을 확인하고, "Grade: B"를 인쇄한 후 나머지 체인 (chain) 은 건너뜁니다.

이제 else 블록을 테스트해 보겠습니다. multibranch.py를 수정하여 점수를 55로 설정합니다:

score = 55

if score >= 90:
    print("Grade: A")
elif score >= 80:
    print("Grade: B")
elif score >= 70:
    print("Grade: C")
elif score >= 60:
    print("Grade: D")
else:
    print("Grade: F")

print("Grading complete.")

스크립트를 저장하고 실행합니다:

python ~/project/multibranch.py

출력 결과는 다음과 같습니다:

Grade: F
Grading complete.

마지막으로, 검증을 준비하기 위해 multibranch.py에서 점수를 75로 변경합니다:

score = 75

if score >= 90:
    print("Grade: A")
elif score >= 80:
    print("Grade: B")
elif score >= 70:
    print("Grade: C")
elif score >= 60:
    print("Grade: D")
else:
    print("Grade: F")

print("Grading complete.")

파일을 저장하고 마지막으로 스크립트를 실행합니다:

python ~/project/multibranch.py

출력 결과는 다음과 같습니다:

Grade: C
Grading complete.

if-elif-else 구조는 여러 개의 뚜렷한 경우를 처리하는 데 강력합니다. 첫 번째 참인 조건에 해당하는 코드 블록만 실행된다는 점을 기억하십시오.

중첩 if 문 및 pass 문 탐색

이 단계에서는 하나의 if 문이 다른 if 문 내부에 배치되는 중첩 if 문 (nested if statements) 을 살펴보고, pass 문에 대해서도 학습합니다.

중첩 if 문은 어떤 조건을 확인해야 하고, 그 조건이 참일 경우 또 다른 하위 조건 (sub-condition) 을 확인해야 할 때 유용합니다.

WebIDE 에서 nested_if.py 파일을 엽니다. 연령과 시민권에 따라 투표 자격을 확인하는 다음 코드를 추가합니다.

age = 20
is_citizen = True

if age >= 18:
    print("You are old enough to vote.")
    if is_citizen:
        print("You are also a citizen.")
        print("You are eligible to vote.")
    else:
        print("You are not a citizen.")
        print("You are not eligible to vote.")
else:
    print("You are not old enough to vote.")
    print("You are not eligible to vote.")

print("Voting eligibility check complete.")

파일을 저장하고 실행합니다:

python ~/project/nested_if.py

출력 결과는 다음과 같습니다:

You are old enough to vote.
You are also a citizen.
You are eligible to vote.
Voting eligibility check complete.

외부 조건 (age >= 18) 과 내부 조건 (is_citizen) 모두 참입니다.

이제 pass 문을 살펴보겠습니다. pass 문은 널 연산 (null operation) 입니다. 실행될 때 아무 일도 일어나지 않습니다. 구문적으로 (syntactically) 문장이 요구되지만 아직 코드를 작성하지 않은 경우 유용한 자리 표시자 (placeholder) 역할을 합니다.

nested_if.py의 내용을 pass를 사용하는 이 예제로 대체합니다:

age = 18

if age >= 18:
    pass ## Placeholder for future code
else:
    print("You are not old enough to vote.")

print("Check complete.")

스크립트를 저장하고 실행합니다:

python ~/project/nested_if.py

출력 결과는 다음과 같습니다:

Check complete.

if 조건이 참이므로 pass 문이 실행되고 (아무 작업도 하지 않음), else 블록은 건너뜁니다.

마지막으로, 검증을 준비하기 위해 nested_if.py를 수정하여 첫 번째 확인에 실패하는 연령을 사용하여 원래의 논리를 사용하도록 합니다.

age = 16
is_citizen = True

if age >= 18:
    print("You are old enough to vote.")
    if is_citizen:
        print("You are eligible to vote.")
    else:
        print("You are not eligible to vote.")
else:
    print("You are not old enough to vote.")
    print("You are not eligible to vote.")

print("Voting eligibility check complete.")

스크립트를 저장하고 실행합니다:

python ~/project/nested_if.py

출력 결과는 다음과 같습니다:

You are not old enough to vote.
You are not eligible to vote.
Voting eligibility check complete.

여기서 외부 if 조건 (age >= 18) 이 거짓이므로 외부 else 블록이 실행되고 내부 if-else 구조는 완전히 건너뜁니다.

match-case 문 소개 (Python 3.10+)

이 단계에서는 Python 3.10 에서 구조적 패턴 매칭 (structural pattern matching) 을 위해 도입된 기능인 match-case 문을 살펴봅니다. 이 기능은 특정 시나리오에서 긴 if-elif-else 체인에 대한 가독성 높은 대안을 제공합니다.

match-case 문은 값을 일련의 패턴과 비교하여 첫 번째 일치하는 패턴의 코드 블록을 실행합니다.

기본 구문은 다음과 같습니다:

match value:
    case pattern1:
        ## pattern1 에 대한 코드
    case pattern2:
        ## pattern2 에 대한 코드
    case _:
        ## 일치하는 항목이 없을 때의 코드 (와일드카드)

WebIDE 에서 match_case.py 파일을 엽니다. 숫자를 기반으로 요일을 출력하는 다음 코드를 추가합니다.

day_number = 3

match day_number:
    case 1:
        print("Monday")
    case 2:
        print("Tuesday")
    case 3:
        print("Wednesday")
    case 4:
        print("Thursday")
    case 5:
        print("Friday")
    case 6:
        print("Saturday")
    case 7:
        print("Sunday")
    case _:
        print("Invalid day number")

print("Day check complete.")

파일을 저장하고 실행합니다. 이 환경의 python 명령어는 호환되는 버전으로 기본 설정됩니다.

python ~/project/match_case.py

출력 결과는 다음과 같습니다:

Wednesday
Day check complete.

3case 3:과 일치하므로 "Wednesday"가 출력됩니다.

이제 와일드카드 (wildcard) 사례를 테스트해 보겠습니다. match_case.py를 수정하여 유효하지 않은 숫자를 사용합니다:

day_number = 10

match day_number:
    case 1:
        print("Monday")
    case 2:
        print("Tuesday")
    case 3:
        print("Wednesday")
    case 4:
        print("Thursday")
    case 5:
        print("Friday")
    case 6:
        print("Saturday")
    case 7:
        print("Sunday")
    case _:
        print("Invalid day number")

print("Day check complete.")

스크립트를 저장하고 실행합니다:

python ~/project/match_case.py

출력 결과는 다음과 같습니다:

Invalid day number
Day check complete.

10이 특정 사례와 일치하지 않으므로 와일드카드 case _:가 일치합니다.

마지막으로, 검증을 준비하기 위해 match_case.py에서 day_number6으로 변경합니다:

day_number = 6

match day_number:
    case 1:
        print("Monday")
    case 2:
        print("Tuesday")
    case 3:
        print("Wednesday")
    case 4:
        print("Thursday")
    case 5:
        print("Friday")
    case 6:
        print("Saturday")
    case 7:
        print("Sunday")
    case _:
        print("Invalid day number")

print("Day check complete.")

파일을 저장하고 마지막으로 스크립트를 실행합니다:

python ~/project/match_case.py

출력 결과는 다음과 같습니다:

Saturday
Day check complete.

match-case 문은 긴 if-elif-else 체인과 비교하여 여러 특정 값을 처리하는 더 깔끔한 방법이 될 수 있습니다.

요약

본 실습 (lab) 에서는 Python 프로그램의 흐름을 제어하는 방법을 배웠습니다. 순차적인 프로그램 흐름으로 시작하여 조건부 논리 (conditional logic) 로 넘어갔습니다. if를 사용하여 단일 분기 논리 (single-branch logic) 를 구현했고, if-else로 이중 분기 논리 (dual-branch logic) 를, if-elif-else로 다중 분기 논리 (multi-branch logic) 를 구현했습니다. 또한 중첩 if 문을 사용하여 더 복잡한 의사 결정 구조를 만드는 방법과 코드 자리 표시자 (placeholder) 로 pass 문을 사용하는 방법을 탐구했습니다. 마지막으로 패턴 기반 분기 (pattern-based branching) 를 위한 현대적인 대안으로 match-case 문을 소개받았습니다. 이제 특정 조건에 따라 결정을 내리고 다른 코드 경로를 실행할 수 있는 Python 프로그램을 작성할 수 있는 역량을 갖추게 되었습니다.