U E D R , A S I H C RSS

코드레�스/2007/RUR_PLE

1. 시간 ë°°ë„

  • ì´� 소요 예ìƒ� 시간 : 2시간
  • 간단한 설명 10ë„
  • 로봇 사용법 20ë„
  • 스테ì�´ì§€ 15ë„마다(6단계)
  • 힌트, 설명ì�€ 계ì†� 제공

2. RUR-PLE �란 ?

  • 프로그래ë°� 언어를 배우는것ì�€ 재밌어야 한다는 취지ì—�서 만들어진 환경ì�´ë‹¤. 실제로 í•´ë³´ë©´ 재밌다. ë�„움ë�„ ë§Žì�´ ë�œë‹¤.
  • Python 언어를 사용하여 컴퓨터 프로그래ë°� 언어를 배울수 있는 환경ì�´ë‹¤.
  • Python 문법 기반ì�´ì§€ë§Œ, 몰ë�¼ë�„ ìƒ�관없다. 주어진 함수들ì�„ 가지고 í•´ê²°í•´ 나가기 때문ì�´ë‹¤. 변수ë�„ 안쓴다. -_-
  • 실제로 로봇ì—� 프로그래ë°� 해서 ê·¸ 로봇ì�´ 현실ì—�서 ìž�ì‹ ì�´ 프로그래ë°� 하는ë�°ë¡œ 움ì§�ì�´ëŠ”ê²ƒì�„ ë³´ë©´ ì •ë§� 좋겠지만 여건ì�´ 안ë�˜ëŠ” ë§Œí�¼ -_-; 화면으로나마 ê·¸ 로봇ì�´ 움ì§�ì�´ëŠ” 것ì�„ 보면서 프로그래ë°� í•´ë³¼ 수 있다. 여기ì—�서 작성하는 코드들ì�´ 무슨 쓸모가 있ì�„까 싶기ë�„ 하겠지만, 추후ì—� 실제 로봇ì�˜ ë�™ìž‘ì�„ 프로그래ë°�해서 넣는다면 여기서 ì“°ì�´ëŠ” ë°©ì‹�ê³¼ 비슷하게 ë„£ì�„것ì�´ë‹¤.(하드웨어ì �으로 복잡한것ì�„ 명령어로 ì¶”ìƒ�í™” 시킨다ì�Œì—� ê·¸ 명령어ì�„ ì �절하게 복합ì �으로 사용하여 ì›�하는 í–‰ë�™ì�„ 로봇ì�´ 하게 만드는 ì‹�으로..) 즉 ë§�그대로 로봇 프로그래ë°�ì�„ ê°„ì ‘ì �으로나 í•´ë³¼ 수 있다.

3. 규칙들

3.1. 규칙 1

  • 컴퓨터 프로그래ë°�ì�„ ì�µížˆëŠ” 것ì�€ 악기를 ì�µížˆëŠ” 것과 비슷하다. 당신ì�€ 그것ì—� 관해 단순히 ì�½ê¸° ë§�ê³  í•´ë´�야 한다.

3.2. 규칙 2

  • 사람들ì�´ ì�½ê¸° 쉬운 프로그램ì�„ 작성해야 한다.

3.3. 규칙 3

  • 컴퓨터 프로그램ì�„ 작성할때는 반복ì�„ 하지 마ë�¼.

4. 간단한 러플 사용법

4.1. 로봇 한번 움�여 볼까?

  • ì°½ì—�서 Robot: Code and Learn 탭ì�„ ì„ íƒ�한다.
  • 왼쪽 코드 쓰는 화면ì—� 아래와 ê°™ì�€ 코드를 넣어 본다.

~cpp 
move()
turn_off()
  • 그후 화면ì—� Mp3 Play 버튼 비슷하게 ìƒ�긴 버튼ì�„ í�´ë¦­í•œë‹¤.
  • 저장하ë�¼ëŠ” ì°½ì�´ 나오면 test ë�¼ê³  넣고 저장한다.
  • 그리고 다시 play 버튼ì�„ 누른다.

4.1.1. 키보드로 로봇 움��기

  • 화면ì�˜ 로봇ì�„ í�´ë¦­í•œë‹¤.
  • 왼쪽 ë°©í–¥ 키보드를 누르면 ë°©í–¥ì�´ ë°”ë€�다.
  • 위쪽 ë°©í–¥ 키보드를 누르면 앞으로 ì�´ë�™í•œë‹¤.

