タートルグラフィックスで学ぶ Python のキホン 第 4 章
教材コード
第 4 章

タートル命令の早見表

この教材で使える命令の一覧です.

ここに載っているものは,右側の演習環境でそのまま動くことを確かめてあります. 逆に,ここに載っていない命令は動かないと思ってください.

使い方 命令の名前がわからなくなったとき,引数の順番を忘れたときに開いてください.
  • 各表の「書き方」のとおりに打てば動きます.[ ] で囲んだ引数は省略できます.
  • 節の中にある「▶ 演習環境で開く」から,その場で試せます.
  • 本文の回を探したいときは,上の番号(1〜26)から各章のページへ行けます.
授業で扱う範囲 この章は調べるための章で,全部を覚える必要はありません. 授業では,4.1〜4.8(書き方の約束・移動・向き・ペン・色と塗り・姿・文字・画面)と, 章末の「命令を調べて使う実習」を扱います. 4.9 イベントと 4.10 状態の取得は,第 10 章・第 12 章で使うときに, 4.11 は「動かない」と思ったときに,読んでください.

4.1 命令の書き方の約束

プログラムの 1 行目に from turtle import * と書くと, 以下の命令がそのまま使えるようになります.このとき動くのは 自動的に用意される 1 匹目のかめです.

書き方 1:かめを 1 匹だけ使う
from turtle import *

fd(100)        # 1 匹目のかめが 100 進む
lt(90)

かめを増やしたいときは Turtle() で作り,名前を付けます. このときは 名前.命令() の形で書きます. 第 8 章以降と,第 12 章のゲームはこちらの書き方です.

書き方 2:かめに名前を付ける
from turtle import *

t = Turtle()       # かめを 1 匹作って t と名づける
u = Turtle()       # もう 1 匹

t.fd(100)          # t だけが進む
u.lt(90)           # u だけが回る
ヒント どちらの書き方でも,使える命令は同じです. 以下の表では fd(長さ) のように短く書きますが, 名前を付けたかめなら t.fd(長さ) と読み替えてください.

たいていの命令には短い名前と長い名前があります. fd と forward,lt と left は同じものです. この教材では短いほうを使いますが,どちらで書いてもかまいません.

4.2 移動

書き方意味例
fd(長さ)
forward(長さ)
向いている方へ進むfd(100)
bk(長さ)
backward(長さ)
back(長さ)
向きを変えずに後ろへ下がるbk(50)
goto(x, y)
setpos(x, y)
指定した座標へ移動する.画面の中央が (0, 0)goto(-100, 50)
setx(x)x 座標だけを変える(y はそのまま)setx(120)
sety(y)y 座標だけを変える(x はそのまま)sety(-80)
home()中央 (0, 0)・右向きの最初の状態に戻るhome()
circle(半径 [, 角度] [, steps=辺の数])円(または円弧)を描く.半径が正なら左回り,負なら右回りcircle(60)
circle(60, 180)
座標の向き(y は上がプラス) タートルの座標は,数学のグラフと同じです. 原点 (0, 0) は画面の中央で,x は右へ行くほど, y は上へ行くほど大きくなります. goto(0, 100) は中央から上へ 100 の位置です.
原点x が増える向きy が増える向き
タートル(この教材)画面の中央右上
PyGame・Processing など画面の左上右下
PyGame や Processing のように画面の点(ピクセル)で数える道具では,y が下向きに増えます. 両方を使うときは取り違えないようにしましょう. 実行結果の上にある [補助線] を押すと,原点と x 軸・y 軸, 50 ごとの目盛りが画面に出て,座標を確かめやすくなります.
circle(60)
circle(60, 180) 半周だけ
circle(60, 360, 6) 正六角形になる
ref_move.py
# 移動の命令を試す

from turtle import *

pensize(3)

pencolor("navy")
fd(120)

pu()
goto(-150, 80)
pd()

pencolor("crimson")
circle(50)

pu()
goto(0, -120)
pd()

pencolor("seagreen")
setx(150)
sety(-40)

home()

done()
図 4.1 fd・goto・circle・setx・sety・home.

4.3 向き

