Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

お絵かきで Python を学ぶ(タートルグラフィックス)

タートルグラフィックスとは

教育用プログラミング言語の「LOGO」を元に画面上の亀をプログラミングで操作して図として描画するといったものです。
1960 年代に開発され、プログラムの結果を視覚ですぐに確認できることから、子供向けのプログラミング学習に用いられることもあります。

環境

  • PyCharm
  • Python3

タートルグラフィックスに触れる(対話型シェル)

まずは対話型シェルを用いて簡単にタートルグラフィックスに触れてみようと思います。

PyCharm のターミナル画面を開いて、Pythonと入力します。

$ Python

これで対話型シェルになったので、turtleを import します。

>>> import turtle

つぎにturtle.forward(100)と入力します。

>>> turtle.forward(100)

すると以下のようにグラフィックが立ち上がります。

image.png

これは矢印が前に 100 回進んだということを表しています。

矢印の向きを下に向けたい場合にはturtle.right(90)として 右に 90 度曲げます。

>>> turtle.right(90)

image.png

この状態で再度turtle.forward(100)入力すると下に進みます。

>>> turtle.forward(100)

image.png

先頭の矢印の形が味気ないと感じる場合にはshape.()で変更できます。
今回は亀に変更させてみたいと思います。

>>> turtle.shape('turtle')

image.png

color()でこの亀の色を変更させることも可能です。

>>> turtle.color('red')

image.png

この亀を隠したい場合にはhideturtle()を使用します。

>>> turtle.hideturtle()

image.png

隠した亀を再び表示させたい場合にはshowturtle()と入力します。

>>> turtle.showturtle()

image.png

直線以外にも円を描くこともできます。

>>> turtle.circle(100)

image.png

今、赤い線で描かれていますがこの線の色を変更させたい場合には
pencolor()を使用します。

同時に角度を少し変更させて進ませてみます。

>>> turtle.pencolor('blue')
>>> turtle.right(45)
>>> turtle.forward(100)

image.png

後ろに進むことも可能であり、backward()を使用します。

>>> turtle.backward(200)

image.png

一番最初の位置に戻りたい場合にはhome()を使用します。

>>> turtle.home()

image.png

すべてクリアにしたい場合にはclear()を使用します。

>>> turtle.clear()

image.png

終了させるときには最後にdone()と入力します。

>>> turtle.done()

ファイルを作成して実行させる

上記ではターミナルから対話型シェルで実行させたが、ここからは
適当な名前の Python ファイルを作成してファイルから実行させてみます。

ファイル上に以下の前進させるだけの簡単な処理を記述して実行させてみます。

import turtle

turtle.forward(100)

すると一瞬だけ表示されてすぐに消えてしまうことが確認できると思います。
ずっと表示するには最後の行にすべての処理が完了しましたと表す、done()
記述してあげます。

import turtle

turtle.forward(100)
turtle.done()

image.png

これでしっかりと表示されることが確認できると思います。

四角形

Python の for ループ使用して四角形を出力させてみます。
考え方としてはturtle.forward(100)の前進を 4 回繰り返し、
一度前進が完了したら 90 度に曲がる処理を加えるといったものである。

import turtle

turtle.color('red', 'yellow')

turtle.begin_fill()
for _ in range(4):
    turtle.forward(100)
    turtle.right(90)
turtle.end_fill()

turtle.done()

ファイル形式では処理の内容をturtle.begin_fill()turtle.end_fill()
括ってあげます。

実行してあげると線が赤で中が黄色の四角形が表示されます。

image.png

星形

星形のプログラムですが、四角形のプログラムと構成がほとんど一緒になります。
変更箇所としては前進する回数が 5 回になるのと角度が360 / 5 * 2になります。

import turtle

turtle.color('red', 'yellow')

turtle.begin_fill()
for _ in range(5):
    turtle.forward(100)
    turtle.right(360 / 5 * 2)
turtle.end_fill()

turtle.done()

image.png

星を三回作成させ、一度進むたびに前進する距離を少しずつ増やしてみる。

import turtle

turtle.color('red', 'yellow')

turtle.begin_fill()
for i in range(5 * 3):
    turtle.forward(100 + i * 10)
    turtle.right(360 / 5 * 2)
turtle.end_fill()

turtle.done()

すると以下のように綺麗な図形ができる。
このようにループの処理を色々としてあげると違った形になり楽しむことができる。

image.png

三角形

三角形も同様に三回前進して、一度前進したあとに角度を変えるといった処理になります。

import turtle

turtle.color('red', 'yellow')

turtle.begin_fill()
for i in range(3):
    turtle.forward(100)
    turtle.left(360 / 3)
turtle.end_fill()

turtle.done()

実行してみると三角形が表示されます。

image.png

星形でも行ったように一度前進したあとの角度を少しずらしてあげるとどうなるか見てみます。

import turtle

turtle.begin_fill()
for i in range(200):
    turtle.forward(200)
    turtle.left(360 / 3 + 10)
turtle.end_fill()

turtle.done()

このように星型の時と同様に綺麗な図形になります。

image.png

おわり

ざっくりでしたが以上が扱い方の説明になります。

このタートルグラフィックスを使用することで自分のプログラミングが
簡単に可視化できるため子供はもちろん大人も楽しんでプログラミングを学習することができると思います。

最後に以下のような木を作成することも可能です。

import turtle as t
foo = t.Turtle()
foo.left(90)
foo.speed(10)

def draw(l):
    if(l<10):
        return
    else:
        foo.forward(l)
        foo.left(30)
        draw(3*l/4)
        foo.right(60)
        draw(3*l/4)
        foo.left(30)
        foo.backward(l)

draw(100)

image.png

aj2727
SREに憧れている、社会人二年目。
intec
未来を「ひらく」、技術で「つなぐ」、世界を「変える」、豊かなデジタル社会の一翼を担う会社です。※各記事の内容は個人の見解であり、所属する会社の公式見解ではありません。
https://www.intec.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away