2. 시작하기

2.1 학습내용

2.1.1 목표

  • 변수를 정의하고 사용할 수 있다.
  • 변수를 그 값을 사용할 수 있는 범위에 따라 지역변수와 전역변수를 구분하여 사용할 수 있다.
  • 여러 명령문을 순서대로 실행하는 절차를 만들 수 있다.
  • 함수를 만들고, 사용할 수 있다. 함수의 매개변수와 반환값을 사용할 수 있다.

2.1.2 문제

  • 시작-1: 미로를 그려서, 사진 찍고 거북이 게임.
  • 시작-2: 미로게임을 애니메이션

2.2 로고 프로그래밍

  • 로고Logo는 교육용 프로그래밍 언어이다.
  • 1967년 Daniel G. Bobrow, Wally Feurzeig, Seymour Papert and Cynthia Solomon가 만들었다.
  • 그 이후로 많은 교육기관에서 프로그래밍을 가르칠 때 사용하고 있다.
  • 처음에는 지금과 같은 모양이 아니었지만, 이해하기 쉽고 재미있는 거북이로 바꾸어 널리 사용되고 있다.
  • 특징
    • 몇 줄의 프로그램만으로 거북이를 나타내고, 움직이게 할 수 있을 정도로, 간단하게 프로그램을 할 수 있다.
    • 직관적으로 거북이를 움직이면서 프로그래밍에 필요한 변수, 명령문, 제어, 데이터구조, 함수 등을 배울 수 있다.
import os
import glob

mywd=%pwd
myplantdir=os.path.join(mywd,'lib')
mydotdir=!which dot
mydot=mydotdir[0]

%cd {myplantdir}
glob.glob(r'./*.jar')
os.environ['GRAPHVIZ_DOT']=mydot
!java -jar {myplantdir}/plantuml.jar -testdot
%install_ext https://raw.githubusercontent.com/sberke/ipython-plantuml/master/plantuml_magics.py
Installed plantuml_magics.py. To use it, type:
  %load_ext plantuml_magics
%load_ext plantuml_magics

2.3 간단한 명령어 배우기

2.3.1 turtle 소개

2.3.1.1 turtle

  • motion and draw

    • forward
    • backward
    • left
    • right
    • goto 같은 용도? setpos()
    • setx
    • sety
    • write(text)
    • position()
    • xcor()
    • ycor()
    • heading()
  • Pen

    • penup()
    • pendown()
    • color()
  • event

    • onclick()
    • onrelease()
    • ondrag()
    • mainloop() | done()

2.3.1.2 screen

  • Window control
    • bgcolor()
    • clear() | clearscreen()
    • screensize()
  • screen events
    • listen()
    • onkey()
    • onclick() | onscreenclick()
    • ontimer()

2.3.2 그림판에 거북이 나타내기

단계 1: turtle을 가져온다.

turtle을 가져오려면, 'import' 명령어를 사용한다. import는 다른 곳에 만들어진 '기능'을 가져오기 위해 사용한다. import 명령어 뒤에 가져오려는 기능의 명칭을 적는다. 앞으로 사용하는 turtle기능은 turtle이라는 명칭을 사용하게 된다. 이를 namespace라고 한다.

```
import turtle
```

단계 2: 윈도우를 띄운다. 윈도우는 컴퓨터가 사용자와 대화하기 위해 사용한다.

  • 윈도우는 좌상단 3개 버튼 제공해서, 1) 창을 닫거나, 2) 창을 최대로 크게 하거나, 3) 창을 최소화 할 수 있다.
  • 윈도우 캔버스를 가진다. 캔버스는 거북이가 활동하는 운동장이다.
  • 윈도우 캔버스는 크기를 정해주지 않으면, 기본 크기로 생성하고 수정하지 못한다.
  • 윈도우는 제목을 가질 수 있다.

wn은 만들어진 윈도우 이름이다. '='은 우측 명령의 수행결과를 좌측에 할당한다는 의미이다. 좌측 wn은 우측 turtle.Screen()의 명령이 수행된 결과를 저장하고 있다. wn은 변수명이다. 변수는 다음 장에서 더 배우게 된다. turtle.Screen()의 turtle은 앞서 import한 모듈의 namespace를 사용하고 있다.

```
wn=turtle.Screen()
```

단계 3: 거북이 나타내기

앞서 설명한 바와 같이, 좌측 t1은 만들어진 거북이 이름이다. 우측 turtle.Turtle()의 실행결과를 가지고 있다. import한 turtle의 namespace를 사용해서 거북이를 생성해서 t1에 저장한 것이다.

```
t1=turtle.Turtle()
```
import turtle
wn=turtle.Screen()
#크기 정하기
#wn.setup(500, 500)
t1=turtle.Turtle()