書き方意味例
lt(角度)
left(角度)
その場で左に回る.進みはしないlt(90)
rt(角度)
right(角度)
その場で右に回るrt(45)
seth(角度)
setheading(角度)
「何度回る」ではなく「どちらを向く」を指定する.0 が右,90 が上,180 が左,270 が下seth(90)
heading()いま向いている角度を調べる(0〜360)print(heading())
towards(相手)
towards(x, y)
相手のかめ(または座標)がある方角を調べる.seth(towards(u)) で相手のほうを向けるseth(towards(u))
0 度(右)90 度(上)180 度(左)270 度(下)
図 4.2 seth で指定する角度.数学のグラフと同じ向き.

4.4 ペン

書き方意味例
pu()
penup()
up()
ペンを上げる.進んでも線が残らないpu()
pd()
pendown()
down()
ペンを下ろす.進むと線を引く(最初は下りている)pd()
pensize(太さ)
width(太さ)
線の太さを決める.以後に描く線に効くpensize(4)
pensize()いまの太さを調べる(引数なしで呼ぶ)print(pensize())
isdown()ペンが下りているかを調べる.True か Falseif isdown():

4.5 色と塗り

書き方意味例
pencolor(色)線の色を決めるpencolor("red")
fillcolor(色)塗りつぶしの色を決めるfillcolor("gold")
color(色)線と塗りを同じ色にするcolor("navy")
color(線の色, 塗りの色)線と塗りを別々に決めるcolor("navy", "gold")
begin_fill()ここから塗る図形が始まる,という合図begin_fill()
end_fill()ここまでで囲まれた形を塗りつぶすend_fill()
filling()いま塗っている途中かを調べるprint(filling())
bgcolor(色)画面の背景色を変えるbgcolor("black")
colormode(255)色を 0〜255 の数で指定できるようにする.はじめは 0.0〜1.0 で指定する設定になっているcolormode(255)
ヒント 色の指定は 3 とおりあります.
  • 名前で:"red" "blue" "green" "yellow" "orange" "purple" "pink" "brown" "black" "white" "gray" "cyan" "magenta" "navy" "gold" など
  • 16 進数で:"#ff8800"(赤・緑・青の強さを 00〜ff で並べる)
  • 数の組で:colormode(255) と書いてから pencolor(255, 136, 0)
begin_fill() 〜 end_fill()
円も塗れる
ref_fill.py
# 色と塗りつぶし

from turtle import *

pensize(3)

# 三角形を塗る
color("darkgreen", "yellowgreen")
begin_fill()
fd(120)
lt(120)
fd(120)
lt(120)
fd(120)
lt(120)
end_fill()

# 隣に円を塗る
pu()
goto(160, 0)
pd()
color("crimson", "pink")
begin_fill()
circle(55)
end_fill()

ht()
done()
図 4.3 線の色と塗りの色は別々に決められる.

4.6 姿

書き方意味例
shape("名前")かめの姿を変える.使えるのは "classic" "arrow" "square" "triangle" "circle" "turtle" "blank" の 7 つshape("turtle")
shape()いまの姿の名前を調べるprint(shape())
shapesize(たて, よこ)
turtlesize(たて, よこ)
姿の大きさを何倍にするかを決める.1 つだけ書くとたて・よこ同じ倍率になるshapesize(2, 2)
ht()
hideturtle()
姿を隠す.絵の仕上げに使うht()
st()
showturtle()
姿を出すst()
isvisible()姿が見えているかを調べるif isvisible():
speed(数)動く速さ.0 が最速,1 が最も遅い.画面右上の「速さ」でも変えられる(そちらが優先される)speed(1)
classicarrowsquaretrianglecircleturtle
図 4.4 7 つの姿のうち 6 つ("blank" は何も描かれません).
画像は貼れません 画像ファイル(car.gif など)を姿にする機能はありません. register_shape や addshape を書いてもエラーにはなりませんが, 何も起きません.見た目は shape・color・shapesize の 組み合わせで作ってください.

4.7 文字とスタンプ

