웹사이트 검색

파이썬에서 불리언 논리 시작하기


불리언 논리는 수학, 공학 및 프로그래밍의 필수적인 부분입니다. 대부분의 언어에는 전용 불리언 데이터 유형이 있습니다. 파이썬에 익숙하지 않은 경우, 불리언은 이 언어에서 어떻게 작동하는지 때문에 혼란스러울 수 있습니다. 우리는 파이썬의 불리언 논리의 모든 세부 사항을 탐구할 것입니다.

부울 논리의 기초 이해

불리언 로직은 프로그래밍에서 의사 결정의 기초입니다. 그 핵심은 단순한 질문으로 귀결됩니다. 어떤 것이 진실입니까, 아니면 거짓입니까?

이 개념은 19세기에 참과 거짓이라는 두 가지 값만을 사용하여 논리의 대수적 시스템을 개발한 수학자 조지 불(George Boole)에서 기원합니다. 컴퓨터 과학에서 이러한 이진적 사고 방식은 디지털 세계와 완벽하게 일치합니다. 그것은 궁극적으로 컴퓨터가 두 가지 상태, 즉 켜짐(1)과 꺼짐(0)으로 작동하기 때문입니다.

컴퓨터만이 아닙니다. 이 개념을 따르는 많은 실제 비유가 있습니다. 전구는 켜지거나 꺼져 있을 수 있습니다. 문은 잠겨있거나 잠겨있지 않을 수 있습니다. 날씨를 확인할 때는 맑거나 맑지 않을 수 있습니다. 이들은 모두 불리언 결과의 예입니다.

프로그래밍에서 불리언 논리는 컴퓨터가 "결정을 내리는 것"을 가능하게 합니다. 프로그램이 비밀번호를 확인하든, 게임 메커니즘을 제어하든, 온라인 결제가 완료되었는지를 판단하든 간에 항상 불리언 논리에 의존하고 있습니다. 불리언 논리가 없다면 컴퓨터는 데이터를 맹목적으로 처리할 뿐입니다. 이를 통해 컴퓨터는 반응하고, 분기하고, 다양한 상황에 적응할 수 있습니다.

파이썬의 불리언 값

부울 논리의 개념을 보았으니, 이제 이 개념이 파이썬에서 어떻게 나타나는지 살펴보겠습니다. 파이썬에서는 부울 값이 두 개의 특별한 키워드로 표현됩니다:

True
False

두 단어의 대문자에 주목하세요. 이것은 중요합니다. true 또는 false를 소문자로 쓰면 파이썬 오류가 발생하므로, 파이썬은 이를 정의되지 않은 변수로 취급하기 때문입니다. True와 False는 파이썬의 내장 bool 데이터 타입에 속합니다:

print(type(True))
print(type(False))

재미있는 사실은 bool이 실제로 int의 하위 클래스라는 것입니다. 이는 불리언이 특정 상황에서 숫자 1과 0처럼 작동한다는 것을 의미합니다.

print(True == 1)
print(False == 0)
print(True + True)
print(False + 5)

이것은 어떤 경우에 유용할 수 있지만, 예상하지 못하면 혼란을 초래할 수도 있습니다. 따라서 파이썬이 이러한 동작을 허용하더라도, 불리언을 숫자가 아니라 논리 값으로 생각하는 것이 가장 좋습니다.

파이썬은 어떤 값을 불리언으로 변환하는 bool() 함수를 제공합니다. 여기에서 '진리값(truthy)'과 '거짓값(falsy)'의 개념이 등장합니다. 거짓값은 False로 처리됩니다. 여기에는 다음이 포함됩니다:

  • 0
  • <코드>0.0
  • "" (빈 문자열)
  • [] (빈 리스트)
  • {} (빈 딕셔너리)
  • 코드 없음

그 외의 모든 것은 진리로 간주되며 (True로 평가됩니다.)

print(bool(0))
print(bool(""))
print(bool([]))
print(bool(42))
print(bool("hi"))
print(bool([1, 2]))

파이썬의 논리 연산자

지금까지 우리는 파이썬에 두 가지 불리언 값이 있다는 것을 보았습니다: True와 False. 하지만 실제로 어떻게 사용하나요? 그 부분에서 논리 연산자가 등장합니다. 이러한 유형의 연산자는 값을 비교하고 관계를 확인하며 예-아니오 질문을 할 수 있게 해줍니다.

