PY4E Ch.3 Conditional Execution

nalimeitb·2025년 4월 11일

PY4E

목록 보기
3/10

Ch.3 Conditional Execution

파이썬에서는 if를 이용해 두 방향으로 갈 수 있다.

파이썬이 우리를 위해 결정을 하는 것으로 볼 수 있다.

순차적으로 코드를 실행시킨다.
if문에는 질문이 포함되어 있다.

이 다음 들여쓰기 한 블럭이 오고,
이 부분이 조건문이다.
질문이 참이라면 코드가 실행이 되고
질문이 거짓이라면, 이 줄은 건너뛰어진다.

Comparison Operators

위 처럼 여러개의 비교 연산자가 존재한다.
이것들을 사용해 참/거짓 질문들을 만들 수 있다.

여기서 같은 등호지만 대입문에 사용하는 등호의 기능과
다르다는 것을 이해해야 한다.
대입문의 등호는 숫자를 지정해서 집어넣는 다는 의미,
비교연산자의 등호 두개는 실제로 좌우의 값이 같은지를 물어보는 것이다.

Indentation(들여쓰기)

들여쓰기로 시작해서 if문(for문도 마찬가지)이 마침내 끝나면 내어쓰기(들여쓰지 않는 것)를 한다.
그리고 들여쓰기는 꼭 한줄일 필요가 없다.
질문과 질문의 답에 따라 실행되거나 실행되지 않는다.

들여쓰기를 하면 같은 블록에 있는 이상, 들여쓰기를 유지한다.
블록이 끝나면 내어쓰기를 한다.
들여쓰기는 띄어쓰기를 4번해서 들여쓰기를 하는 것을 원칙으로 한다.
탭으로 띄어쓰기를 하고 싶을 수 있지만,
탭이 어떻게 설정되었는지에 따라 혼동될 수 있다.

하나의 블록은 콜론을 시작으로
내어쓰기가 된 줄을 포함하지 않는 곳 까지!

들여쓰기와 내어쓰기를 통해 코드의 구조가 이루어지기 때문에, 다른 언어와 달리 들여쓰기가 매우 중요한 역할을 하며 이로 인해 문법 에러가 뜰 수 있다.

머릿 속으로 블록을 그려 관계를 그려보자.

Nested Decisions

위 슬라이드에 보이는 것 처럼,
if문 아래 if문을 또 넣을 수 있다.
러시아 인형처럼 원하는 만큼 넣을 수 있다.

중첩된 조건문의 첫 번째 조건문의 질문이 참이면,
그것을 유지한 채 다음 조건문의 질문으로 한번 더 따질 수 있다.

Multi-way Decisions

Two-way Decisions

지금까지는 if문의 한 갈래만 따지는 단방향을 보았지만 두 갈래 if문 또한 존재할 수 있다.

질문에 답에 따라 맞으면 한방향으로 가고
질문에 거짓이라면 다른 방향으로 갈 것이다.

이것을 if와 else문으로 구현할 수 있다.
길의 갈래와 비슷한 느낌이다.

else부분은 if문이 거짓일 때 실행된다.
if와 else에서 둘 중 오직 한 갈래만 실행될 것이다.

두 가지 갈래가 겹치지도 빠지지도 않는 관계를 갖는다. 하나를 고르면 다른 하나는 불가능하기 때문이다. 이것을 잘 이해해야 한다고 생각한다.

비록 들여쓰기가 복잡하게 만든다고 생각 할 수 있지만, 들여쓰기를 통해 머리속으로 쉽게 떠올릴 수 있기 때문에 우아한 언어라고 볼 수 있을 것 같다.

More Conditional Structures...

if/else 문은 두 갈래 중 하나를 겹치지 않게 고르는 것이었다면, 지금부터 볼 것은 세 개, 네 개, 다섯 개 등의 갈래 중 하나를 고르는 것이다.

elif 라는 새로운 파이썬의 예약어를 통해 작동할 수 있다.

if문의 첫 부분이 맞으면 이부분을 실행하고 마친다. 뒤에까지 굳이 확인하지 않는다. 뒤에 두 조건이 있는 것을 확인하지 못하는 것이 아니라 첫번째 조건을 먼저 확인하고 그 결과에 따라 확인하지 않을 수도 있다는 것이다.

따라서, 순서가 중요하다는 것을 알 수 있다.
첫번째 조건이 틀리고 두번째 조건이 맞다면 두번째 조건에 해당하는 블록이 실행되고 마친다.
마찬가지로 두 조건이 모두 틀리면 else 부분이 실행된다.

중요한 것은 질문을 정해진 순서에 따라 확인한다는 것이다.

두번째 질문은 첫번째 질문에 대한 답이 나올 때까지 확인하지 않았다. 두번째 질문은 첫번째 질문이 거짓일 때까지 확인하지 않는다는 것이다.
셋 중에 하나만 실행된다.

참고로 else는 없어도 된다.
다만, else가 없다면 이 중 아무 부분도 실행되지 않을 수 있다. else가 없으면 적어도 한개는 실행된다는 보장이 없다. else는 캐치콜과 같이 모든 것들이 거짓이면 else가 실행된다.

위 문제를 생각해보면,
질문의 순서와 elif의 순서가 매우 중요하다는 것을 알 수 있다.
순서에 따라 모든 블록을 보지 않기 때문이다.
앞의 질문에 대해 거짓일 경우에만, 다음 질문을 확인한다.

The try/except Structure

파이썬은 복구하고 싶은 부분에 traceback error를 띄우는 경향이 있다.

하지만, 우리가 만약 traceback error가 등장해 프로그램을 중단되는 것을 원하지 않을 것이다.

프로그래머는 사용자의 입력값을 보고 코드에서
프로그램이 중단 될 수 있는 부분을 예상할 수 있어야한다.

그리고 이를 해결할 수 있어야 한다.
에러로 인해 프로그램이 중단될 수 있는 지점을 인지하고 이를 예상해 중단되지 않도록 대응해야 한다.

이러한 과정을 try/except structure을 통해 이루어낼 수 있다.

위험하고 중단될 수 있는 코드를 try로 감싸면,
이 부분이 중단될 수 있으니,
실패하면 이 부분을 실행하라는 의미가 된다.
except는 예외와 비슷하다.
except 블록은 이 부분이 잘못되었을 때만 실행된다.
잘못되지 않았을 때는 except 블록이 나서서, 에러가 떴을 때 진행해야할 일들을 한다.

한가지 주의해야할? 신경써야할 그런 점은
출력문은 어차피 중단되지 않는다.(출력문 문법이 정확하다는 가정하에)
그렇기 때문에, 꼭 보험을 들어야하는 최소한의 부분만 Try 블록에 놓는 것이 좋다.

사용자가 예외를 발생시킬 만한 값을 입력하면
try/except를 사용해 잡을 수 있다.

연습문제

실습 1번

fh = float(input("일한시간 입력 : "))
fr = float(input("시급 입력 : "))

if fh <= 40 :
    pay = fh*fr

else :
    pay = fh*fr + 0.5*fr*(fh-40)

print(pay)

실습 2번

hour = input("Enter Hours : ")
rate = input("Enter Rate : ")

try :
    fh = float(hour)
    fr = float(rate)

except :
    print("Error, please enter numeric input")
    quit()
    
if fh <= 40 :
    pay = fh*fr

else :
    pay = fh*fr + 0.5*fr*(fh-40)

print(pay)

0개의 댓글