書き方意味例
write(文字)いる場所に文字を書くwrite("こんにちは")
write(文字, font=(書体, 大きさ, 字体))大きさや太さを指定して書く.字体は "normal" "bold" "italic"write("点", font=("Arial", 20, "bold"))
write(文字, align="center")そろえ方を決める."left"(既定)"center" "right"write("中央", align="center")
dot([大きさ] [, 色])いる場所に丸い点を打つdot(20, "red")
stamp()いまの姿を画面に押す(足あとが残る).押した番号が返るs = stamp()
clearstamp(番号)その番号のスタンプを 1 つ消すclearstamp(s)
clearstamps()スタンプを全部消すclearstamps()
clear()描いた線・文字・点を消す(スタンプは残る)clear()
left(既定)centerright
align のちがい
stamp() の足あと
ref_text.py
# 文字・点・スタンプ

from turtle import *

ht()
pu()

# 点
goto(-200, 80)
dot(40, "crimson")
goto(-120, 80)
dot(40, "royalblue")
goto(-40, 80)
dot(40, "gold")

# 文字
goto(0, 0)
pencolor("navy")
write("ふつうの文字", font=("Arial", 18, "normal"))

goto(0, -50)
write("太い文字", font=("Arial", 24, "bold"))

goto(0, -100)
write("中央ぞろえ", align="center", font=("Arial", 18, "normal"))

done()
ふつうの文字太い文字中央ぞろえ
図 4.5 dot と write.

4.8 画面

書き方意味例
setup(よこ, たて)
screensize(よこ, たて)
画面の大きさを決める.この教材の演習環境は 620 × 460 ですsetup(620, 460)
window_width()画面の横幅を調べるprint(window_width())
window_height()画面の高さを調べるprint(window_height())
bgcolor(色)背景色を変えるbgcolor("#0d1117")
title(文字)画面の見出しを変える(この教材では見た目に出ません)title("ゲーム")
clearscreen()画面を消して,かめも最初の状態に戻すclearscreen()
Turtle()かめを 1 匹新しく作るt = Turtle()
Screen()画面そのものを表す.sc = Screen() として sc.bgcolor(…) のようにも書けるsc = Screen()
turtles()いま作られているかめを全部並べたリストを返すprint(len(turtles()))
done()
mainloop()
プログラムの終わりの合図.いちばん最後に書くdone()
clear() は画面ぜんぶが対象 この教材の clear() と clearscreen() は, どのかめから呼んでも画面全体を消します. CPython の turtle では「そのかめが描いたものだけ」を消しますが, ブラウザ版では区別していません. スコアの書き換えなどで使うときは,消えて困るものが画面にないか確かめてください (第 12 章 12.5 節).

4.9 イベント(キーボード・マウス・時間)

「〜されたら,この関数を呼んでください」と登録する命令です. 渡す関数にはかっこを付けません(tick() ではなく tick). くわしくは第 10 章・第 12 章を見てください.

書き方意味例
onkeypress(関数, "キー名")そのキーが押されたときに関数を呼ぶonkeypress(go, "Left")
onkey(関数, "キー名")
onkeyrelease(関数, "キー名")
そのキーが離されたときに関数を呼ぶonkey(stop, "Left")
listen()キーボードを聞く準備をする.登録のあとに 1 回書くlisten()
onscreenclick(関数)画面がクリックされたら関数を呼ぶ.関数は (x, y) を受け取るonscreenclick(jump)
かめ.onclick(関数)そのかめがクリックされたら関数を呼ぶ.押せる範囲は中心から半径 14 ほどt.onclick(hit)
ontimer(関数, ミリ秒)その時間のあとに関数を 1 回呼ぶ.関数の最後でもう一度書くとループになるontimer(tick, 30)
textinput(見出し, 質問)文字を入力してもらう.コンソールの入力行を使うs = textinput("", "名前は?")
numinput(見出し, 質問)数を入力してもらうn = numinput("", "何回?")
キー書き方
矢印キー"Up" "Down" "Left" "Right"
スペース"space"
ふつうの文字"a" "b" … "z" "0" … "9"(小文字で書く)
Enter"Return"
Esc"Escape"
Backspace"BackSpace"
Tab"Tab"
ref_event.py
# イベントの最小の例
# ← → で動く/クリックしたところへ飛ぶ/かめは自分で少しずつ回る

from turtle import *

setup(620, 460)

