본문 바로가기
Python/기초

다양한 예제 문제를 통해 살펴본 파이썬 if문의 모든 것

by 모두의 케빈 2023. 8. 24.

 

 

목차

 

파이썬 조건문: if문에 대하여

 > 조건문과 반복문은 왜 필요한가?

 > if문 문법

 > if문과 파이썬 들여 쓰기

 > if문 예제

 > if문 조건 여러 개 사용하기: 2개
 > if문 조건 여러 개 사용하기: 3개

 

if-elif-else문

 > if-elif-else문이란?
 > if-elif-else문이 필요한 예시
 > if-elif-else문 사용법

 

다중 조건문

 > if문 안의 또 다른 if문
 > 추가 연습문제

 

 

 

 


파이썬 조건문: if문에 대하여


 

조건문과 반복문은 왜 필요한가?

 

컴퓨터는 분명 효율적인 도구이지만, 사람이 원하는 흐름대로 동작시키기 위해서는 제어가 필요합니다. 컴퓨터의 연산을 제어하는 명령어를 제어문이라고 하며, 조건문과 반복문이 이에 해당합니다.

 

 

if문 문법

 

파이썬에서 조건문은 ‘if문’을 의미합니다. if 문은 사용자가 설정한 조건이 참일 때만 코드를 실행하도록 연산의 흐름을 분기시킵니다. if 문을 사용하는 방법은 아래와 같습니다.

# if문 문법
# 조건의 마지막에는 콜론(:)을 붙여야 한다. 기억해두자!
if (조건):
    조건이 참이면 코드를 실행

 

 

if문과 파이썬 들여 쓰기

 

if 문에 의해 코드의 흐름이 분기되면 컴퓨터에게 어디까지가 원래 코드이고, 어디까지가 if 문에 해당하는 코드인지를 알려줘야 합니다.

 

파이썬 들여쓰기

 

파이썬에서는 같은 코드 블록인지를 들여 쓰기로 구분합니다. 마치 위 그림처럼 말이죠. 들여 쓰기가 동일한 코드는 모두 같은 수준(Level)의 코드로 인식하게 됩니다.

 

 

if문 예제

 

그럼 if 문에 대한 예제를 살펴보겠습니다.

# if문 실습
# 짝수인지를 검사하는 프로그램

a = 10

if a % 2 == 0:
    print("변수 a는 짝수입니다.")
 >>>>> 실행 결과: 변수 a는 짝수입니다.

퍼센트(%) 기호는 나누기의 몫을 구하는 함수입니다. ‘a%2 == 0’이라는 말은, 2로 나누었을 때 0과 같다는 말입니다. a는 10이므로, ‘a%2 == 0’는 True(참)가 됩니다.

 

if 문 옆의 조건이 참이므로, if 문 아래에 들여 쓰기로 구분된 print() 문이 실행됩니다. 

 

 

if문 조건 여러 개 사용하기: 2개

 

조건은 여러 개 사용할 수 있습니다. 여러 개의 조건을 사용할 때 팁은 조건마다 소괄호로 묶어주는 것입니다. 가독성을 높일 수 있고, 혹시 모를 에러를 미연에 방지할 수 있습니다.

# 여러 개의 조건을 사용하는 if문 실습
# 조건은 소괄호로 묶어주는게 좋습니다.
# 2의 배수이면서 3의 배수인지를 확인

a = 6

if (a % 2 == 0) and (a % 3 == 0):
    print("변수 a는 2의 배수이면서, 3의 배수입니다.")
 >>>>> 실행 결과: 변수 a는 2의 배수이면서, 3의 배수입니다.

위 코드는 ‘2의 배수’와 ‘3의 배수’라는 두 가지 조건이 모두 참이어야 합니다. 이 경우에는 and를 활용할 수 있습니다. and는 조건이 모두 참이어야만 최종적으로 참(True)을 반환하니까요.

 

