카테고리 없음

[코딩온] 신재생에너지 IoT 개발자 입문_ 파이썬7

혈중당부족 2025. 12. 3. 17:24

9.if

 

슬슬 와버렸다... 조건, 함수, 클래스까지 가기 위해 문법 익히는 구간이다. 시작에 앞서 자주 쓰이고 헷갈릴 수 있으니 자료 올려둔다.

 

조건식 평가 순서는 왼쪽에서 오른쪽으로 순차 계산하되, 단축 평가를 쓴다.

and 앞의 조건이 거짓이면 뒤는 안 보고, or은 앞 조건이 참이면 뒤를 안 본다. 빠른 연산을 위한 구조 같다.

 

조건문
조건에 따라서 프로그램의 실행 흐름을 분기시키는 제어문
조건: 참/거짓 구분할 수 있는 문장
 
프로그램의 로직을 분기별로 처리하고 효율성과 논리를 챙기고자 생긴 게 조건문이고 상황따라 여러개 쓰이나 기본은 if부터다. 
 
 
조건문 기초 문법
if + 조건식: > 조건이 참이면 실행
조건식은 특정한 코드블록을 말한다. 끝에 무조건  : 붙이고, 들여쓰기로 띄워서 코드 작성해야 된다. 
 
 

콜론(:)은 코드 시작을 알리기도 하고, 파이썬에서 조건문 , 반복문 , 함수 정의 , 클래스 정의 등 블록 구조에서 무조건 : 이 와야 실행된다. 안되면 SyntaxError 뜬다.

들여쓰기는 이 코드가 같은 그룹에 속한다는 걸 구분하기 위해 사용하며 쓰나 안쓰나에 따라 그룹이 묶여서 정렬이 중요하다. 

공백 4칸 = Tab 한 번 으로 구분하고, 한 블록 내에서 일관성 있게 써야한다. 보통은 tab 횟수 차이로 구분하는 편.

 

조건문 썼는데 코드 블록이 없다면? : pass 써둬서 이걸 넘긴다고 명령어 실행시킨다. (일단 아무것도 안 하겠다.)

 

 

들여쓰기 오류
 
if a > 10:
print("a는 10보다 커요") #IndentationError 뜸
 
 
if a > 100:
    pass
> IndentationError 떠서 pass 붙이면 안 뜸.

 

 

 

 

 

#실습1
날씨 = input("오늘의 날씨를 입력하세요.(비/맑음): ")
if 날씨 == "비":
    print("우산을 챙기세요!") #명령어에서 언어는 "" 표시를 해야 인식되는 듯 하다.
if 날씨 == "맑음":
    print("선크림을 바르세요!")

 

 

그 다음 구조로

if + else 문
조건이 참일 때는 if 문, 조건이 거짓일 때는 else문을 실행
else > ~아니라면 의 의미라서 조건 필요 X 대신 if문과 같이 나와야 한다.
 
a = int(input())
if a > 10:
    print("a는 10보다 커요.")
else:
    print("a는 10보다 작아요.")
 

else는 if의 조건식이 False일때 실행된다. (a가 10초과면 if로, 미만이면 else 실행)

#실습2 예제도 이랬다.
정수 = int(input("정수를 입력해주세요.: "))
계산 = 정수 % 2
if 계산 == 0:
    print("짝수입니다.")
else:
    print("홀수입니다.")

 

(정수)입력하고 계산은 이를 실행. if는 그 계산의 값을 보고 판단한다. 흐름이다. (위에서 아래로 순차 실행)

 

주의사항

else는 조건식을 쓸 수 없다. else: 로 끝맺기에 모든 조건이 다 F일때 마무리로 이걸 내라 느낌으로 짜야한다.

이것도 들여쓰기가 잘못되면 인식 못하기에 빼먹으면 안된다.

 

 

if - elif - else 구문
elif: else if의 약자
elif 에서 조건을 반드시 기록
if 가 있어야 사용 가능

 

복수의 조건을 순차적으로 검사하여 True인 조건만 실행할 때 쓴다.

맨 처음 True만 실행하고 그 이후 조건은 검사하지 않고 모든 조건이 거짓일때 else가 출력되는 형식이다. 

문법 주의할 점

- elif는 여러 번 쓸 수 있으나 else는 한번 만 가능. 

- else는 무조건 마지막에 위치.

- elif 또는 else 없이 if만 사용가능하다는 건 나머지 둘은 if가 있어야 된다는 맥락이다.

 

문법 활용한 코드 예제.

score = int(input())
if score >= 90:
    print("A")
elif score >= 80:
    print("B")
elif score >= 70:
    print("C")
elif score >= 60:
    print("D")
else:
    print("F")

 

여기서 70 코드가 위로 올라갔다면 점수 80 입력시 2번째 줄 70 코드가 실행되어 "C"로 나오고 아래는 무시된다.

이것도 조건을 순차적으로 정렬해 써야 한다는 뜻이다. 

 

 

