이번 편의 목표: 비교·논리 연산과 if 문으로 입력값을 판정합니다.
가격을 입력받아 계산하는 프로그램은 만들었습니다. 하지만 마이너스 가격이나 0개의 주문도 그대로 계산합니다. 프로그램이 상황을 판단하게 하려면 조건이 필요합니다. 이번 편에서는 지출 금액에 따라 메시지를 다르게 출력해 보겠습니다.
비교 결과는 참 또는 거짓이다
`==`는 같은지, `!=`는 다른지 비교합니다. `>`, `<`, `>=`, `<=`는 크기를 비교합니다. 대입에 쓰는 `=`와 비교에 쓰는 `==`는 역할이 다릅니다.
amount = 12000
item = "점심"
if amount <= 0:
print("금액은 0보다 커야 합니다.")
elif amount >= 10000:
print("큰 지출입니다.")
else:
print("일반 지출입니다.")
if item != "" and amount > 0:
print("기록할 수 있습니다.")
if 0 < amount <= 20000:
print("하루 예산 안에 있습니다.")
label = "고액" if amount >= 10000 else "일반"
print(label)결과는 `큰 지출입니다.`, `기록할 수 있습니다.`, `하루 예산 안에 있습니다.`, `고액`입니다. `if`부터 `elif`, `else`로 연결된 묶음에서는 처음 참이 되는 가지 하나만 실행됩니다. 반면 다음에 별도로 적은 `if`는 다시 독립적으로 판단합니다.
들여쓰기는 장식이 아니다
조건 뒤에는 콜론 `:`을 쓰고 실행할 문장은 한 단계 들여씁니다. 이 연재에서는 공백 네 칸을 사용합니다. 같은 가지에 속한 문장은 같은 깊이여야 합니다. 탭과 공백을 섞으면 눈에는 맞아 보이는데 오류가 나기도 합니다.
조건문에서 들여쓰기가 끝나면 그 조건의 실행 범위도 끝납니다. `print(label)`이 맨 왼쪽에 있는 이유는 어느 조건이든 마지막에 출력하기 위해서입니다.
여러 조건을 묶는 방법
`and`는 둘 다 참일 때, `or`는 하나라도 참일 때 참입니다. `not`은 참과 거짓을 뒤집습니다. `item != "" and amount > 0`은 항목이 비어 있지 않고 금액도 양수일 때 참입니다.
빈 문자열, 빈 목록, 숫자 0, `None` 등은 조건 자리에서 거짓으로 취급됩니다. 따라서 `if item:`은 비어 있지 않은 문자열을 확인할 때 자주 씁니다. 다만 `"0"`은 한 글자가 들어 있는 문자열이므로 참입니다. 문자와 숫자를 구별해야 합니다.
`and`, `or`는 앞의 값만으로 결과가 정해지면 뒤를 평가하지 않습니다. 이를 단락 평가라고 합니다. 이번 단계에서는 긴 조건식을 만들기보다 괄호와 설명이 분명한 이름을 사용해 읽기 쉽게 만드는 데 집중하세요.
직접 해 보기
점수가 0~100 범위 밖이면 `잘못된 점수`, 80 이상이면 `통과`, 나머지는 `재도전`을 출력하세요. 경계값 `-1`, `0`, `79`, `80`, `100`, `101`을 각각 대입해 확인하세요.
해설
score = 80
if score < 0 or score > 100:
print("잘못된 점수")
elif score >= 80:
print("통과")
else:
print("재도전")예제의 출력은 `통과`입니다. 범위 검사를 먼저 하지 않으면 `101`점도 통과합니다. 조건 순서는 프로그램의 규칙 자체라는 점을 기억하세요.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
등록된 댓글이 없습니다.