조건에는 다양한 자료형이 사용될 수 있습니다. 최종 결과가 boolean(참 또는 거짓) 형태로 나오기만 하면 됩니다.

 

 

if문 조건 여러 개 사용하기: 3개

 

# 3개의 조건 사용
# or는 조건 중, 하나만 참이면 최종적으로 참(True)를 반환

fruits = ['사과','바나나','딸기','수박','용과','오렌지']

my_pick = '사과'
his_pick = '참외'
her_pick = '거봉'

if (my_pick in fruits) or (his_pick in fruits) or (her_pick in fruits):
    print("원하는 과일이 바구니에 최소한 하나 있습니다.")

 >>>>> 실행 결과: 원하는 과일이 바구니에 최소한 하나 있습니다.

 

 

 

 

If - elif -else 문


 

If - elif - else문이란?

 

같은 수준의 여러 경우의 수가 있는 조건을 검토할 때, 특정 조건을 만족한다면 다른 조건은 검토할 필요가 없습니다. 이럴 경우 If - elif - else문을 사용할 수 있습니다.

 

 

If - elif - else문이 필요한 예시

 

수가 90점 이상이면 A 학점, 80점 이상이면 B 학점, 70점 이상이면 C 학점, 나머지는 D 학점을 부여하는 프로그램을 만든다고 가정하겠습니다. 

 

점수가 85점이면 B 학점을 받아야 합니다. 위에서 배운 if 문을 활용하여 코드를 작성해 보겠습니다.

# 점수가 90점 이상인지, 80점 이상인지, 70점 이상인지 .. 모두 검사

score = 85

if score >= 90:
    print("A학점")

if score >= 80:
    print("B학점")

if score >= 70:
    print("C학점")

if score < 70:
    print("D학점")

 >>>>> 실행 결과
B학점
C학점

 

B 학점과 C 학점이 출력이 되었네요. 이는 컴퓨터가 파이썬 코드를 실행할 때, 위에서부터 한 줄씩 모두 실행하기 때문에 그렇습니다. 

 

같은 점수에 학점은 두 개 이상일 수 없죠. 그래서 여러 조건 중, 하나가 맞는다면 다른 조건은 스킵하도록 명령해야 합니다. 이럴 때 사용할 수 있는 구문이 if-elif-else 구문입니다.

 

 

If - elif - else문 사용법

 

if-elif-else 구문은 같은 상황에 대해 여러 조건을 검사할 수 있는 구문입니다. 처음 if에서 조건을 검사하고, 거짓이면 elif 문의 조건을 검사합니다. 그리고 모든 경우의 수가 해당이 안 될 경우 else문을 실행합니다.

 

elif 문은 ‘else if’ 줄임말입니다. if가 아니라면(else), 다른 조건을 검사(if) 하라는 의미를 지니고 있습니다. elif 문은 여러 번 사용할 수 있습니다.

 

최종적으로 모든 조건이 거짓일 경우 else 구문을 실행합니다. else는 ‘그 외 나머지 모든 경우’라는 의미를 지닙니다. 따라서 else 문 옆에는 따로 조건을 적지 않습니다.

 

if-else-elif 문을 활용하여 학점 코드는 다음과 같이 바꿀 수 있습니다.

# 점수가 90점 이상인지, 80점 이상인지, 70점 이상인지 .. 모두 검사

score = 85

if score >= 90:
    print("A학점")

elif score >= 80:
    print("B학점")

elif score >= 70:
    print("C학점")

else:
    print("D학점")

 >>>>> 실행 결과
B학점

 

 

 

 

다중 조건문


if문 안의 또 다른 if문

 

if 문 안에 또 다른 if 문을 사용하여 여러 개의 조건을 검토할 수 있습니다. 아래 구문을 코드로 바꿔볼까요?

