(정수)입력하고 계산은 이를 실행. 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())
ifscore>=90:
print("A")
elifscore>=80:
print("B")
elifscore>=70:
print("C")
elifscore>=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나누고 나머지 값
ifhour>0:
print(f"{hour}시간{minute}분 {second}초")
elifminute>0:
print(f"{minute}분 {second}초")
else:
print(f"{second}초")
실행 값
중첩 조건문 (Nested if)
하나의 if문 안에 또다른 if문을 작성한다.
username=input("관리자 아이디를 입력하세요.: ")
password=input("비밀번호를 입력하세요.: ")
ifusername=="admin":
ifpassword=="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가 간단하고 조건문의 기초라서 쉽다 여기면서도 반복, 함수가 섞이면 튀어나오고, 잊어먹고 하다보니 이해가 되더라도 한번 더 복습 실행했다. 자료형 정리할 때는 이해하고 구분한다고 애먹었는데 문법은 조금 재밌게 와닿아서 조금씩 코드 문제를 풀어봐도 될 거 같다. 일단 여기까지 작성 끝