2.5 파이썬 조건문 기초

if ~ else 명령

if ~ else 명령을 사용하면 조건에 따라 다른 명령을 수행할 수 있다. if ~ else 명령은 다음과 같이 만든다.

if  또는 거짓을 가지는 :
    조건이 참일  실행되는 명령들
else:
    조건이 거짓일  실행되는 명령들

“참 또는 거짓을 가지는 값”은 조건(condition)이라고 부른다. 예를 들어, 어떤 수가 짝수인지 홀수인지는 알려주는 조건은 그 수를 2로 나눈 나머지가 0인가 아닌가이다.

참 또는 거짓일 때 실행되는 명령들은 빈칸을 4칸 띄우고 써야 한다. 이를 들여쓰기(indentation)라고 한다.

a = 1

if a % 2 == 0:
    print("짝수")
else:
    print("홀수")
홀수

만약 어떤 수가 2자리 수의 짝수인지 알고 싶다면 다음과 같이 조건문을 사용한다.

b = 55

if (b >= 10) & (b < 100) & (b % 2 == 0):
    print("2자리 수의 짝수이다.")
else:
    print("2자리 수의 짝수가 아니다.")
2자리 수의 짝수가 아니다.

연습 문제 2.5.1

  1. a 를 짝수로 하여 위의 코드를 다시 실행한다.

  2. b 를 다른 수로 하여 위의 코드를 다시 실행한다.

연습 문제 2.5.2

변수 y의 값이 윤년이면 “윤년입니다”를 출력하고 아니라면 “윤년이 아닙니다”라고 출력하는 프로그램을 만든다. 윤년은 2월 29일이 있는 해로 다음과 같이 정해진다.

  • 서력 기원 연수가 4로 나누어 떨어지는 해는 윤년으로 한다(2004년, 2008년, 2012년, 2016년, 2020년, 2024년, …).

  • 이 중에서 100으로 나누어 떨어지는 해는 평년으로 한다(1900년, 2100년, 2200년, 2300년, 2500년, …).

  • 이 중에서 400으로 나누어 떨어지는 해는 윤년으로 둔다(1600년, 2000년, 2400년, …).

if ~ elif ~ else 명령

조건으로 나누어야 할 경우의 수가 두 가지가 아니라 여러 가지일 때는 다음과 같이 if ~ elif ~ else 명령을 사용할 수 있다.

if 조건1:
    조건1이 참일  실행되는 명령
elif 조건2:
    조건1이 거짓이고 조건2가 참일  실행되는 명령
elif 조건3:
    조건1과 조건2가 거짓이고 조건3가 참일  실행되는 명령

...(생략)...


else:
    지금까지의 어떤 조건도 참이 아니면 실행되는 명령

만약 10문제를 보는 시험에서 8개 이상을 맞으면 성적이 “A”, 8개 미만이고 5개 이상을 맞으면 “B”, ” 5개 미만을 맞으면 “C”가 된다면 점수는 다음과 같이 계산할 수 있다.

c = 6

if c >= 8:
    print("A")
elif c >= 5:
    print("B")
else:
    print("C")
B

연습 문제 2.5.3

위의 시험 성적 예제에서 c를 다른 수로 하여 다시 실행한다.

연습 문제 2.5.4

어떤 농장에서는 수박이 10kg이 넘으면 1등급, 그렇지 않고 7kg이 넘으면 2등급,, 그렇지 않고 4kg이 넘으면 3등급, 나머지는 4등급을 준다고 한다. 이 수박의 등급을 정하는 파이썬 코드를 작성한다.

중첩 조건문

때로는 조건문 안에 조건문이 포함된 형태도 있다. 이러한 형태를 중첩(nesting)이라고 한다. 조건문 내부에 다시 조건문을 중첩하면 4칸을 더 들여써야 한다.

if 조건1:
    조건1이 참일  실행되는 명령
    if 조건2:
        조건1과 조건2가 모두 참일  실행되는 명령
    else:
        조건1은 참이고 조건2는 거짓일  실행되는 명령
else:
    조건1이 거짓일  실행되는 명령

예를 들어 중학교에서 팔굽혀펴기 시험을 보는데 남자는 10번 이상을 해야 합격(Pass)이고 아니면 불합격(Fail)이다. 여자는 5번 이상을 해야 합격이라면 다음과 같이 프로그램을 만들 수 있다.

sex = "boy"
pushup = 8

if sex == "boy":
    if pushup >= 10:
        grade = "Pass"
    else:
        grade = "Fail"
else:
    if pushup >= 10:
        grade = "Pass"
    else:
        grade = "Fail"

print(grade)
Fail

연습 문제 2.5.5

죄수의 딜레마는 게임 이론의 유명한 사례이다

두 명의 범죄자 A, B가 체포되어 서로 다른 취조실에서 격리되어 심문을 받고 있다. 이들에게 자백 여부에 따라 다음의 선택이 가능하다.

  • 둘 중 하나가 배신하여 죄를 자백하면 자백한 사람은 즉시 풀어주고 나머지 한 명이 10년을 복역해야 한다.

  • 둘 모두 서로를 배신하여 죄를 자백하면 둘 다 5년을 복역한다.

  • 둘 모두 죄를 자백하지 않으면 둘 다 1년을 복역한다.

죄수를 나타내는 변수 XA, XB는 자백하면 True, 그렇지 않으면 False를 가지는 값이다. 이때 변수 XA, XB 값에 따라 각각이 복역해야 하는 연 수를 변수 YA, YB라고 할 때 YA, YB를 계산하는 프로그램을 만든다.