15. 참이 아닙니까?

비퍼를 발견하고 꺼질 때까지 리보그가 계속 이동하길 원한다고 가정합시다. 출발 위치에서 사례는 아래와 같습니다.

stop at beeper

의사 코드(pseudo code)로 작업을 수행하는 방법은 다음과 같을 것입니다.:

If on beeper,
... stop;
otherwise,
... keep moving.

지금까지 공부한 것을 사용해서, 의사 코드를 아래처럼 번역할 수 있습니다.

if on_beeper():
    turn_off()
else:
    move()           

아직, 리보그에게 반복해서 진행하라고 명령하지 않아서 단지 프로그램의 일부입니다. 잠시 이것은 무시합시다. 대신에 이것에 상응하는 다른 의사 코드를 생각해 봅시다.

If not on beeper,
...keep moving;
otherwise,
...stop.

keep moving과 stop의 순설르 바꾸었지만, 여러분은 두 가지 방식이 동일하다는 것에 동의하실 것입니다. 핵심 내용은 두 번째 경우에 if 문 뒤에 부정 “not”키워드의 사용입니다. 파이썬은 아래와 같이 테스트에서 부정을 사용할 수 있습니다.

if not on_beeper():
    move()
else:
    turn_off()          

지금까지 여러분이 배운 것을 사용해서, 완전한 프로그램으로 바꿔봅시다. def 함수 명령문을 사용해서 명령문을 정의하고, 리보그가 작업을 완수할 수 있을 만큼 충분히 반복해야 합니다.

여러분 차례

신규 파이썬 키워드 not를 사용해서 장애물 넘기 프로그램을 다시 작성하세요.


김을 매고 씨 뿌리는 시기

봄이 왔습니다. 리보그의 아버지는 가을 추수를 위해서 정원에 씨앗을 심었습니다. 몇몇 곳에서 씨앗 두 개가 발아를 했고, 다른 곳에서는 발아를 하지 않았습니다. 전형적인 상황은 아래 보여지고 있습니다. (파일: harvest4.wld)

weeding

리보그가 정원에서 김을 매는 것을 도와주세요. 두 개의 당근(비퍼)이 있는 곳이 있거나, 당근이 하나도 없는 곳이 있으면 안 됩니다. 최종 상황은 아래와 같아야 합니다.

weeding

여기에 코드의 일부분에 사용될 수 있는 제안이 있습니다.

# 문제에 관련 어휘를 연결시키기
next_to_a_carrot = on_beeper
plant_carrot = put_beeper
pick_carrot = pick_beeper

def one_carrot_only():
    if not next_to_a_carrot():
        plant_carrot()      # 씨앗이 없는 것을 대체하기
    else:
        pick_carrot()
        if not next_to_a_carrot(): # 이런(oops!)
            plant_carrot()  # 단지 하나만 제거해야 합니다.

현실에서 모든 씨앗을 제거하고 당장 다시 심는 것은 좋은 생각이 아닙니다.

previous If, else, if, else, .... - home - while 문 next