t = Turtle()
t.shape("turtle")
t.color("seagreen")
t.shapesize(2, 2)
t.pu()

def go_left():
    t.setx(t.xcor() - 20)

def go_right():
    t.setx(t.xcor() + 20)

def jump(x, y):
    t.goto(x, y)

def tick():
    t.lt(6)
    ontimer(tick, 40)

onkeypress(go_left, "Left")
onkeypress(go_right, "Right")
listen()
onscreenclick(jump)
ontimer(tick, 40)

done()
ヒント キーが効かないときは,一度タートル画面をクリックしてください. コード欄に文字カーソルがあると,キーはコード欄に取られます.

4.10 状態の取得

「いまどこにいるか」「いまどちらを向いているか」を調べる命令です. if の条件や,計算の材料として使います (if は次の第 5 章で習います.ここでは「こう使う」という例として読んでください).

書き方返ってくるもの例
xcor()いまの x 座標if xcor() > 300:
ycor()いまの y 座標t.sety(t.ycor() - 5)
pos()
position()
いまの座標を (x, y) の形でprint(pos())
heading()いま向いている角度print(heading())
distance(相手のかめ)相手までの距離.当たり判定に使う(第 12 章)if t.distance(u) < 30:
distance(x, y)その座標までの距離if t.distance(mx, my) < 30:
towards(相手)相手がいる方角t.seth(t.towards(u))
pencolor()いまの線の色print(pencolor())
pensize()いまの線の太さprint(pensize())
isdown()ペンが下りているかif isdown():
isvisible()姿が見えているかif t.isvisible():
shape()いまの姿の名前print(shape())
shapesize()いまの倍率print(shapesize())

4.10.1 タートル以外でよく使うもの

書き方意味例
print(…)コンソールに書き出す.途中の値を確かめるのに使うprint("x =", xcor())
input("質問")キーボードから 1 行もらう.コンソールの入力行にあらかじめ書いておくs = input("名前は?")
int(文字) / float(文字)文字を整数/小数に直す.input の結果は文字なので必要n = int(input("回数?"))
str(数)数を文字に直す.write でつなぐときに使うwrite("点 " + str(score))
import randomでたらめな数を作る道具を使えるようにする(1 行目に書く)import random
random.randint(a, b)a 以上 b 以下の整数を 1 つrandom.randint(1, 6)
random.choice(リスト)リストから 1 つ選ぶrandom.choice(["red", "blue"])

4.11 この教材でできないこと

この教材は,ブラウザの中で動く自前のタートルを使っています. パソコンにインストールした Python(CPython)の turtle とほとんど同じですが, 次の点が違います.知らずに使うと「なぜ動かないのか」で時間を失うので, 正直に書いておきます.

できないこと理由と代わりの方法
while True: で待ち続けるブラウザは 1 つのプログラムが動いている間,画面を描き直せません.ontimer を使ってください(第 10 章・第 12 章).しばらく終わらないプログラムは自動で止めます
time.sleep() で待つ同じ理由です.待ちたいときは ontimer のミリ秒で調整します
画像を姿にするregister_shape / addshape は書いてもエラーになりませんが,何も起きません.姿は 7 種類の shape と color・shapesize で作ります
音を鳴らすこのランタイムは音に対応していません.効果音や BGM は扱いません
マウスのいまの位置を調べる「いまのマウスの位置」を聞く命令はありません.onscreenclick で,クリックされたときだけ座標が届きます
ドラッグ・右クリック・ダブルクリック区別していません.どれもふつうのクリックとして届きます
undo()(1 つ戻す)ありません.描き直してください
tracer() / update()書いてもエラーにはなりませんが,効果はありません.描画はつねにすぐ反映されます
exitonclick() / bye()書いてもエラーにはなりませんが,何も起きません.終わりの合図は done() です
clear() でそのかめの分だけ消す画面全体が消えます.4.8 節の注意を見てください
かめ.onclick の判定範囲を変える中心から半径 14 で固定です.広げたいときは onscreenclick + distance で自分で判定します
write() で書いた文字を回す文字はいつも水平に書かれます.かめの向きを変えても傾きません.斜めに見せたいときは,1 文字ずつ位置をずらして write するか,線で文字をかたどってください
手元の Python でも動きます ここに書いたものを除けば,書き方は CPython の turtle と同じです. このページのプログラムは,パソコンに入れた Python でもそのまま動きます (第 1 章の手順で Python を用意してください).