# 연습 문제
사용자가 입력한 임의의 정수에 대하여,
① 0이하이면 "관심 없음"을 출력
② 0초과이면 아래 조건을 검토
   - 2의 배수라면 "양수이면서 2의 배수"를 출력
   - 7의 배수라면 "양수이면서 7의 배수"를 출력
   - 14의 배수라면 "양수이면서 14의 배수"를 출력
   -그 외 나머지는 "양수"를 출력

 

먼저 사용자로부터 입력받은 값은 정수형으로 바꿔줘야 합니다. 

user_input = int(input())

 

 

그리고 가장 큰 조건인 0 이하와 초과를 구분할 수 있도록 if와 else 구문을 작성합니다.

if user_input > 0:
    
else:
    print("관심 없음")

 

 

user_input이 0보다 큰 경우에는 여러 조건을 판단할 수 있도록 또 다른 if-elif-else 구문이 필요합니다. 

 

검토해야 하는 조건은 4개(2의 배수, 7의 배수, 14의 배수, 그 외)이므로  아래와 같이 작성합니다.

user_input = int(input())

if user_input > 0:
    if (user_input % 2 == 0):
        print("양수이면서 2의 배수")
    elif (user_input % 7 == 0):
        print("양수이면서 7의 배수")            
    elif (user_input % 2 == 0) and (user_input % 7 == 0):
        print("양수이면서 14의 배수")     
    else:
        print("양수")
        
else:
    print("관심 없음")

 

 

그런데 위 코드는 치명적인 단점이 있습니다. 14를 입력하면 14의 배수가 나와야 하는데, 2의 배수라고 출력이 됩니다.

 

이는 14가 14의 배수이기 전에, 2의 배수이자 7의 배수이기 때문입니다. 그래서 2의 배수인지를 먼저 검사하면 2의 배수라고 출력하고 아래 조건을 검사하지 않습니다. (실제로 2의 배수인 것도 맞으니까요.)

 

if 문을 여러 개 사용할 때는 조건이 겹치는 경우를 가장 먼저 적어주는 것이 에러가 적게 나오는 꿀팁입니다.  ‘2의 배수이면서, 7의 배수’는 조건이 가장 많이 겹치니까 제일 위에 적어줍니다.

# 모범 답안
user_input = int(input())

if user_input > 0:
    if (user_input % 2 == 0) and (user_input % 7 == 0):
        print("양수이면서 14의 배수")
    elif (user_input % 2 == 0):
        print("양수이면서 2의 배수")
    elif (user_input % 7 == 0):
        print("양수이면서 7의 배수")
    else:
        print("양수")
        
else:
    print("관심 없음")

 

 

 

 

추가 연습문제

 

내용을 익히기 위해 다른 예제를 하나 더 풀어 보겠습니다.

 

연습 문제

① interest라는 변수에 [없음, 조금, 보통, 많음, 매우 많음] 중 하나의 값을 입력받는다.

② efforts라는 변수에  [상, 중, 하] 중 하나의 값을 입력받는다.

③ 만약 interest가 [보통, 많음, 매우 많음] 중 하나라면 아래 코드를 실행한다.

   - efforts가 ‘상’이라면, “예비 파이썬 고수!”를 출력

   - efforts가 ‘중’이라면, “예비 파이썬 중수!”를 출력

   - efforts가 ‘하’이라면, “노력 필요!”를 출력

④ interest가 [없음, 조금] 중 하나라면 “파이썬에 대한 관심을 가져 보세요.”를 출력

 

작성하신 코드를 직접 실행해 보세요. 예시 답안은 아래 있으니 참고 부탁드립니다.

 

interest = input() # 없음,조금,보통,많음,매우 많음 중 하나로만 입력
efforts = input()  # 상,중,하 중 하나로만 입력

if interest in ['보통','많음','매우 많음']:
    if efforts == '상':
        print("예비 파이썬 고수!")
    elif efforts = '중':
        print("예비 파이썬 중수!")
    else:
        print("노력 필요!")
else:
    print("파이썬에 대한 관심을 가져 보세요.")

 

 

댓글