タートル命令の早見表
この教材で使える命令の一覧です.
ここに載っているものは,右側の演習環境でそのまま動くことを確かめてあります. 逆に,ここに載っていない命令は動かないと思ってください.
- 各表の「書き方」のとおりに打てば動きます.
[ ]で囲んだ引数は省略できます. - 節の中にある「▶ 演習環境で開く」から,その場で試せます.
- 本文の回を探したいときは,上の番号(1〜26)から各章のページへ行けます.
4.1 命令の書き方の約束
プログラムの 1 行目に from turtle import * と書くと,
以下の命令がそのまま使えるようになります.このとき動くのは
自動的に用意される 1 匹目のかめです.
from turtle import * fd(100) # 1 匹目のかめが 100 進む lt(90)
かめを増やしたいときは Turtle() で作り,名前を付けます.
このときは 名前.命令() の形で書きます.
第 8 章以降と,第 12 章のゲームはこちらの書き方です.
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) |
goto(0, 100) は中央から上へ 100 の位置です.
| 原点 | x が増える向き | y が増える向き | |
|---|---|---|---|
| タートル(この教材) | 画面の中央 | 右 | 上 |
| PyGame・Processing など | 画面の左上 | 右 | 下 |
circle(60)circle(60, 180) 半周だけcircle(60, 360, 6) 正六角形になる# 移動の命令を試す
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()
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)) |
seth で指定する角度.数学のグラフと同じ向き.4.4 ペン
| 書き方 | 意味 | 例 |
|---|---|---|
pu()penup()up() | ペンを上げる.進んでも線が残らない | pu() |
pd()pendown()down() | ペンを下ろす.進むと線を引く(最初は下りている) | pd() |
pensize(太さ)width(太さ) | 線の太さを決める.以後に描く線に効く | pensize(4) |
pensize() | いまの太さを調べる(引数なしで呼ぶ) | print(pensize()) |
isdown() | ペンが下りているかを調べる.True か False | if 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) |
- 名前で:
"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()# 色と塗りつぶし
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.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) |
"blank" は何も描かれません).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() |
align のちがいstamp() の足あと# 文字・点・スタンプ
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()
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() と 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" |
# イベントの最小の例
# ← → で動く/クリックしたところへ飛ぶ/かめは自分で少しずつ回る
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 するか,線で文字をかたどってください |
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の役割を確認してください.次の演習では移動先を変えます.
コード中のすべての数値を変えるのではなく,目的と関係する引数だけを変更し,どの命令がどの部分を担当するか説明します.
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つの点を描く課題です.
命令の名前を知っているだけでなく,条件を正しく渡せるかを確認します.
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度の取り違えを見落とす場合があります.
値を問い合わせる命令を組み合わせると,調べたい状態を具体的に見られます.
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回使って閉じています.次の演習では色と線の太さだけを変更します.
形の計算を変えずに見た目の設定だけを変えられることを確認し,早見表から必要な命令を選ぶ練習にします.
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へ変え,結果を比較します.数値の結果をノートへ並べ,線だけを消す場合と,状態も戻す場合の使いどころを説明してください.
命令の説明を読むだけでなく,違いが現れる入力を自分で作れることが大切です.
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度へ変え,同じ半径でも描く長さと終点が変わることを観察します.
半径と角度を別々に変えることで,どの条件が何に影響するかを把握できます.
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字です.
次の演習では長い名前へ置き換えます.命令の意味を説明しながら書き直し,表を引いて分からない名前を確認してください.
すべてを記憶していなくても,必要な情報を正しく探せれば作品を作れます.
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 と同じ位置です.
最後の実習では,表から必要な命令を選び,右向きから長方形を描いて戻ります.
使った各命令について,何を変えるか,何を引数として渡すか,どんな状態で次へ進むかを説明してください.この調べ方を身につければ,後の章で新しい命令が増えても,同じ手順で理解を進められます.
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 は条件が成り立つかを調べ,成り立たないとエラーになります.
早見表のペンの項目を調べ,移動中に線が出ないようにしてください.最後の位置は (80, 40) です.
from turtle import * ____() goto(80, 40) done()
青色で太さ5の線を描きます.色と太さを指定する命令を早見表から探してください.
from turtle import *
____("blue")
____(5)
forward(100)
done()
絶対角度で上を向かせます.早見表の向きの項目を調べ,画面上方へ70進ませてください.
from turtle import * setheading(____) forward(70) done()
半径40の円を描きます.円を描く命令と半径を補ってください.
from turtle import * ____(____) done()
早見表の姿の項目を調べ,かめの姿を turtle にしてください.移動後も姿を確認します.
from turtle import *
____("turtle")
forward(50)
done()
オレンジ色の三角形を塗ります.塗りの開始と終了を対にして補ってください.
from turtle import *
fillcolor("orange")
____()
for i in range(3):
forward(80)
left(120)
____()
done()