4.2. 왼쪽으로 함 �아 볼까?

  • 아래와 ê°™ì�€ 코드를 넣어 본다.

~cpp 
move()
turn_left()
move()
turn_off()
  • 한칸 앞으로 간다ì�Œì—� 왼쪽으로 ë�Œê³ ë‚˜ì„œ 한칸 앞으로 가고 나서 정지하는것ì�„ ë³¼ 수 있다.

4.2.1. 연습

  • 로봇ì�´ 길ì�´ 2ì�¸ 사ê°�형ì�„ 그리면서 반시계 방향으로 ë�„는것ì�„ 만들어 ë³´ìž�.

  • 로봇ì�´ 아래 그림과 ê°™ì�´ 움ì§�ì�´ê²Œ 해본다.


4.3. ��(beeper) 옮기기

  • beeper를 옮겨 ë³´ìž�.
  • beeper를 드는 명령어 : pick_beeper()
  • beeper를 ë‚´ë ¤ 놓는 명령어 : put_beeper()
  • beepers1.wld 파ì�¼ì�„ 연다.
  • 아래 그림과 ê°™ì�´ 하는 코드를 짜본다.



4.4. 디버깅 방법?

  • RUR-PLEì—�서ë�„ 디버깅ì�„ 한다.
  • Play버튼 옆ì—� Play 모양과 작대기 하나 있는것ì�€ step into와 비슷한 ì—­í• ì�„ 한다. 명령어가 하나씩 실행ë�œë‹¤. 현재 실행ë�˜ê³  있는 명령어는 코드 ë€ë„ì—�서 회색으로 highlighting ë�œë‹¤.
  • Play버튼ì�„ í�´ë¦­í•˜ê³  나서 로봇ì�´ 움ì§�ì�´ê³  있는 ë�„중ì—� ìž�ì‹ ì�´ ì›�하는 순간ì—� step into 버튼(play 버튼 옆ì—� 있는)ì�„ í�´ë¦­í•˜ë©´ ê·¸ 순간ë€í„° 명령어가 하나 하나씩 실행ë�œë‹¤.
  • step into 옆ì—� 있는 버튼ì�€ ì�¼ì‹œ 중지 버튼
  • ê·¸ 옆ì—� 있는 빨간 버튼ì�€ 완전 종료 버튼

4.5. 벽 만들어 보�~!

  • 버튼들 중ì—�서 ë²½ 처럼 ìƒ�긴 버튼ì�„ í�´ë¦­í•œë‹¤. 그럼 아래 그림과 ê°™ì�€ 화면ì�´ 나온다. 여기서 í�´ë¦­! í�´ë¦­~! 해서 벽들ì�„ 만들 수 있다.

4.5.1. 연습

  • 아래 그림과 ê°™ì�´ 로봇ì�´ 신문배달 하게 함 코드를 작성해보ìž�


  • 아래와 ê°™ì�€ ì§€ë�„ì—�서 1 모ë‘�를 수확하는 코드를 작성해 ë³´ìž�.


4.6. 중복 피하기

  • 아래와 ê°™ì�´ def 를ì�¨ì„œ 함수를 ì •ì�˜í•  수 있다.

  • repeat 명령어를 ì�¨ì„œ 여러번 수행해야 하는 함수(명령어 í�¬í•¨)ì�„ 한번ì—� ë°©ë³µ 횟수만 지정해서 사용할 수 있다.

~cpp 
def turn_right():
    repeat(turn_left, 3)
  • ë²½ 만들기 연습ì—�서 한 코드들ì�„ 함수화 해서 중복 제거를 한다.

4.7. if 문 사용

  • next_to_a_beeper() : beeperê°€ 현재 로봇ì�˜ ìž�리ì—� 있으면 true, 없으면 false를 반환한다.

~cpp 
if next_to_a_beeper():
    pick_beeper()
  • 위ì�˜ if문과 함수 ì •ì�˜, repeat를 사용하여 아래 화면과 ê°™ì�€ ìƒ�황ì�„ 처리한다.



4.7.1. else 문 사용

  • front_is_clear() : 로봇앞ì—� ë²½ì�´ 없으면 true, 있으면 false
  • left_is_clear() : 로봇ì�˜ 왼쪽ì—� ë²½ì�´ 있는지 검사
  • right_is_clear() : 로봇ì�˜ 오른쪽ì—� ë²½ì�´ 있는지 검사
  • else 문ì�€ 아래 코드처럼 쓴다.

