Python 標準ライブラリに含まれる turtle モジュールは、初心者向けの視覚的プログラミング学習ツールとして広く知られています。座標系と方向を持つ「亀(タートル)」を制御することで、シンプルなコマンドで幾何学的図形やアニメーションを実現できます。
1. 描画領域の設定
描画を開始する前に、ウィンドウサイズや背景を調整します。
turtle.screensize(width, height, bg):キャンバスの論理サイズ(ピクセル単位)と背景色を指定します。
例:turtle.screensize(720, 480, "lightblue")turtle.setup(width, height, startx, starty):実際のウィンドウサイズと位置を定義します。
幅・高さが小数の場合は画面比率、整数の場合はピクセル単位です。
例:turtle.setup(0.8, 0.6, 50, 50)— 画面の80%×60%で、左上角を(50, 50)に配置
2. タートルの状態と属性
タートルは「位置」と「向き」の2つの状態を持ち、初期状態では原点(0, 0)に向きをx軸正方向(右)に向けた状態です。
基本属性の操作
turtle.pensize(n):ペンの線幅(ピクセル)を設定turtle.pencolor("purple")またはturtle.pencolor(r, g, b):描画色を指定(RGB値は0–255)turtle.speed(n):描画速度(0=即時描画、1–10=段階的加速)turtle.color("blue", "cyan"):描画色と塗りつぶし色を同時に設定
3. 主要な制御命令
移動と回転
| メソッド | 説明 |
|---|---|
forward(dist) | 現在の向きに dist ピクセル進む |
goto(x, y) | 絶対座標 (x, y) へ移動(ペンアップ中なら線を引かない) |
right(angle) | 時計回りに angle 度回転 |
left(angle) | 反時計回りに angle 度回転 |
描画モード制御
penup():ペンを上げて移動 → 線を描かないpendown():ペンを下ろして移動 → 線を描く(デフォルト)begin_fill()/end_fill():閉じた形状の内部を塗りつぶす
円と弧の描画
turtle.circle(radius, extent=None, steps=None) を使い分けることで、円・半円・多角形・弧を柔軟に表現できます。
circle(60):半径60の完全な円circle(60, 180):半径60、180度の弧(半円)circle(60, steps=6):半径60の円に内接する正六角形
4. 実践サンプル
4.1 動的な星型パターン
import turtle as t
t.speed(0)
t.color("navy", "gold")
t.begin_fill()
for i in range(36):
t.forward(180)
t.left(170) # 少しずつずらすことで放射状効果
t.end_fill()
t.hideturtle()
4.2 スパイラル蛇(カスタム関数による再利用)
def draw_spiral_snake(segment_count=3, base_radius=45, turn_angle=75):
for _ in range(segment_count):
t.circle(base_radius, turn_angle)
t.circle(-base_radius * 0.7, turn_angle)
t.circle(base_radius, turn_angle / 2)
t.forward(base_radius * 0.6)
t.circle(base_radius * 0.2, 180)
t.forward(base_radius * 0.3)
t.setup(900, 700)
t.pensize(22)
t.pencolor((40, 160, 60))
t.seth(-25)
draw_spiral_snake()
4.3 正五角形とテキスト注釈
t.pensize(6)
t.color("darkorange", "coral")
t.begin_fill()
for _ in range(5):
t.forward(160)
t.right(144)
t.end_fill()
t.penup()
t.goto(-120, -100)
t.color("indigo")
t.write("★ Pentagon ★", font=("Verdana", 24, "bold"))
4.4 抽象化された動物モチーフ(簡易版)
複雑なキャラクターではなく、曲線と円を組み合わせた抽象表現で理解を深めます:
# 耳と顔の輪郭をシンプルに再構成
t.pensize(8)
t.color("peachpuff", "pink")
t.penup()
t.goto(0, -50)
t.pendown()
t.begin_fill()
t.circle(120) # 顔
# 左耳
t.penup()
t.goto(-70, 60)
t.pendown()
t.circle(35)
# 右耳
t.penup()
t.goto(70, 60)
t.pendown()
t.circle(35)
t.end_fill()
# 目(2点)
t.penup()
t.goto(-40, 20)
t.dot(20, "black")
t.goto(40, 20)
t.dot(20, "black")
t.hideturtle()