2022년 8월 16일 화요일

정원사 로봇 리보그(초급) - 8. 민들레 뽑기 (1)

민들레 뽑기 (1)

  리보그가 정원에 무작위로 돋은 잡초를 뽑아 쓰레기통에 버리게 하는 프로그램을 작성하며, 여러 상황에서 참과 거짓을 판단하여 작업을 수행하는 조건 명령과 함수에 대해 알아봅니다.

코드 작성: http://reeborg.ca/reeborg.html?lang=ko-en&mode=python&menu=worlds%2Fmenus%2Fsk_menu_ko.json&name=8%20%EB%8B%A8%EA%B3%84&url=worlds%2Fsk_ko%2Fstep8.json


여러분의 임무

리보그의 친구 브리는 민들레를 뽑아 씨앗을 가능한 멀리 부는 것을 좋아합니다.

Photo by Ivan Dostál

그래서 정원 곳곳에 민들레 씨앗이 떨어져 여기저기 민들레가 돋아나고 있습니다. 민들레는 예쁘긴 하지만 농작물을 기르는 텃밭에는 불필요한 잡초입니다. 리보그는 종종 앞뜰에서 자라는 민들레를 발견합니다. 하지만 민들레가 항상 같은 지점에서 자라는 것은 아닙니다. 8단계 문제에 들어가 재생 버튼을 눌러보면 민들레가 매번 다른 장소에 나타난다는 것을 알 수 있습니다. 민들레 그림 아래에 있는 검은 색 물음표 때문에 이런 일이 일어나는 것입니다. 

  리보그가 앞마당을 걸어가며 민들레를 발견하면 집어들 수 있도록 프로그램을 만들어야 합니다. 리보그가 앞으로 가면서 민들레가 있는지 없는지 확인해가며 앞으로 나아가야 합니다. 가능한 모든 민들레를 집어들면 리보그를 (2,3) 지점으로 돌아가게 하여 주운 민들레를 내려놓도록 합니다. 그리고 마지막 목표 지점으로 이동합니다. 코드의 가독성을 높이려면 주석과 공백을 사용해야 합니다!

여러분이 알아야 할 것은

  • move(), turn_left(), take(), put()
  • object_here(), carries_object()
  • if

난이도

  • ⭐ ⭐ ⭐

시작 시 조건

        로봇은 (x, y) = (1, 3)에 위치해 있고, 싣고 있는 객체는 없습니다.

목표 달성 시 조건

        로봇의 최종위치는 반드시 (x, y) = (1, 3)에 있어야 합니다.

튜토리얼

def some_name():
    # block of code

if some_condition:
    # block of code

노트

if 명령문에서 True또는 False동일한 결과를 제공하는 함수를 설명하는 데 사용되는 일반적인 용어 condition입니다 .

if condition:
    ...

True나 False가 그 자체 기능으로 리보그가 특별한 결정을 내리는데 도움을 주지는 못합니다. 그러나 리보그가 결정을 내릴 수 있도록 인식하는 특별한 기능이 있습니다. 이들 중 첫 번째는 object_here() 인데 이것은 리보그가 있는 위치에 최소한 하나의 물체가 있는지 알 수 있게 합니다. 예를 들어 우리가 개체(민들레, 당근 등)를 수집하기 위한 코드의 한 부분은 다음과 같습니다.

if object_here():
    take()

위와 같은 형식으로 리보그가 답할 수 있는 전체 기능(질문) 목록은 다음과 같습니다.

질문 / 기능설명
at_goal()리보그가 목표 타일(플래그, 홈 또는 녹색 타일)에 있으면 True를 반환하고, 그렇지 않으면 False를 반환합니다.
front_is_clear()리보그 앞에 장애물(벽 등)이 없으면 True를, 그렇지 않으면 False를 반환합니다.
right_is_clear()리보그 오른쪽에 장애물(벽 등)이 없으면 True를, 그렇지 않으면 False를 반환합니다.
wall_in_front()리보그 앞에 벽이 있으면 True를, 그렇지 않으면 False를 반환합니다.
wall_on_right()리보그 오른쪽에 벽이 있으면 True를, 그렇지 않으면 False를 반환합니다.
object_here()리보그가 서있는 것과 같은 타일에 개체(별, 민들레 등)가 있으면 True를, 그렇지 않으면 False를 반환합니다.
carries_object()리보그가 현재 적어도 하나의 개체(별, 민들레 등)를 가지고 있으면 True를 반환합니다. 리보그가 아무것도 가지고 있지 않으면 False를 반환합니다.
is_facing_north()리보그가 현재 북쪽을 향하고 있으면 True를, 그렇지 않으면 False를 반환합니다.

여러분의 차례

다음 링크를 클릭하여 앞뜰에 무작위로 돋아난 민들레를 제거하세요.

코드 작성: http://reeborg.ca/reeborg.html?lang=ko-en&mode=python&menu=worlds%2Fmenus%2Fsk_menu_ko.json&name=8%20%EB%8B%A8%EA%B3%84&url=worlds%2Fsk_ko%2Fstep8.json

* 주의 : 반복은 사용하지 마세요. 다음 과제에서 사용합니다.


원문 출처: https://cs20.ca/ConstrainedLanguage/Step8.html

댓글 없음:

댓글 쓰기