Python Programming

Python Programming (2) - 조건문

oziguyo_ 2020. 3. 28. 06:32
728x90
3.Python_Conditional

2. 조건문

if else 구문

Statement

Python interpreter가 실행 가능한 문법에 옳은 문장들을 statement라 한다.
앞 장에서 공부한 statement들과 더불어 조건문과 반복문을 공부해 보자.

  • 1 + 2
  • x = 7
  • print("Hello")
  • newstring = "ABCD".lower()
  • 조건문
  • 반복문

조건문

프로그래머가 명시한 if의 조건이 True인가 False인가에 따라 실행하는 문장(statement)이 달라지는 구문

  • 테스트 구문은 항상 True 혹은 False로 계산된다.
  • if절의 다음에는 만약 테스트 결과가 True일 경우 실행될 코드 블록이 나타난다.
    • 만약 테스트 구문이 False로 판명나면 실행하지 않는다.
  • 추가적으로 만약 테스트 구문이 False일 때 할 일을 나타낼 수 있다.
    • 이에 해당되는 코드는 else 혹은 elif의 구문에서 나타난다.

그림 출처 : Introduction to Computation and Programming Using Python, John V. Guttag

아래 예제에 대한 간략한 설명이다.

x % 2 == 0 (x를 2로 나눈 나머지가 0인가)의 연산결과가 True이면

  • print('Even')을 실행

False이면

  • print('Odd')을 실행
In [32]:
x = 15
if x % 2 == 0:
    print('Even')
else:
    print('Odd')
Odd

if, else 문의 문법 구조

  • if else구문의 기본적인 구조는 다음과 같다.
if 조건문:  
  조건문 결과가 True일 경우 해야 할 일  
else:  
  조건문 결과가 False일 경우 해야 할 일
  • if문과 else의 마지막에 :를 포함하여야 한다.
  • if문은 test 조건문이 True일 경우에 실행되는 코드 블록을 포함함.
  • else 문은 if 문에있는 조건식이 0 또는 False 값으로 해석될 때 실행되는 코드 블록을 포함함.
  • if문과 else의 내용은 들여쓰기(indentation)를 해야 함.
  • 하나의 if에 대응되는 else는 많아야 한 개
    • 필요가 없을 경우 else 문은 생략 가능
  • 코드가 간단할 경우, 줄을 바꿔 들여쓰기를 하지 않고, 다음과 같은 문법도 가능
if 조건문: 조건문 결과가 True일 경우 해야 할 일
else: 조건문 결과가 False일 경우 해야 할 일
In [4]:
my_age = 25
if my_age >= 20: print("get drunk")
else: print("not this time")
get drunk
In [1]:
my_age = 17
if my_age >= 20: print("get drunk")
else: print("not this time")
not this time

else 이 후의 내용이 필요 없을 경우 else 부분은 생략 가능

In [5]:
my_status = 'dirty'
if my_status == 'dirty':
    print("take a shower")
    print("do a laundry")
take a shower
do a laundry
In [6]:
my_status = 'clean'
if my_status == 'dirty':
    print("take a shower")
    print("do a laundry")

들여쓰기 - indentation

  • C/C++이나 JAVA와 같은 언어에서는 들여쓰기는 코드를 보기 좋게 만들기 위한 것일 뿐 필수적인 것은 아님
  • Python에서는 들여쓰기가 문법의 일부이므로 반드시 지키도록 한다.
  • 따라서 다음은 바로 위의 코드와는 다르게 작동한다.
In [7]:
my_status = 'clean'
if my_status == 'dirty':
    print("take a shower")
print("do a laundry")
do a laundry

간단한 예제:

In [2]:
if 3 < 4: print("if")
else: print("else")
if
In [3]:
if "3" < "4": print("if")
else: print("else")
if

주의 : 조건문에서 두 값이 같은지 비교할 때는 == 를 이용해야 한다. 따라서 다음 코드는 에러가 발생한다.

In [10]:
x, y = 3, 3
if x = y:
    print("x is equal to y.")
else:
    print("x is different from y.")
  File "<ipython-input-10-bc1a75b24bad>", line 2
    if x = y:
         ^
SyntaxError: invalid syntax

주의 : 다음 두 코드의 차이점을 잘 살펴보자.

In [11]:
x = 1
if x > 0:
    x = x - 2
else:
    x = x + 2
print(x)
-1
In [3]:
x = 1
if x > 0:
    x = x - 2
if x <= 0:
    x = x + 2
print(x)
1

nested if statement

  • 하나의 조건을 검사한 후에, 또다른 조건을 검사해야 될 필요가 있을 수 있다.
  • 이러한 경우 중첩된 if 구문을 사용할 수 있다.
  • 하나의 if문 혹은 else문 내에 또다른 if,else 구문이 나타날 수 있다.
    • 마찬가지로 if문 내에 if문 내에 if문이 등장할 수도 있다.
  • 최소값을 찾는 다음의 코드가 옳게 작동하는지 살펴 보고, 잘못된 부분이 있으면 개선하여 보자.
In [13]:
x=10
y=5
z=2
if x<y:
    if x<z:
        print("x is the least")
    else:
        print("z is the least")
else: print("y is the least")
y is the least

elif을 통한 조건 추가

elif 의 문법

if expression1:  
  statement1(s)  
elif expression2:  
  statement2(s)  
elif expression3:  
  statement3(s)  
else:  
  statement4(s)
  • elif 문을 사용하면 여러 표현식을 검사하고, 조건 중 하나가 True로 판정되는 코드 블록을 실행
  • else와 마찬가지로 elif 프로그램의 목적에 따라 생략이 될 수 있음
  • 그러나 많아야 한 번 등장하는 else와는 달리, if 다음에 임의의 수의 elif 문이 있을 수 있음
