Run The Bridge

4부 if문 본문

Python/나의 첫 파이썬

4부 if문

anfrhrl5555 2021. 9. 15. 17:51
728x90
반응형

0. 들어가기에 앞서

if문도 for문과 마찬가지로 매우 많이쓰인다.

 

현실에서의 만약처럼 코드상태에서도 만약이 존재하므로 꼭 if문을 잘 숙지하고 넘어가자


1. 예제

cars = ['audi', 'bmw', 'subaru', 'toyata']

for car in cars:
    if car == 'bmw':
        print(car.upper())
    else:
        print(car.title())

cars라는 list에서 bmw를 찾으면 대문자로 바꾸고, 그 이외는 앞에 첫글자만 대문자로 바꾸는 예제이다.

 

if문의 핵심은 'True' 또는 'False'로 평가되는 표현식이며, 이를 조건 테스트(conditional test)라 부른다.

car = 'audi'
print(car == 'bmw')

위의 결과는 False로 볼 수 있다. 'audi' 와 'bmw'는 같지않다.

 

위의 코드는 같다를 비교했지만, 같지않을 때도 비교할 수 있다. 연산자는 '!='를 사용한다.

requested_topping = 'mushrooms'
if requested_topping != 'anchovies':
    print("hold the anchovies!")

위의 결과는 print문에 있는 "hold the anchovies"가 나온다.


2. 숫자 비교하기

age = 19
print(age == 19)

숫자도 문자열 비교와 크게 다르지않다. 오히려 숫자라 직관적이라 이해하기 더 쉽다.

 

이제부터는 한 개의 조건식만 비교하지않고, 여러 조건을 체크하는 상황을 만든다.

age_0 = 22
age_1 = 18
print(age_0 >=21 and age_1 >= 21)  # False

age_1 = 22
print(age_0 >=21 and age_1 >= 21)  # True

and 조건으로 묶어서 앞, 뒤 조건이 모두 만족해야 True를 반환한다.

 

반대로 or 조건으로 묶으면 앞, 뒤 조건 중 한 개 이상만 만족해도 True를 반환한다.


3. 값이 리스트에 있는지 체크하기

특정 값이 리스트에 있는지 체크해야 할 때도 있다.

예를 들어 웹사이트에서 신규 ID를 발급하려면 사용하려는 ID가 이미 사용 중인지 리스트에서 체크해야 한다.

리스트에 값이 존재하는지 알기위해선 'in' 키워드를 써준다.

requested_toppings = ['mushrooms', 'onions', 'pineapple']
print('mushrooms' in requested_toppings)  # True
print('pepperoni' in requested_toppings)  # False

반대로 리스트에 값이 없을때도 체크할 수 있다. 키워드는 'not in'을 써준다.


4. 단순한 if문

조건 테스트를 이해했으면 이제 if문을 쓸 수 있다. 다음의 예제를 보자

age = 19
if age >= 18:
    print("You are old enough to vote!")

age라는 변수에 값을 담고, if문에 숫자를 비교하여 True가 나오면 print문을 출력하는 간단한 예제이다.


5. if-else문

위에서 만약 age가 18세미만이면? 아무것도 출력하지 않는다. 이러한 상황을 대비해서 else문이 존재한다.

age = 17
if age >= 18:
    print("You are old enough to vote!")
else:
    print("sorry, you are too young to vote.")  # else문이 출력된다.

6. if-elif-else문

가능한 상황이 세 가지 이상일 때는 if-elif-else문을 써서 이들을 평가한다.

age = 12

if age < 4:
    print("Your admission cost is $0")
elif age < 18:
    print("Your admission cost is $25")  # 이 구문이 출력된다.
else:
    print("Your admission cost is $40")

중간에 elif는 사실 '4 <= age < 18'로 봐도 무방하다.

 

코드를 간결하게 쓰려면 다음과같이 변수를 선언해서 값을 담은 뒤, 마지막에 한 번 출력하면 더 깔끔하다.

age = 12

if age < 4:
    price = 0
elif age < 18:
    price = 25
else:
    price = 40

print(f"Your admission cost is ${price}")

 

또한 else문을 생략하고 elif를 마지막으로 둬서 코드가 정확한 조건에서만 실행될 거라고 더 확신할 수 있다

age = 100

if age < 4:
    price = 0

elif age < 18:
    price = 25

elif age < 65:
    price = 40

elif age >= 65:
    price = 20

print(f"Your admission cost is ${price}")

7. 여러 조건 테스트하기

if-elif-else문은 강력하지만 통과 조건이 단 하나일 때만 어울린다. 파이썬은 한 가지 테스트가 통과하는 즉시 다른 테스트는 모두 건너뛴다. 이러한 방식은 효율적이며 특정 조건 한가지만 테스트할 수 있는 장점이 있다

 

