Pythonには、初心者がプログラミングを学習するためのツールとして、タートル(turtle: 亀)があります。
タートルは、その名の通り、亀(はじめは矢印)を使って、線や円を描き、絵を描いていくものです。その亀の動きを命令するプログラムを書いていきます。
タートルは初学者をはじめ、小学生でも遊びながら始められるプログラミングとして、有名です。
最近はスラック(命令を組み合わせて、プログラムを作る)を使うことが多いかもしれませんが、プログラミングを学ぶなら、タートルの方がいいでしょう。
Pythonを使える環境を設定したら、まずは、小学生でもできるタートルに挑戦していきましょう。
Pythonの環境設定は以下をご覧下さい。


タートルの基本的なプログラム方法
ここでは、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で検索すれば、もっと複雑で面白い図が書けるコードがあります。
しかし、一番勉強になるのは、自分でも考えて、コードを書いてみることです。ぜひ、挑戦して下さい。
プログラミングが難しいと思った方は、以下の記事をご覧下さい。学習のコツやモチベーション管理に役立ちます。



コメント