그러면 if를 여러번 써도 작동되는데 문법이 있는 건, 어떤 경우에 쓰고 실행되는 식일까... 지금 배우는 과정에서 if를 여러번 쓰지 않고 문법을 활용하는 게 많아서 잘 모르는 데 차이가 있긴 하다. 나중에 능숙해지면 다를지도. 

 

 

if 활용할 때 만든 실습 예제 중 잘 몰라서 설명 들었던 것 중 하나.

 

실습4: 초를 입력하면 시, 분, 초로 나누어 알려주는 프로그램
 
hour, minute, second = 0, 0, 0
time = int(input())
#60s = 1m, 60m =1h
minute = time // 60 # 60으로 나누고 남은 몫
second = time % 60 # 나누고 남은 나머지
hour = minute // 60 # 분에서 60으로 나누고 나온 몫
minute %= 60 # 60나누고 나머지 값

if hour > 0:
    print(f"{hour}시간{minute}{second}초")
elif minute > 0:
    print(f"{minute}{second}초")
else:
    print(f"{second}초")

 

실행 값

 

 

중첩 조건문 (Nested if)

하나의 if문 안에 또다른 if문을 작성한다.
 
 
username = input("관리자 아이디를 입력하세요.: ")
password = input("비밀번호를 입력하세요.: ")

if username == "admin":
    if password == "abcd":
        print("관리자 로그인 성공")
    else:
        print("비밀번호가 틀렸습니다.")
else:
    print("존재하지 않는 사용자입니다.")

유저 아이디 맞는데 번호에서 틀려 if 내부 else가 출력됐다.

 

if 안에 if 내용을 넣는. 폴더 안에 폴더 같은 구조가 되는 모양이다.

여러 코드 쓰다보면 들여쓰기를 잘하라는 게 이런 이유일 것이다...

 

 

여기서부터 실습 문제가 조건이 생기고 그 형태로 만들라는 게 시작하는데 버벅이기 시작했다. 코드를 보고 이런 답이겠구나 파악할 수 있지만 그런 문제를 만들라고 해서 그런지 헤맨 편이다.

이와 같은 코드도.

받았던 실습 문제다.

직접 풀지 못해 정해진 과정 메모.
상수로 정보 기입할 때 보통 대문자를 쓴다. 값이 변하지 않는 정보라는 의미로.
먼저 금액을 입력 받습니다.

김밥 = "김밥"
삼김 = "삼각김밥"
도시락 = "도시락"
a_price, b_price, c_price = 2500, 1500, 4000
#사용자가 어떤 식의 입력을 할 지 모르니 오류, 중복을 줄이고자 가독성 신경 써서 짠다고 함.

주문 = input("무엇을 주문하겠습니까?(김밥/ 삼각김밥/도시락): ")
금액 = int(input("금액을 입력하세요.: "))

if 주문 == 김밥:
    if 금액 >= a_price:
        print(f"{김밥}을 구매했습니다.")
    else:
        print("금액이 부족합니다.")
elif 주문 == 삼김:
    if 금액 >= b_price:
        print(f"{삼각김밥}을 구매했습니다.")
    else:
        print("금액이 부족합니다.")
elif 주문 == 도시락:
    if 금액 >= c_price:
        print(f"{도시락}을 구매했습니다.")
    else:
        print("금액이 부족합니다.")
else:
    print("입력이 잘못됐습니다.")
윗 조건이 결정되면(주문) 아랫 조건도 결정된다.(금액)
그래서 if 안에 if 중첩문을 쓰고, 첫 주문에서 정해진 것에 따라 대조해서 실행하는 건데
 
메뉴와 가격은 고정된 값이며 딕셔너리가 짝을 이루는 값이니, 저 형태를 딕셔너리 형태로 묶어도 된다.
# 2) 딕셔너리 활용한 코드.
가격 = {
    "김밥" : 2500,
    "삼각김밥" : 1500,
    "도시락": 4000
}
주문 = input("무엇을 주문하겠습니까?(김밥/ 삼각김밥/도시락): ")
금액 = int(input("금액을 입력하세요.: "))
#딕셔너리에 밸류에 접근하는 방법 N.get 또는 [딕셔너리]

if 주문 in 가격:
    if 금액 >= 가격[주문]:
        print(f"{주문}을 구매했습니다.")
    else:
        print("금액이 부족합니다.")
else:
    print("입력이 잘못됐습니다.")
 
그러면 이렇게 간결해진다. 이건 N.get 쓰거나 키 입력해서 밸류 불러오는 식으로 하는 모양이다...
 
 

 

if가 간단하고 조건문의 기초라서 쉽다 여기면서도 반복, 함수가 섞이면 튀어나오고, 잊어먹고 하다보니 이해가 되더라도 한번 더 복습 실행했다. 자료형 정리할 때는 이해하고 구분한다고 애먹었는데 문법은 조금 재밌게 와닿아서 조금씩 코드 문제를 풀어봐도 될 거 같다. 일단 여기까지 작성 끝