비교 연산자

비교 연산자는 두 값을 비교하는 데 사용됩니다. 비교의 결과는 항상 부울 값(True 또는 False)입니다. 다음은 파이썬의 모든 비교 연산자 목록입니다:

운영자

의미

==

동등한

!=

같지 않다

>

보다 더 큰

<

미만

≥

크거나 같음

<=

작거나 같음

그들이 무엇을 하는지 몇 가지 예를 보겠습니다.

print(10 > 3)
print(10 < 3)
print(5 == 5)
print(5 != 5)
print(8 >= 8)
print(2 <= 1)

비교 연산자는 숫자뿐만 아니라 문자열 및 기타 데이터 유형과도 작동합니다:

print("apple" == "apple")
print("apple" != "banana")
print("cat" < "dog")

식별 연산자

비교 연산자는 두 값이 같은지 확인하는 반면, 동등성 연산자는 두 변수가 실제로 메모리의 같은 객체를 참조하는지를 확인합니다. Python은 두 가지 동등성 연산자를 제공합니다:

운영자

의미

is

두 변수 모두 같은 객체를 가리키면 True를 반환합니다.

is not

서로 다른 객체를 가리키면 True를 반환합니다.

간단한 예:

a = [1, 2, 3]
b = a
c = [1, 2, 3]
print(a == b)
print(a is b)
print(a is c)

여기서 a와 b는 단순히 같은 것이 아닙니다. 그들은 메모리에서 실제로 같은 리스트입니다. 반면에 a와 c는 같은 내용을 가질 수 있지만, 두 개의 별개의 객체입니다. 그래서 결과가 False인 것입니다.

멤버십 연산자

멤버십 연산자는 값이 시퀀스나 컬렉션 내에 존재하는지 확인하는 데 사용됩니다. 항목이 발견되면 True를 반환하고, 발견되지 않으면 False를 반환합니다. 이들은 코드를 더 읽기 쉽고 표현력 있게 만듭니다. 반복문이나 복잡한 확인 작업을 작성하는 대신, 무언가가 컬렉션의 멤버인지 확인하는 데 사용할 수 있습니다.

운영자

의미

in

값이 시퀀스에 존재하면 True를 반환합니다.

not in

값이 존재하지 않는 경우 True를 반환합니다.

문자열 유형 예제를 살펴보겠습니다.

print("a" in "apple")
print("app" in "apple")
print("z" not in "apple")

여기에서 in은 부분 문자열뿐만 아니라 단일 문자도 검사합니다. 시퀀스의 경우:

numbers = [1, 2, 3, 4, 5]
print(3 in numbers)
print(10 in numbers)
print(10 not in numbers)

우리는 특정 요소가 시퀀스, 즉 파이썬 리스트에 존재하는지 확인합니다.

조건문과 반복문에서의 불 논리

불리언은 단순한 추상 값이 아닙니다. 많은 프로그램에서 불리언은 코드 흐름과 의사 결정을 제어합니다. 프로그램이 경로를 선택하거나 행동을 반복해야 할 때마다 불리언 논리에 의존합니다. 이러한 불리언 논리를 사용하는 두 가지 주요 장소가 있습니다:

  1. 조건문 (if/elif/else)
  2. 루프 (while 및 for)

각각을 탐험해봅시다.

조건문

조건문은 프로그램이 조건이 참인지 거짓인지에 따라 다르게 반응하도록 합니다. 다음은 간단한 조건문 확인 예시입니다:

age = 20
if age >= 18:
   print("You are allowed to vote.")
    

Python은 age >= 18을 평가합니다. 결과가 True이면, 들여쓰기 된 블록이 실행됩니다. 만약 False라면, 블록은 생략됩니다. 여기서 20 >= 18이 True이므로 메시지가 출력됩니다. 여기 False인 경우에 다른 코드 문을 실행하는 또 다른 예가 있습니다.

password = "password123"
if password == "password123":
    print("Access granted.")
else:
    print("Access denied.")
    