주의: 점의 의미

  • 점 연산자 (dot operator)은 프로그래밍에서 매우 중요한 개념. 잘 안보이는 경우, 컴마하고 얼핏 혼돈할 수 있지만, 컴마하고 완전히 다른 의미이다.
  • 점 앞은 객체, 뒤는 속성이나 함수
    • 함수는 ()가 있다.
  • 객체는 이해하기 쉽지 않지만 단순하지 않은 구조체
    • 거북이 - 위치를 갖으며, 앞뒤로 가거나 방향전환을 하는 객체
    • 스크린 - 크기, 배경이미지를 갖으며, 마우스클릭/키보드입력을 기다리는 등의 객체

주의: 누구의 함수인가?

  • shape은 wn? t1?
  • bgpic은 wn? t1?
  • 이 경우 읽어보면 쉽게 풀릴 수 있다.
    • 윈도우의 모양shape, 거북이의 모양shape 가운데 전자가 자연스럽다.
    • 윈도우의 배경그림bgpic, 거북이의 배경그림bppic 가운데 전자가 자연스럽다.

주의: 대소문자의 의미

  • 보통 첫글자가 대문자는 객체를 의미한다.
  • 앞글자가 소문자는 함수. bgpic
  • turtle.Screen()과 turtle.Turtle()은 앞글자가 대문자인 객체이다.

2.3.3 기본 동작 명령어 배우가

  • 앞으로 이동하기
  • 방향을 전환하기
t1.forward(100)
t1.right(90)
t1.forward(100)

2.3.4 기본 색

  • 색은 문자로 변경.
  • 실제로는 RGB값을 문자로 저장해 놓음.
# 2.3.3 기본 색
t1.pencolor()
t1.pencolor("Red")

# colormode 1 or 255 (255 is rgb)
wn.colormode(255)
t1.pencolor((0,100,200))
t1.fd(100)

2.3.5 모양바꾸기

t1.shape("turtle")
wn.addshape("rocketship.png")
t1.shape("rocketship.png")
t1.shape("turtle")

2.3.6 캔버스 다녀보기

  • 캔버스의 위치와 좌표를 이해
# 2.3.5 캔버스 다녀보기
t1.window_height()
t1.window_width()
t1.pos()
t1.goto(0,0)
t1.goto(-420,0)
t1.goto(-420,390)
t1.home()
t1.clear()

2.3.7 펜 제어하기

  • 선을 그리지 않고 이동하려는 경우
# goto
t1.penup()
t1.goto(0,0) #home position
t1.pendown()

시작-1: 미로를 그려서, 사진 찍고 거북이 게임.

  • 학습 내용
    • 기본명령어를 사용한 간단한 미로게임.
    • 사진의 파일형식 JPG, GIF 과 변환.
    • 파일의 저장과 불러오기.
  • 기본명령어, 파일배경바꾸기를 배우면 30분 이내에 마칠 수 있슴.
  • 주의
    • 너무 복잡한 미로 만들지 않음.
    • 핸드폰 해상도는 높으므로, 캔버스에 맞추어 낮춤.
    • 배경이미지를 저장한 디렉토리를 정확히 적어주기
  • 문제를 풀고, 그 화면을 핸드폰으로 찍어서 출력을 제출 (오늘 중).
  • 어떻게하나
    • 1) take picture from your handphone
    • 2) convert jpg -> gif
      • 2-1) online converter
        • google search "convert jpg to gif"
        • 선택해서 change the size and monochrome
      • 2-2) PC
        • screen capture (윈도우 보조프로그램 캡쳐도구) -> 캡쳐라고 검색
        • 커서가 십자모양으로 변하면 마우스로 클릭하고 끌어서 이미지만큼 캡쳐
        • save as gif
    • 3) 배경화면 지정
      • 저장한 디렉토리는 현재 위치, 이름은 'myMaze.gif'
        wn.bgpic("myMaze.gif")
        

시작-2: 미로게임을 애니메이션

  • 학습 내용
    • Python 프로그램의 저장
    • 프로그램을 배치실행하는 방법
  • 주의
    • 애니메이션 효과는 너무 빠르지 않게
  • 어떻게 하나

    • 1) 별도의 파일로 저장하기
    • 2) 애니메이션 주기 (speed느리게)

      t1.speed(1) # 1 slowest 10 fastest
      
    • 3) 실행 후 자동으로 사라지지 않게 하기

      wn.exitonclick()
      
    • 3) 실행하기

      • 명령창에서 직접 입력하거나

        $ python src/myMaze.py 참조
        
      • 윈도우 탐색기에서 더블 클릭

results matching ""

    No results matching ""