Pythonのタートルでプログラミングのコツをつかむ

スポンサーリンク
Python

Pythonには、初心者がプログラミングを学習するためのツールとして、タートル(turtle: 亀)があります。

タートルは、その名の通り、亀(はじめは矢印)を使って、線や円を描き、絵を描いていくものです。その亀の動きを命令するプログラムを書いていきます。

タートルは初学者をはじめ、小学生でも遊びながら始められるプログラミングとして、有名です。

最近はスラック(命令を組み合わせて、プログラムを作る)を使うことが多いかもしれませんが、プログラミングを学ぶなら、タートルの方がいいでしょう

Pythonを使える環境を設定したら、まずは、小学生でもできるタートルに挑戦していきましょう。

Pythonの環境設定は以下をご覧下さい。

M1 mac でanacondaをインストールし、Pythonを動作確認
M1 mac miniを購入したので、anacondaのインストールし、Pythonの動作を確認しました。 以前はWindowsでのanacondaのインストール方法を提示しました。 macでのイ...
【2021年最新】WindowsでAnacondaをインストールする方法、初心者がPythonの環境を構築する
Pythonの環境構築におすすめなのが、「anaconda」です。anacondaのなかにある、Jupyter Labはデータ解析や機械学習に非常に相性がいいです。理由は、コードを実行すると結果を返してくれます。その結果をみて、新たなコード

タートルの基本的なプログラム方法

ここでは、AnacondaからJupyter Labでコードを書いていきます。

from turtle import *

このコードでタートルを使えるようになります。

このコードはタートルを使うときは毎回入力しないといけません。

では、亀を呼び出してみましょう。

shape('turtle')


はい、亀が出てきましたね。

このコードを書かないと、亀ではなく矢印が動きます。味気ないので亀にしましょう。

それでは、亀を動かしていきましょう。プログラミングは英語ですが、簡単な単語なので理解できると思います。

forward(100)


このコードは、forward:前へ進め、(100):100の距離、というプログラムです。つまり、「前へ100進め」です。
では、前とはどの方向でしょうか?

そうですね、亀が向いている方向が前ですね。亀の気持ちになって、プログラムを書いていきましょう。

では、亀の向きを変えてみましょう。

left(90)


このコードは、left:左方向へ、(90):90°、というプログラムです。つまり、「90°左へ向け」です。

その通りに、亀の向きが左へ90°になりましたね。

では、以下のコードはどうでしょうか?

fd(100)

ft は、forward の省略です。ft の方が文字数が少ないので、効率的ですね。

同じように、

lt(90)

このコードは、ltはleftの省略で、90°左へ向けという意味です。

ここまで見てきたように、亀の動く線は書き足しです。

白紙に戻しましょう。

reset()


白紙に戻りました。

図を書くプログラム

では、亀を使って四角形を書いてみましょう。今まで使ったコードで書けそうですね。

fd(100)
lt(90)
fd(100)
lt(90)
fd(100)
lt(90)
fd(100)


四角形が書けました。今まで使った、fd:前へ進め、と lt:90°左へ向け、のを4回繰り返しました。
このようなコードでも四角形が書けますが、4回同じコードを書くのは面倒です。(プログラマーの本質はめんどくさがりです)
なので、繰り返しの場合は、for を使います。

reset()    # 白紙に戻す

for i in range(4):
    fd(100)
    lt(90)


おれで、四角形が書けました。

このコードは、for:繰り返すi:1からrange(4):4回、つまり、「以下のコードを1~4回繰り返す」です。

以下のコードとは、fd(100):前へ100進め、lt(90):90°左へ向け、を4回繰り返す。これで、四角形が書けますね。

繰り返す場合は、for を使います。for文といって、プログラミングではよく使われるので、覚えておきましょう。

では、また違う図を書いてみましょう。

reset()      # 白紙に戻す

pensize(2)   # 線の太さを変える

pu()         # ペンを離す
setpos(-320,0)  # 亀の位置を指定する(x軸が-320, y軸が0)
pd()         # ペンを付ける
for i in range(4):
    fd(170)
    lt(90)

pu()         # ペンを離す
setpos(0,-20)  # 亀の位置を指定する(x軸が0, y軸が-20)
pd()         # ペンを付ける
circle(100)  # 円を描く

pu()         # ペンを離す
setpos(130,0)  # 亀の位置を指定する(x軸が130, y軸が0)
pd()         # ペンを付ける
for i in range(3):
    fd(200)
    lt(120)
    