조건이 True이면 첫 번째 블록이 실행됩니다. 그렇지 않으면 else 블록이 대신 실행됩니다. 조건이 하나 이상인 경우, elif 문을 사용합니다.

score = 85
if score >= 90:
   print("Grade: A")
elif score >= 80:
   print("Grade: B")
elif score >= 70:
   print("Grade: C")
else:
   print("Grade: F")
    

파이썬은 각 조건을 순서대로 확인합니다. 하나의 조건이 True가 되자마자 해당 블록이 실행되고 나머지는 건너뛰게 됩니다. 이러한 방식으로 불리언은 프로그램이 다양한 가능성으로 분기하는 데 도움을 줍니다.

루프

루프는 계속 실행해야 하는지 여부를 결정하기 위해 불리언 논리를 사용합니다. 특히 while 루프에서 유용합니다.

count = 0
while count < 3:
    print("Counting:", count)
    count += 1
    

파이썬은 count < 3을 검사합니다. 만약 True라면, 반복문 본문이 실행됩니다. 실행 후 파이썬은 조건을 다시 확인합니다. 조건이 False가 되면 반복문이 멈춥니다. 또한, 불리언 값 True를 사용하여 무한 루프를 시작할 수 있습니다.

while True:
   command = input("Type 'exit' to quit: ")
   if command == "exit":
       break
    

여기서 True 조건은 루프가 영원히 실행되도록 하지만, 루프 내의 불린 논리(command == "exit")는 필요할 때 종료할 수 있게 해줍니다. 불린 논리는 for 루프에서도 역할을 합니다. 명확히 보이지 않을 수 있지만, 존재합니다.

numbers = [1, 2, 3, 4, 5]
for num in numbers:
   if num % 2 == 0:
       print(num, "is even")
   else:
       print(num, "is odd")
    

각 반복에서 파이썬은 목록에 남아 있는 항목이 있는지를 묻고 있습니다. 만약 있다면, 그것을 num에 할당하고 루프 본문을 실행합니다. 없다면 루프를 멈춥니다. 그 숨겨진 예/아니요 질문이 부울 논리의 작용입니다.

조건문과 반복문은 프로그래밍 논리의 근본입니다. 불리언이 없으면 코드가 매번 똑같이 위에서 아래로 실행될 것입니다. 그러나 불리언이 있으면, 프로그램은 데이터에 기반하여 결정을 내리고 행동을 반복할 수 있습니다.

피해야 할 일반적인 실수

파이썬의 불리언 논리는 익숙해지면 간단하지만, 초보자(때때로 경험이 있는 개발자조차도)들이 마주치는 몇 가지 함정이 있습니다.

혼동하다 is를 ==와

== 기호는 두 값이 같은지 확인합니다. 반면 is는 두 변수가 메모리에서 같은 객체를 참조하는지 확인합니다. 값의 동등성을 중요하게 생각할 때는 ==를 사용하세요. 객체의 동일성을 확인할 때만 is를 사용하세요.

bool() 변환이 직관적이라고 가정하기

bool() 함수는 값이 참인지 거짓인지에 따라 True 또는 False로 변환합니다. 초보자들은 종종 bool("False")가 False를 반환할 것이라고 가정합니다. 파이썬에서 비어 있지 않은 모든 문자열은 참으로 평가되며, 그 내용이 무엇이든 상관 없습니다. 오직 "" (빈 문자열)만이 False로 평가됩니다.

연산자 우선순위 잊기

불리언 연산자는 항상 왼쪽에서 오른쪽으로 평가되지 않습니다. 예를 들어:

a = 5
print(not a == 5)

첫눈에 보기에는 이것이 not (a == 5) (즉, False)를 의미하는 것처럼 보이지만, 실제로는 (not a) == 5를 의미합니다. not a는 False가 되므로, False == 5를 비교하고 있습니다. 그래서 불리언 연산자와 비교를 혼합할 때는 항상 괄호를 사용해야 합니다.

print(not (a == 5))


지금쯤이면 파이썬에서 불리언 논리를 사용하는 방법에 대해 잘 이해하고 있을 것입니다. 이제 파이썬을 배우는 동안 실수를 피할 수 있습니다. 배우는 내용을 확고히 하기 위해 프로젝트를 만들어보는 것을 잊지 마세요.