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

タートル命令リファレンス

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

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

使い方 命令の名前がわからなくなったとき,引数の順番を忘れたときに開いてください.
  • 各表の「書き方」のとおりに打てば動きます.[ ] で囲んだ引数は省略できます.
  • 節の中にある「▶ 演習環境で開く」から,その場で試せます.
  • 本文の回を探したいときは,上の番号(1〜14)から各章のページへ行けます.

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(長さ) と読み替えてください.

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

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)
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 fdgotocirclesetxsetyhome

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()ペンが下りているかを調べる.TrueFalseif 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_shapeaddshape を書いてもエラーにはなりませんが, 何も起きません.見た目は shapecolorshapesize の 組み合わせで作ってください.

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 dotwrite

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 の条件や,計算の材料として使います.

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

4.12 命令の索引

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

命令分類
bgcolor色と塗り/画面4.5・A.8
begin_fill / end_fill色と塗り4.5
bk / backward / back移動4.2
circle移動4.2
clear / clearscreen文字とスタンプ/画面4.7・A.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・A.10
home移動4.2
ht / hideturtle / st / showturtle / isvisible姿4.6
isdownペン/状態の取得4.4・A.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