~cpp 
def move_or_turn():
    if front_is_clear():
        move()
    else:
        turn_left()
  • 아그래 그림처럼 로봇ì�´ 방안ì�„ 한바퀴ë�Œê²Œ í•´ë³´ìž�. ë°© í�¬ê¸°ì—� ë”°ë�¼ì„œ 반복 횟수를 다르게 해줘야 한다. í�¬ê¸°ê°€ 5ë�¼ë©´ 5*4=20 ì�´ëŸ°ì‹�으로..


4.8. not

  • notì�€ 아래와 ê°™ì�€ ì‹�으로 사용한다.

~cpp 
if not next_to_beeper():
    move()
else:
    turn_off()	

4.8.1. 연습

  • 아래 그림처럼 만든다.


  • 문제ì—�서 아래와 ê°™ì�€ 소스를 참고 하ë�¼ê³  한다. 저는 좀 다르게 했습니다. ìš°ì„  참고는 했고..

~cpp 
# introducing vocabulary related to the problem
next_to_a_carrot = next_to_a_beeper
plant_carrot = put_beeper
pick_carrot = pick_beeper

def one_carrot_only():
    if not next_to_a_carrot():
        plant_carrot()      # replace missing seed
    else:
        pick_carrot()
        if not next_to_a_carrot(): # oops!
            plant_carrot()  # we had removed the only one

4.9. while

  • 아래와 ê°™ì�€ ì‹�으로 사용한다.

~cpp 
next_to_a_carrot = next_to_a_beeper
plant_carrot = put_beeper
pick_carrot = pick_beeper

def one_carrot_only():
    while next_to_a_carrot():
        pick_carrot()      # pick them all!
				
    plant_carrot()         # replant only one
  • harvest3.wld 파ì�¼ì�„ 연다.
  • while문ì�„ 사용하여 중복ë�œ 씨앗ì�˜ 개수가 2 ì�´ìƒ�ì�¸ ìž„ì�˜ì�˜ 개수ì�¼ 경우ì—�ë�„ 처리 가능하게 위 소스를 수정한다.


4.10. Amazing Part

  • ì •ë§� 유ì�µí•œ ë‚´ìš©ì�´ë‹¤. 주어진 간단한 몇가지 ìƒ�황ì�„ 해결하면 놀ë�¼ìš´ 기능ì�´ ë�˜ëŠ”ê²ƒì�„ ë³¼ 수 있다.
  • sorting 문제를 풀고나서 시간 남ì�€ ë„ì�€ 해보시길. 러플 Amazing 설명

4.11. Sorting

  • sort0_1.wld 파ì�¼ì�„ 연다.
  • 주어진 ì‚�ì‚�들ì�„ 그림처럼 오름차순으로 로봇ì�´ 정렬하게 만들면 ë�œë‹¤.
  • 아래는 간단하게 2ê°œì�˜ columnì�˜ 경우 정렬한 모습ì�´ë‹¤.


  • 다ì�Œì�€ sort0_2.wld 파ì�¼ì�„ 연다.
  • 아래 그림과 ê°™ì�´ ì›�래 ì •ë ¬ë�˜ì–´ 있는 경우ì—�ë�„ 제대로 ìž‘ë�™ë�˜ëŠ”ì§€ 테스트 해본다.


  • sort1 파ì�¼ì�„ 연다.
  • 아래 그림과 ê°™ì�´ 좀ë�” 복잡한 여러개ì�˜ column ì—�서ë�„ ìž‘ë�™í•´ì•¼ 한다.


  • sort2 는 추후 공개

5. 경품

  • sort1, sort2 ë§µì�„ 가장 먼저 모ë‘� 오름차순으로 정렬하는 ë„ì—�게 ë�°ë¸”스캠프/2005/RUR-PLE/경품ì�„ 드립니다.
  • 05 조현태 êµ°ì�´ 가장 먼저 sortingì�„ 해결하여 경품ì�„ 탔습니다. ì�´í›„ 01 김정현 ì�´ sort2 ë§µì—� 대해서 해결하였지만 sort1ì—� 대해서는 ë€ë„ì �으로 해결하였습니다.
    �블스캠프2005/RUR_PLE/조현태
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:19
Processing time 0.1808 sec