논리 연산자

소개

조건문은 어떤 조건이 *True*인지 아닌지 요청하여 결정하는데 좋은 방법이긴 해요. 근데 하나의 조건 가지고는 충분하지 않을 때가 자주 있죠. 아마 결과의 반대를 취하려 할거예요. 아니면 turtle.xcor()turtle.ycor() 로 결정하려 한다면 이걸 결합해야 해요. 논리 연산자를 쓰면 해결할 수 있어요.

조건의 부정

무언가 *False*로 되돌리고 싶으면 ``not``을 쓸 수 있어요. 이건 논리 연산자거든요:

x = False
if not x :
    print("condition met")
else:
    print("condition not met")

연습

거북이가 화면을 지나가면서 그렸는지 안그렸는지 확인하도록 쓸모있는 함수를 주는데요, 그걸 turtle.isdown()``이라고 하겠습니다. 합수는 거북이가 그림을 그리면 *True* 값을 반환해요. 앞에서 보신대로 ``turtle.penup() 과``turtle.pendown()`` 토글 함수는 움직이는 동안 그릴것이냐, 그리지 않고 그냥 움직이기만 할 것이냐의 상태를 바꾸어요.

단순히 펜을 들었을때 전진만하는 함수를 작성할 수 있을까요?

해결책

def stealthed_forward(distance):
    if not turtle.isdown():
        turtle.forward(distance)

이거 저거 아니면 다른거요

이해하기 쉬운 두 개의 연산자로는 ``and``랑 ``or``가 있어요. 말 그대로 동작해요::

if 1 < 2 and 4 > 2:
    print("condition met")

if 1 > 2 and 4 < 10:
    print("condition not met")

if 4 < 10 or 1 < 2:
    print("condition met")

하나의 논리 연산자를 쓰는데 제한을 받진 않아요. 원하는 대로 붙일 수 있어요.

연습

이미 원형 감옥에 거북이를 놓았었어요. 이제 상자를 만들어보기로 하겠어요. 거북이가 X or Y 방향으로 100 이상을 가면, 거북이를 가운데 주변으로 다시 돌려놓겠어요.

해결책

def forward(distance):
    while distance > 0:
        if (turtle.xcor() > 100
            or turtle.xcor() < -100
            or turtle.ycor() > 100
            or turtle.ycor() < -100):
            turtle.setheading(turtle.towards(0,0))
        turtle.forward(1)
        distance = distance - 1