In [4]:
x = 10
y = 5
z = 2
if x < y and x < z: print("x is the least")
elif y < z: print("y is the least")
else: print("z is the least")
z is the least
  • if문에서 and 를 이용하여 두 조건을 동시에 넣은 것에 주의
  • if의 조건에 해당하지 않으면 (x가 최소값이 아니라면), 두 번째 조건이 elif 뒤에 명시되는 것을 확인

예제

In [15]:
x = 123
if x < 10:
    print('one digit number')
elif x < 100:
    print('two digit number')
elif x < 1000:
    print('three digit number')
else:
    print('large number')
three digit number

예제

다음의 예제는 elif을 사용하여 보다 간단하게 작성할 수 있다. 스스로 작성하여 보자.

In [16]:
if x%2 == 0:
    if x%3 == 0:
        print('Divisible by 2 and 3')
    else:
        print('Divisible by 2 and not by 3')
elif x%3 == 0:
    print('Divisible by 3 and not by 2')
Divisible by 3 and not by 2

Boolean 연산 : and, or, not

In [17]:
True and True
Out[17]:
True
In [18]:
True and False
Out[18]:
False
In [19]:
False and True
Out[19]:
False
In [20]:
False and False
Out[20]:
False
In [21]:
True or True
Out[21]:
True
In [22]:
True or False
Out[22]:
True
In [23]:
False or True
Out[23]:
True
In [24]:
False or False
Out[24]:
False
In [25]:
not True
Out[25]:
False
In [26]:
not False
Out[26]:
True

예제

In [27]:
x = 3
y = 7
if x < y and x < 0: print("if")
else: print("else")
else
In [28]:
x = 3
y = 7
if x < y or x < 0: print("if")
else: print("else")
if

예제

input() 함수와 결합한 예제

In [31]:
answer = input("In Python, = is used for equality comparison, right? Yes or No >> ").lower()

if answer == "no" :
    print("You have cleared the test.")
else :
    print("You have failed the test.")

print("Thanks!")
In Python, = is used for equality comparison, right? Yes or No >> no
You have cleared the test.
Thanks!

Inline if-else statements

Python은 다음과 같이 if else를 한 라인에 작성할 수 있도록 지원한다.

In [39]:
a = 37
y = "large" if a ** 2 > 1000 else "small"
print(y)
large

위 코드는 아래 코드와 같다.

In [40]:
a = 37
if a ** 2 > 1000: y = "large"
else: y = "small"
print(y)
large

연습문제

다음의 연습문제들은 2, 3 단원의 내용만을 이용하여 작성해 보라.

  • 정수인 변수가 주어졌을 때, 홀수(odd)인지 짝수(even)인지 판별하는 프로그램을 작성하라.
  • 월(month)이 대입된 정수인 변수가 주어졌을 때, 해당 월이 며칠인지 출력하는 프로그램을 작성하라.
  • x, y, z의 세 개의 변수가 있다. 이 세 변수를 검사하여 가장 큰 홀수를 프린트하라. 만약 세 변수가 모두 홀수가 아니라면, 홀수가 없다는 메시지를 출력하라.
  • 삼각형 세 변의 길이가 변수로 주어졌을 때, 정삼각형(Equilateral triangle), 이등변삼각형(Isosceles triangle), 일반삼각형(triangle)을 구분하는 프로그램을 작성하라.
  • 삼각형 세 변의 길이가 변수로 주어졌을 때, 직각 삼각형인지 아닌지 판단하는 프로그램을 작성하라.
  • 두 자리 정수가 대입된 변수를 검사하여, 십의 자리 숫자와 일의 자리 숫자의 합이 10이 넘는지 판단하는 프로그램을 작성하라.
  • 13자리 숫자가 ISBN 13자리 코드의 원칙에 맞는지 판단하는 프로그램을 작성하라.
    • ISBN코드가 abcdefghijklm일 때, $a+3b+c+3d+e+3f+g+3h+i+3j+k+3l+m$이 10으로 나누어 떨어져야 한다.
  • 해(year)가 윤년인지를 판단하는 프로그램을 작성하라. 윤년의 규칙은 다음과 같다.
    • 서력 기원 연수가 4로 나누어 떨어지는 해는 윤년으로 한다.(1988년, 1992년, 1996년, 2004년, 2008년, 2012년 …)
    • 이 중에서 100으로 나누어 떨어지는 해는 평년으로 한다.(1900년, 2100년, 2200년, 2300년, 2500년 …)
    • 그중에 400으로 나누어 떨어지는 해는 윤년으로 둔다.
  • 문자열 변수를 검사하여, 마지막 글자가 모음(a, e, i, o, u, A, E, I, O, U)으로 끝나는지 아닌지 판단하는 프로그램을 작성하라.
  • 문자열 변수를 검사하여, 첫 글자와 마지막 글자가 같은지 검사하는 프로그램을 작성하라. 대소문자는 구분하지 않는다. 즉, Mom은 첫 글자와 마지막 글자가 같은 단어로 간주한다.
  • 두 문자열 변수를 검사하여, 첫 글자끼리 서로 같은지 검사하는 프로그램을 작성하라. 대소문자는 구분하지 않는다.
  • 0 이상 100 이하의 값이 입력된 변수를 검사하여, grade를 정하는 프로그램을 작성하라. 규칙은 다음을 따른다.

    • 95 이상 : A+
    • 90 이상 95 미만 : A
    • 85 이상 90 미만 : B+
    • 80 이상 85 미만 : B
    • 그 외의 점수 : C
728x90