4.12 命令の索引

アルファベット順の一覧です.短い名前と長い名前が同じ働きのものは,まとめてあります.

命令分類節
bgcolor色と塗り/画面4.5・4.8
begin_fill / end_fill色と塗り4.5
bk / backward / back移動4.2
circle移動4.2
clear / clearscreen文字とスタンプ/画面4.7・4.8
clearstamp / clearstamps文字とスタンプ4.7
color / pencolor / fillcolor色と塗り4.5
colormode色と塗り4.5
distance状態の取得4.10
done / mainloop画面4.8
dot文字とスタンプ4.7
fd / forward移動4.2
filling色と塗り4.5
goto / setpos / setx / sety移動4.2
heading / towards向き/状態の取得4.3・4.10
home移動4.2
ht / hideturtle / st / showturtle / isvisible姿4.6
isdownペン/状態の取得4.4・4.10
listenイベント4.9
lt / left / rt / right向き4.3
numinput / textinputイベント4.9
onclick(かめ)イベント4.9
onkey / onkeypress / onkeyreleaseイベント4.9
onscreenclickイベント4.9
ontimerイベント4.9
pos / position / xcor / ycor状態の取得4.10
pu / penup / pd / pendownペン4.4
pensize / widthペン4.4
Screen / Turtle / turtles画面4.8
seth / setheading向き4.3
setup / screensize / window_width / window_height画面4.8
shape / shapesize / turtlesize姿4.6
speed姿4.6
stamp文字とスタンプ4.7
title画面4.8
write文字とスタンプ4.7

命令を調べて使う実習

早見表を使って,自分の目的に合う命令と引数を選びます.暗記できたかではなく,調べた内容を小さな実験で確かめられるかを目標にしてください.

やりたいことから命令を探す

命令の早見表は,最初から最後まで暗記するためのものではありません.

作品を作っていて「線を引かずに移動したい」「向きを右へそろえたい」と思ったとき,目的に合う操作を探すために使います.まず,自分が変えたいのは位置,向き,線,姿,文字のどれかを言葉にしてください.

目的を絞ると,表の中で見る場所を選べます.

似た見た目の結果でも,使う命令が違う場合があります.

右側へ移るには,右を向いてforwardする方法も,gotoで座標を指定する方法もあります.前者は現在の向きに依存し,後者は移動先の座標を指定します.

目的に合うかを判断するには,命令名だけでなく,何を基準に動くかを読む必要があります.

見つけた命令は,いきなり大きな作品へ入れる前に,数行の小さいプログラムで試します.

位置や向きが分かる状態から実行し,想定と一致するか確認してください.うまくいったら,自分の作品の該当箇所へ移します.

調べること,試すこと,組み込むことを分けると,新しい命令で問題が出た場合にも原因を探しやすくなります.

以下は,線を描かずに移動してから短い線を描く例です.

早見表でpenup,goto,pendownの役割を確認してください.次の演習では移動先を変えます.

コード中のすべての数値を変えるのではなく,目的と関係する引数だけを変更し,どの命令がどの部分を担当するか説明します.

ref_work_1.py
from turtle import *
penup()
goto(-80,40)
pendown()
forward(60)
done()
演習調べて変更する

線を出さずに(50,-30)へ移り,そこから右へ80の線を描いてください.向きが右であることも明示し,位置・向き・ペンの状態を設定する命令を区別します.

括弧の中は,命令に渡す条件

forward(80)の80は,どれだけ進むかを命令へ渡しています.

goto(50,-30)は,移動先のxとyという2つの値を渡します.括弧の中へ何を書けばよいかは,命令ごとに違います.

表を見るときは,必要な値の個数,順番,意味を確認してください.数値なら何でも同じ役割というわけではありません.

色を指定する命令には文字列を渡すことがあります.

pencolor('blue')のblueを引用符なしで書くと,色名ではなく変数名として解釈されます.値の型の違いにも注意してください.