하지만 원하는 조건을 모두 체크해야 할 때가 있을수도 있는데, 이럴 때는 elif나 else블록 없이 단순한 if문을 여러개 써야한다.

 

다음의 예제를 살펴보자

req_toppings = ['mushrooms', 'extra cheese']

if 'mushrooms' in req_toppings:
    print("Adding mushrooms")

if 'pepperoni' in req_toppings:
    print("Adding pepperoni")

if 'extra cheese' in req_toppings:
    print("Adding extra cheese")

이 예제에서는 req_toppings에 담긴 리스트들을 하나씩 잡아와 각 3개의 if문을 돌린 뒤 print를 하는 방식이다.

 

그래서 if문은 총 6번을 돌며, 출력되는건 'mushrooms'와 'extra cheese'의 print 부분이다.


8. 리스트에서 if 문 사용하기 - 특별한 항목이 있는지 체크하기

req_toppings = ['mushrooms', 'extra cheese', 'green peppers']

for req_topping in req_toppings:
    if req_topping == 'green peppers':
        print("Sorry we are out of green peppers right now.")
    else:
        print(f"Adding {req_topping}.")

print("\nFinished making your pizza!")

주문받은 항목을 피자에 추가하기 전에 재료가 남아 있는지 확인한다.

 

고객이 피망을 주문했는지 확인한 다음 주문했다면 피망이 다 떨어졌다는 메시지를 표시한다.

Adding mushrooms.
Adding extra cheese.
Sorry we are out of green peppers right now.

Finished making your pizza!

9. 리스트가 비어 있지 않은지 확인하기

지금까지 리스트를 다루면서 각 리스트에 항목이 최소한 하나는 있다고 가정했다.

 

이제 사용자에게서 정보를 받아 리스트에 저장할 테니, 루프를 실행할 때 리스트에 항목이 항상 있다고 확신할 수 없다.

 

이런 상황에서는 for loop를 스기 전에 리스트가 비어있지 않은지 체크하는게 좋다.

req_toppings = []

if req_toppings:
    for req_topping in req_toppings:
        print(f"Adding {req_topping}.")
    print("\nFinished making your pizaa!")

else:
    print("Are you sure you want a plain pizza?")

이번에는 비어 있는 토핑 주문 리스트로 시작한다.

 

for 루프를 바로 시작하지 않고 if문으로 간단히 체크하는 방식이다.

 

파이썬에서 리스트 이름을 if문에 사용하면 리스트에 항목이 최소한 하나 이상 있을 때는 True를 반환한다.

 

빈 리스트는 False로 평가되므로 req_toppings 이 조건 테스트를 통과하면 이전 예제에서 쓴 것과 같은 for 루프를 쓸 수 있다.

 

이번에는 리스트가 비어 있으므로 출력이 정말로 plain pizza를 원하는지 묻는다.

Are you sure you want a plain pizza?

10. 여러 리스트 다루기

고객이 프렌치 프라이 토핑을 원한다면 어떻게 될까?

  → 리스트와 if문을 써서 입력에 응답하기 전에 추가 토핑이 준비된 재료인지 확인해본다.

available_toppings = ['mushrooms', 'olives', 'green peppers', 'pepperoni', 'pineapple', 'extra cheese']

req_toppings = ['mushrooms', 'french fries', 'extra cheese']

for req_topping in req_toppings:
    if req_topping in available_toppings:
        print(f"Adding {req_topping}")
    else:
        print(f"Sorry, we don't have {req_topping}.")

print("\nFinished making your pizza!")
Adding mushrooms
Sorry, we dont have french fries.
Adding extra cheese

Finished making your pizza!

토핑이 일정하다면 available_toppings를 tuple형태로 쓸 수도 있다.

 

고객이 요청한 토핑 리스트를 만들고, 엉뚱한 주문 'french fries'가 들어있다. for 루프를 돌면서 인덱스값이 주입되고,

if문에서 해당 인덱스값이 available_toppings에 존재하는지 체크하고 토핑을 추가한다.

 

만약 토핑이 존재하지않으면 그러한 토핑은 가지고 있지 않다고 else문을 출력한다.


11. if문 스타일

PEP8에서 조건 테스트에 권하는 스타일은 =, >=, <= 같은 비교 연산자 주위에 공백을 하나 쓰는것을 권장한다.

if age < 4:  # GOOD
if age<4:    # BAD

공백이 있건 없건 컴퓨터는 똑같이 이해합니다만, 공백이 있는편이 훨씬 가독성이 좋쥬? 🤣

728x90
반응형

'Python > 나의 첫 파이썬' 카테고리의 다른 글

5부 딕셔너리(dict)  (0) 2021.09.21
3부 리스트 다루기 & 튜플(tuple)  (0) 2021.09.15
2부 리스트(list)  (0) 2021.09.15
1부 기초  (2) 2021.09.09
Comments