복잡한 조건은 관계 연산자만으로는 표현할 수 없습니다.
예를 들어 놀이공원에서 나이가 10살 이상이고 키가 165cm 이상이어야 놀이기구를 탈 수 있다고 합시다.
이 조건은 관계 연산자만으로는 표현이 불가능합니다.
나이가 10살 이상이고, 키가 165cm 이상이면 -> 놀이기구를 탈 수 있다.
이러한 복잡한 조건을 표현하려면 논리 연산자를 사용해야 합니다.
(나이가 10살 이상이다) and (키가 165cm 이상이다) -> 놀이기구를 탈 수 있다.
and 연산자는 왼쪽과 오른쪽이 모두 참일 때 전체가 참이 되는 논리 연산자입니다.
논리 연산자(logical operator)는 여러 개의 조건을 조합하여 참인지 거짓인지를 따질 때 사용합니다.
고등학교에서 AND(논리 곱), OR(논리 합), NOT(논리 부정) 으로 학습한 내용과 같습니다. 예를 들어 "비가 오지 않고 휴일이면 테니스를 친다." 라는 문장을 봅시다.
이 문장은 "비가 오지 않는다" 라는 조건과 "휴일이다" 라는 조건이 동시에 참이면 테니스를 친다는 의미를 포함하고 있습니다.
파이썬에는 조건들을 다양하게 묶을 수 있는 연산자들이 준비되어 있습니다.
| 연산 | 의미 |
| x and y | AND 연산, x와 y가 모두 참이면 참, 그렇지 않으면 거짓 |
| x or y | OR 연산, x나 y 중에서 하나만 참이면 참, 모두 거짓이면 거짓 |
| not x | NOT 연산, x가 참이면 거짓, x가 거짓이면 참 |
앞에서 예를 들었던 놀이기구를 탈 수 있는 조건을 논리 수식으로 작성하면 다음과 같습니다.
age >= 10 and height >= 165
논리 연산의 결과도 참과 거짓으로 생성됩니다. 위의 논리 수식을 코드로 표현하면 아래와 같습니다.
age = 22
height = 173
if (age >= 10) and (height >= 165) :
print("놀이기구를 탈 수 있습니다.")
else :
print("놀이 기구를 탈 수 없습니다.")
<실행 결과>
놀이기구를 탈 수 있습니다.
제 나이와 키를 입력해보았습니다. 저는 놀이기구를 탈 수 있군요. :)
조금 더 자세하게 논리 연산자를 설명해보겠습니다. and 연산자는 조건들이 모두 참일 때 전체 수식의 값이 참이 됩니다.
예를 들어 어떤 회사에서 신입 사원을 채용하는데 나이가 30세 이하이고 토익 성적이 700점 이상이라는 조건을 걸었습니다.
(age <= 30) and (toeic >= 700)
위의 수식에서 age가 30 이하이고 toeic이 700 이상인 경우에만 참이 됩니다.
만약 두 조건 중 하나라도 거짓이면 전체 수식의 값은 거짓이 됩니다.
논리 합을 나타내는 or 연산자는 하나의 조건만 참이면 전체 수식의 값이 참이 됩니다.
신입 사원을 채용하는 조건이 변경되어 나이가 30살 이하이거나 토익 성적이 700점 이상이면 된다고 합시다.
이 경우 age가 27이고 toeic이 650인 경우에도 참이 됩니다.
(age <= 30) or (toeic >= 700)
논리 부정을 나타내는 not 연산자는 조건이 참이면 전체 수식 값을 거짓으로 만들고 조건이 거짓이면 전체 수식 값을 참으로 만듭니다.
예를 들어 not (1==0) 은 참이 됩니다. (1==0) 이 거짓이지만 앞에 not이 붙어 있으므로 전체 수식의 값은 참이 됩니다.
논리 연산자를 포함한 수식을 작성할 때 주의해야 하는 점이 있습니다.
and 연산자의 경우, 여러 개의 조건 중에서 처음 조건이 거짓(0)이면 다른 조건들은 검사되지 않습니다.
왜냐하면 첫 번째 조건이 거짓(0)이면 나머지 조건들을 계산하지 않아도 전체 수식의 값은 거짓이기 때문입니다.
예를 들어 아래와 같은 수식에서는 첫 번째 조건인 ( 2 > 3 ) 이 거짓이기 때문에 두 번째 조건 ( ++x < 5 ) 은 실행되지 않습니다.
( 2 > 3 ) and ( ++x < 5 )
이것을 단축 계산이라고 합니다.
파이썬에서는 다음과 같은 수식도 가능합니다.
10 <= age <= 20
위의 수식은 변수 age가 10 이상이고 20 이하이면 참이 됩니다.
하지만 위의 수식은 JAVA나 C 와 같은 언어에서는 실행되지 않습니다. 만약 파이썬이 아니라면 다음과 같이 작성해야 합니다.
&&는 파이썬의 and와 그 의미를 같이 하는 기호입니다.
10 <= age && age <= 20
1. 봉민이가 다니는 쿠러그대학은 졸업하려면 적어도 140 학점을 이수해야 하며 최소 평점이 2.0 이상이어야 한다고 합니다.
사용자로부터 이수학점 수와 평점을 물어보고 졸업 가능 여부를 출력하는 프로그램을 작성해봅시다.
<실행 결과>
이수한 학점 수를 입력하세요 : 120
평점을 입력하세요 : 2.3
졸업이 힘듭니다 ㅠㅠ
이수한 학점 수를 입력하세요 : 143
평점을 입력하세요 : 3.5
졸업 가능합니다!
2. 봉민이가 다니는 회사는 실적 목표를 달성했을 경우 실적 목표를 초과한 금액의 10%를 성과급으로 지급한다고 합니다.
실적 목표가 1,000만원이라고 할 때 이를 계산하는 프로그램을 만들어봅시다.
<실행 결과>
실적을 입력하세요 (단위 : 만원) : 1200
실적 달성 보너스 : 20.0
실적을 입력하세요 (단위 : 만원) : 800
실적 목표에 도달하지 못했습니다 ㅠㅠ