一方,座標を文字列の'50'として渡すのも,数値50を渡すこととは違います.見た目だけでなく,プログラムの中でどの種類の値になっているかを意識します.

省略できる引数がある命令では,省略時に何が起こるかも読みます.

circleの半径と角度,writeの揃え方や文字の設定など,必要なものだけ指定できる場合があります.最初は必須の引数で動かし,1つずつ追加すると,どの条件が見た目へ影響するか確かめやすくなります.

以下では点の大きさと色を指定します.

大きさを変える実験と色を変える実験を別々に行ってください.次の演習は,引数を取り違えずに2つの点を描く課題です.

命令の名前を知っているだけでなく,条件を正しく渡せるかを確認します.

ref_work_2.py
from turtle import *
penup()
goto(-50,0)
dot(20,"blue")
goto(50,0)
dot(40,"red")
hideturtle()
done()
演習調べて変更する

左に直径30の緑の点,右に直径15の青い点を描いてください.中心位置は(-60,20)と(60,20)です.大きさの引数が半径ではなく直径であることに注意します.

相対的に回す命令と,向きを決める命令

left(90)は,現在の向きから左へ90度回す命令です.

setheading(90)は,現在の向きに関係なく,上向きの90度にそろえる命令です.最初が右向きなら同じ結果に見えますが,すでに上を向いている場合は違います.

命令の違いを確かめるとき,初期状態を変えた例も試す必要があります.

相対的な操作は,今の状態から変化を積み重ねるときに便利です.

正方形で毎回90度曲がる場合にはleftを使います.絶対的な指定は,決まった向きへ戻したいときに便利です.

複数の図形を描く前に右向きへそろえるならsetheading(0)が使えます.どちらかが優れているのではなく,基準が違う操作です.

位置にも似た違いがあります.

forwardは現在の位置と向きから移動し,gotoは座標を指定します.相対移動と絶対位置を区別すると,作品のコードを読みやすくなります.

命令の表には結果だけでなく,何を基準にするかを書き添えておくと,再利用するときに役立ちます.

以下は,向きを問い合わせるheadingも使います.

回す前後の数値を予測し,コンソールで確認してください.絵だけでは90度と270度の取り違えを見落とす場合があります.

値を問い合わせる命令を組み合わせると,調べたい状態を具体的に見られます.

ref_work_3.py
from turtle import *
setheading(90)
left(90)
print("左へ回した後",heading())
setheading(90)
print("上へそろえた後",heading())
done()
演習調べて変更する

初めに270度へ向け,left(90)を実行した後の向きを表示します.次にsetheading(90)を実行した後を表示し,結果が0度と90度になることを確認してください.

線の色と,塗る色を使い分ける

図形には輪郭の線と内側の塗りがあります.

pencolorは線の色,fillcolorは塗る色を指定します.colorは両方をまとめて設定する使い方もありますが,別々の色を使いたい場合には役割を分けて指定すると分かりやすくなります.

線の太さはpensizeで決め,図形の大きさとは別に考えます.

塗りつぶす範囲は,begin_fillからend_fillまでに描いた経路で決まります.

begin_fillを呼んだだけで,あとから描くすべての図形が永久に塗られるわけではありません.どこで開始し,どこで終了するかが重要です.

閉じた経路を意識して描くと,予想外の場所が塗られる原因を調べやすくなります.

見た目を調整するときは,色と太さと座標を一度に変えず,1つずつ比較します.

線が太いと小さい図形の内側が狭く見えることがありますが,座標上の辺の長さが変わったわけではありません.データの大きさと,描画の見え方を分けて説明してください.

この区別は後の図形データの設計にもつながります.

以下は青い輪郭と黄色い塗りの三角形です.

外角120度を3回使って閉じています.次の演習では色と線の太さだけを変更します.

形の計算を変えずに見た目の設定だけを変えられることを確認し,早見表から必要な命令を選ぶ練習にします.

ref_work_4.py
from turtle import *
pencolor("blue")
fillcolor("yellow")
pensize(3)
begin_fill()
forward(80)
left(120)
forward(80)
left(120)
forward(80)
left(120)
end_fill()
done()
演習調べて変更する

同じ三角形を,赤い輪郭,水色の塗り,線の太さ5へ変更してください.forwardとleftの値は変更しません.色に関する命令と形に関する命令を分けて説明します.