pu()         # ペンを離す
lt(90)       # 亀の向きを左へ90°にする
setpos(0,80) # 亀の位置を指定する(x軸が0, y軸が80)

少し長いコードですね。

コードの横に#があります。この#はコードに関係ない文字です。コードの説明を書いてありますので、参考にして下さい。

亀は移動のたびに、線を引いてしまうので、ペンを離す(pu())やペンを付ける(pd())があり、少し戸惑うかもしれませんが、よく見ると理解できると思います。

この図のように、図同士が繋がらないようにするには、ペンを離したり、ペンと付けたりする必要があります。

また、亀の位置を指定したい場合は、setpos()を指定します。

これは、亀を動かしている「Python Turtle Graphics」をx軸、y軸で指定します。

一番最初に亀がいた中心をx軸が0、y軸が0です。

では、このコードはどうでしょうか?

reset()

for i in range(5):
    fd(150)
    rt(144)


星が書けましたね。

文字も書けます。(亀を動かして書くわけではないですが)

reset()

pu()
setpos(-300,-10)
pd()

write('あけましておめでとうございます',
            move=True,
            align='left',
            font=('mikachan',35))

複雑な図に挑戦

ここからは、少し複雑な図を書いてみましょう。

reset()
speed(0)

これは、白紙に戻して、亀のスピードを最大(0)にします。

def polygon(n, length=120):
    angle=360/n
    for i in range(n):
        fd(length)
        rt(angle)
        
if __name__=='__main__':
    pu()
    setpos(70,-200)
    pd()
    lt(180)
    for i in range(4,15):
        polygon(i)
        
pu()
rt(90)
setpos(10,-140)


コードの後半(if __name__==’__main__’:)は、以下のコードを実行という意味で、お決まりの形です。
ペンの位置を指定して、polygonを繰り返します。

polygon の定義をコードの前半で定義しています。

コードの前半(polygonの定義)はよく分かりませんよね。

そんな場合は、polygonを使って、数値を変化させてみましょう。

Jupyter Labのメリットは、コードを少し変化させて、その変化をすぐに出力でき、コードの変化を毎回確認しやすいことです。

たとえば、

reset() 

polygon(5)


五角形ができました。

なるほど、polygon のあとの()の中の数字は何角形なのかを指定するのか。

では、()内に8を入れると、八角形ができるはずですね。

試してみましょう。

reset() 

polygon(8)


仮説通りに八角形が出来上がりました。

こんな感じで、コードの意味が分からなくても、コードを少し変化させて、出力結果を確認することで、コードの理解が深まります。

ちなみに、タートルではこんな図も書けます。

reset() 
speed(0)

def forest(n, length=1000):

    if n <= 0:
        fd(length)
        return
    forest(n-1, length * 0.5)
    rt(85)
    forest(n-1, length / 3)
    lt(170)
    forest(n-1, length / 3)
    rt(85)
    forest(n-1, length * 0.35)

if __name__ == '__main__':
    pu()
    setpos(270, -20)
    pd()
    lt(180)
    speed(0)
    forest(6)


コードの説明はしませんが、自身でも試してみて下さい。

アイキャッチ画像のコード

reset() 
speed(0)

pensize(1)

n = 500
angle = 360/n

for i in range(n):
    rt(angle)
    circle(150)

タートルはプログラムの基礎を、楽しく遊びながら学べます。

Googleで検索すれば、もっと複雑で面白い図が書けるコードがあります。

しかし、一番勉強になるのは、自分でも考えて、コードを書いてみることです。ぜひ、挑戦して下さい。

プログラミングが難しいと思った方は、以下の記事をご覧下さい。学習のコツやモチベーション管理に役立ちます。

私の特性
私は地方都市の在住で、公立中学校を卒業後、公立高校(偏差値50程度)で留年しかけます。学校も休みがちで勉強なんかほとんどしていませんでした 追試で先生の恩情によってなんとか卒業でき、専門学校へ進学します(専門学校も...
【初心者】プログラミング学習、独学かスクールか問題
プログラミングを学習する方法は大きく分けて2つあります。 すなわち、独学とスクールです。 どちらにもメリットとデメリットがあります。独学とスクールのメリットとデメリットの確認して、自分にあった学習方法を見つけ...
Pythonの独学方法
わたしは、非エンジニアでただの底辺サラリーマンです。しかし、仕事でデータ解析しているで、Python を勉強することにしました。 現在Python学習歴は半年程度です。それまではRという統計ソフトを使用していました...

コメント

タイトルとURLをコピーしました