논리연산자와 중첩 if
여러 조건을 한꺼번에 검사하는 and, or, not 논리연산자와,
if 안에 또 다른 if를 넣는 중첩 if까지
요즘은 고등학교에서도 코딩을 정규 과목으로 가르치는 시대입니다. 전공자가 아니어도 바이브 코딩(Vibe Coding)이나 생성형 AI(Generative AI)를 활용하면 누구나 그럴듯한 코드 결과물을 만들어낼 수 있게 되었죠.
개발 언어를 접하는, 전공자가 아닌 일반인 입문자가 많아진 것입니다.
이 시리즈는 글쓴이가 실제로 일반인, 고등학생 등 비전공자·입문자에게 파이썬을 가르치면서 정리한 내용들을 교재 형식으로 엮은 글입니다.최대한 쉽고 친절하게 설명하면서도, 컴퓨터와 프로그래밍 언어에 대한 기초 이론까지 함께 짚고 넘어가려 합니다.
고등학생, 비전공자, 완전 입문자도 따라올 수 있게끔 만든 시리즈이고, 실제 과외 수업 자료를 바탕으로 만들어서 학교 시험처럼 개념 확인 문제도 그대로 들어있어요.
중간중간 빈칸 채우기랑 학교 시험 유형 문제가 나오는데, 정답은 바로 안 보이게 접어뒀습니다. 먼저 스스로 생각해본 다음 "보기"를 눌러서 확인해보세요.

지금까지는 조건을 한 개씩만 검사했어요. 하지만 현실에서는 여러 조건을 동시에 검사해야 하는 경우가 훨씬 많습니다.
예를 들어 놀이기구를 타려면 키 140cm 이상 그리고 나이 12세 이상을 둘 다 만족해야 하고, 시험을 보려면 학생증 또는 신분증 중 하나만 있으면 되죠. 이런 "그리고"와 "또는"을 코드로 표현하는 것이 바로 논리연산자입니다.
| 연산자 | 의미 |
|---|---|
and |
그리고 (모든 조건을 만족해야 True) |
or |
또는 (하나만 만족해도 True) |
not |
아니다 (결과를 반대로 뒤집음) |
height = 170
if age >= 19 and height >= 160:
print("탑승 가능합니다.")
age가 15라면 15 >= 19는 False가 되고, False and True는 전체가 False이므로 아무것도 출력되지 않아요. and는 둘 다 True일 때만 True가 됩니다.
if age <= 12 or age >= 65:
print("무료 입장")
if num == 3 or 5: — 많은 사람들이 이렇게 써도 되는지 헷갈려 하시는데 이 코드는 의도한 대로 동작하지 않습니다. 조건은 각각 따로 비교해야 해요.
→ 올바른 표현: if num == 3 or num == 5:
print(not False)
True
if not login:
print("로그인이 필요합니다.")
else:
print("서비스를 이용합니다.")
and와 or는 두 개까지만 연결할 수 있는 게 아니에요. 필요한 만큼 얼마든지 이어서 쓸 수 있습니다.
height = 175
weight = 60
if age >= 19 and height >= 160 and weight >= 50:
print("모든 조건을 만족합니다.")
- ① 모든 조건이 참이어야 참이 되는 연산자는 이다.
- ② 여러 조건 중 하나만 참이어도 참이 되는 연산자는 이다.
- ③ 참과 거짓을 반대로 뒤집는 연산자는 이다.
정답
- 다음 프로그램이 실행되지 않는(아무것도 출력하지 않는) 이유를 서술하시오.
age = 18
height = 170
if age >= 19 and height >= 160:
print("탑승") - 다음 중 실행 결과가 True인 것을 모두 고르시오.
① True and False
② not False
③ False or False
④ True or False
정답
and는 두 조건이 모두 True여야 하는데, 앞쪽 조건이 이미 False이므로 height 값과 상관없이 전체 결과가 False가 되어 if 블록이 실행되지 않습니다.2. ②, ④ —
not False는 True, True or False는 하나만 True여도 되므로 True입니다.
실제 프로그램에서는 첫 번째 조건이 맞을 때, 그 안에서 또 다른 조건을 검사해야 하는 경우가 많습니다. 이렇게 if문 안에 또 다른 if문이 들어가는 구조를 중첩 if(Nested if)라고 해요.
예를 들어 게임 로그인은 "아이디가 맞는가? → 맞으면 → 비밀번호가 맞는가?" 순서로 검사합니다. 아이디가 틀렸는데 비밀번호까지 검사할 필요는 없으니까요.
실행
if 조건2:
실행
안쪽 if는 반드시 바깥쪽 if보다 한 단계 더 들여쓰기해야 합니다. 들여쓰기 깊이 자체가 "어느 if 안에 속해 있는지"를 나타내기 때문이에요.
if id == "admin":
pw = input("비밀번호 : ")
if pw == "1234":
print("로그인 성공")
비밀번호 : 1234
로그인 성공
아이디가 "admin"이 아니면 바깥쪽 조건부터 False가 되므로, 안쪽 if는 실행조차 되지 않고 비밀번호도 아예 입력받지 않습니다.
들여쓰기를 빠뜨리거나, 첫 번째 if가 False인데도 안쪽 if가 항상 실행된다고 착각하는 경우가 많습니다. 첫 번째 조건이 False이면 안쪽 if는 아예 실행되지 않아요.
if password == "1234" and money <= 500000:처럼 논리연산자로도 조건을 검사할 수 있습니다. 하지만 이 방식은 password와 money 두 값이 이미 모두 준비되어 있어야 합니다.
반면 중첩 if는 첫 번째 조건이 맞아야만 다음 입력을 받으므로, 불필요한 입력을 받지 않아요. 그래서 실제 프로그램에서는 중첩 if 구조를 더 많이 사용합니다.
- 다음 코드의 실행 결과를 작성하시오.
login = True
admin = False
if login:
if admin:
print("관리자")
print("끝")
정답
print("끝")은 들여쓰기가 되어있지 않아 if와 무관하게 항상 실행되므로 "끝"만 출력됩니다.- 중첩 if란 무엇인지 서술하시오.
- 다음 코드의 실행 결과를 작성하시오.
login = True
member = True
if login:
if member:
print("서비스 이용")
정답
2. 서비스 이용 — login과 member가 모두 True이므로 바깥쪽, 안쪽 if가 순서대로 모두 통과합니다.
중첩 if는 마찬가지로 2개 이상의 중첩이 가능합니다. 갯수에 상관없이 중첩할 수 있지만, 중첩이 깊어지는 것이 꼭 좋은 것만은 아닙니다.
'Language > Python' 카테고리의 다른 글
| [고등학생부터, 파이썬] 05. 조건문(if) (0) | 2026.08.04 |
|---|---|
| [고등학생부터, 파이썬] 04. 산술연산자와 비교연산자 (0) | 2026.08.04 |
| [고등학생부터, 파이썬] 03. input() 함수와 형변환(Type Casting) (0) | 2026.08.04 |
| [고등학생부터, 파이썬] 02. 자료형 (Data Type) (0) | 2026.08.04 |
| [고등학생부터, 파이썬] 01. 프로그래밍이란? + print()와 변수 (0) | 2026.08.04 |
댓글