消す・隠す・初期化する操作

画面から見えなくする操作には,複数の種類があります.

hideturtleは現在のかめの姿を隠しますが,すでに描いた線は残ります.clearは描いた線や文字を消しますが,位置や向きなどはそのままです.

resetは描画を消し,かめの状態も初期化します.見た目が消えたという共通点だけで,同じ操作だと考えないようにします.

作品の途中で一部を描き直すなら,現在の位置や色を残したい場合があります.

このときresetを使うと,予想外の位置や色から描き直してしまうかもしれません.逆に,まったく最初の状態から試し直すつもりでclearだけを使うと,前の向きが残る場合があります.

何を残し,何を戻したいかから命令を選びます.

消去後の状態は,positionやheadingを表示して確かめられます.

絵だけでは,線が消えた後にかめがどこへいるか見えにくい場合があります.特にかめを隠しているときは,問い合わせの命令が役立ちます.

状態を読む命令と変える命令を組み合わせて,操作の意味を実験しましょう.

以下では移動してからclearし,位置を確認します.

次の演習ではresetへ変え,結果を比較します.数値の結果をノートへ並べ,線だけを消す場合と,状態も戻す場合の使いどころを説明してください.

命令の説明を読むだけでなく,違いが現れる入力を自分で作れることが大切です.

ref_work_5.py
from turtle import *
forward(80)
left(45)
clear()
print(position(),heading())
done()
演習調べて変更する

clearをresetへ変更して,位置と向きが初期状態へ戻ることを確認してください.その後forward(40)を追加し,どこからどちらへ進むかを予測します.

円の半径と,描く角度

circleの第1引数は半径です.

点を描くdotの大きさは直径なので,同じ数値を渡しても見た目の幅は同じになりません.命令を変えるときは,引数の数値をそのまま移す前に,何を表す値かを確認してください.

同じ「大きさ」という日本語でも,半径,直径,辺の長さのどれかによって意味が変わります.

circleへ描く角度を渡すと,円の一部である円弧を描けます.

90度なら四分の一周,180度なら半周です.かめの現在位置が円の中心になるわけではない点にも注意します.

現在の位置と向きから,円の経路に沿って進みます.円を指定した場所へ置きたい場合,描き始める位置と向きをそろえる必要があります.

円弧を描いた後は,かめの位置と向きが変わります.

その後forwardを呼ぶと,弧の終わりの接線方向へ進むため,最初と同じ方向とは限りません.見た目が予想と違ったときは,円弧だけで終えた状態を表示し,次の命令がどの向きから始まるかを確認します.

命令の前後の状態を追う練習になります.

以下では半径50,90度の弧を描きます.

その後の向きをコンソールで確認してください.次の演習では180度へ変え,同じ半径でも描く長さと終点が変わることを観察します.

半径と角度を別々に変えることで,どの条件が何に影響するかを把握できます.

ref_work_6.py
from turtle import *
setheading(0)
circle(50,90)
print(position(),heading())
forward(30)
done()
演習調べて変更する

半径は50のまま,180度の半円へ変更してください.円弧の後にforward(30)で進む方向を予測し,向きの表示と絵で確認します.

短い名前と,長い名前を対応させる

タートルには,forwardとfd,leftとlt,penupとpuのように,同じ操作を表す複数の名前があります.

短い名前は素早く書けますが,初めて読む人には長い名前のほうが意味を推測しやすい場合があります.教材ではどちらも登場するので,表で対応を調べられるようにしておきましょう.

自分の作品内では,読みやすい方へそろえると追いやすくなります.

名前が似ていても,大文字と小文字は区別されます.

Forwardとforwardは同じではありません.また,英語の一般的な単語を適当に短くしても,その名前が定義されていなければ使えません.

動かなかったときは,表の綴りを1文字ずつ比べてください.特にlと1,oと0など,見た目が似た文字に注意します.

別名を使った書き換えでは,動作が同じであることを確認します.

数値や命令の順番まで一緒に変えると,名前の置き換えによる差なのか分からなくなります.まず名前だけを書き換え,絵と最終位置が同じか調べます.

あとでコードを整理するときも,一度に変更する種類を絞ると検証しやすくなります.

以下は短い名前を使ったL字です.

次の演習では長い名前へ置き換えます.命令の意味を説明しながら書き直し,表を引いて分からない名前を確認してください.

すべてを記憶していなくても,必要な情報を正しく探せれば作品を作れます.

ref_work_7.py
from turtle import *
pu()
goto(-50,-30)
pd()
fd(80)
lt(90)
fd(60)
print(position())
done()
演習調べて変更する

pu,pd,fd,ltをそれぞれ長い名前へ書き換えてください.数値と順番は変えず,最終位置が同じであることを確認します.

実行環境の範囲と,結果の確かめ方

この教材は,ブラウザの中で動くタートル互換環境を使っています.

手元のPythonのturtleと共通する命令を多く扱えますが,すべての機能が同じではありません.外部の例を持ち込んで動かない場合,書き間違いだけでなく,この環境で対応している操作かも確認します.

まずこの早見表と教材の説明にある範囲で,小さい実験を行ってください.

見た目の速度も,手元の環境と違う場合があります.

この教材では実行結果の描画を再生して見せるため,速さの設定や画面の大きさによって観察のしやすさが変わります.動きを追いたいときは遅くし,完成形だけ見たいときは速くします.

速さを変えたから計算上の図形が変わるわけではないことを区別します.

命令を調べた後は,見た目と数値の両方で確かめると理解が深まります.

正方形を描き終えたら,最初の位置と向きへ戻るはずです.完全な小数の一致には丸めの影響がある場合もありますが,大きくずれていれば回転や移動の数値を見直す手がかりになります.

ただ「絵が出た」で終えず,目的の条件を満たしているかを確認します.位置の表示が <code>(-0.00,0.00)</code> のように「-0」と見えることがありますが,計算の誤差で,0 と同じ位置です.

最後の実習では,表から必要な命令を選び,右向きから長方形を描いて戻ります.

使った各命令について,何を変えるか,何を引数として渡すか,どんな状態で次へ進むかを説明してください.この調べ方を身につければ,後の章で新しい命令が増えても,同じ手順で理解を進められます.

ref_work_8.py
from turtle import *
setheading(0)
forward(80)
left(90)
forward(40)
left(90)
forward(80)
left(90)
forward(40)
left(90)
print(position(),heading())
done()
演習調べて変更する

横100,縦60の長方形へ変更し,描き終わった位置と向きを表示してください.辺を変更する箇所を2組に分け,回転角度は変えない理由を説明します.

復習:虫食いで確かめる

コードの ____ を埋めてください.実行前に結果を予測し,実行後に問題文の条件と照合しましょう.assert は条件が成り立つかを調べ,成り立たないとエラーになります.

虫食い虫食い・復習 1 線を引かずに移動する

早見表のペンの項目を調べ,移動中に線が出ないようにしてください.最後の位置は (80, 40) です.

fill_review_ref_1.py
from turtle import *
____()
goto(80, 40)
done()
虫食い虫食い・復習 2 線の色と太さ

青色で太さ5の線を描きます.色と太さを指定する命令を早見表から探してください.

fill_review_ref_2.py
from turtle import *
____("blue")
____(5)
forward(100)
done()
虫食い虫食い・復習 3 上を向く

絶対角度で上を向かせます.早見表の向きの項目を調べ,画面上方へ70進ませてください.

fill_review_ref_3.py
from turtle import *
setheading(____)
forward(70)
done()
虫食い虫食い・復習 4 円を描く

半径40の円を描きます.円を描く命令と半径を補ってください.

fill_review_ref_4.py
from turtle import *
____(____)
done()
虫食い虫食い・復習 5 かめの姿を変える

早見表の姿の項目を調べ,かめの姿を turtle にしてください.移動後も姿を確認します.

fill_review_ref_5.py
from turtle import *
____("turtle")
forward(50)
done()
虫食い虫食い・復習 6 三角形を塗る

オレンジ色の三角形を塗ります.塗りの開始と終了を対にして補ってください.

fill_review_ref_6.py
from turtle import *
fillcolor("orange")
____()
for i in range(3):
    forward(80)
    left(120)
____()
done()