タートルグラフィックスで無限ループを使ってみよう


タートルグラフィックスで繰り返しを使ってコードを整理してみようで共通するコードを繰り返しのfor文でまとめてみました。


前に作成したコードでは、

from turtle import *

shape("turtle")
for i in range(4):
␣␣␣␣forward(100)
␣␣␣␣left(90)
done()

※␣は半角スペース1個分

繰り返しの回数が 4 回と指定していましたが、繰り返しの回数を指定したくない時が多々あります。

そんな時はwhile文で無限ループを利用します。


上記のコードをwhile文の無限ループで書き換えると、

from turtle import *

shape("turtle")
while True:
␣␣␣␣forward(100)
␣␣␣␣left(90)
done()

※␣は半角スペース1個分 になります。


while文では、

while 条件式:

になりまして、条件式にTrueを入れると無限ループになります。

※条件式に関しては後程、if文で詳しく触れます。


今回のコードでは終了しないため、カメの現在地を知ることができるxcor()とycor()を利用して、無限ループから抜けてみます。


xcor()は現在のカメのx座標で、ycor()は現在のカメのy座標になり、注意としては、実数(0.0)のよううな値で返ってきます。

これらの内容を踏まえた上で、無限ループから抜けるコードを書いてみます。

from turtle import *

shape("turtle")
while True:
␣␣␣␣forward(100)
␣␣␣␣left(90)
␣␣␣␣if int(xcor()) == 0:
␣␣␣␣␣␣␣␣if int(ycor()) == 0:
␣␣␣␣␣␣␣␣␣␣␣␣break
done()

※␣は半角スペース1個分

上記のコードはカメが移動した後、現在の位置のx座標とy座標を取得しますが、実数では扱いにくいため、

int(実数値)

で実数を整数に変換してから、x座標が 0 でy座標も 0 の場合にbreakを実行するという事をしています。

※breakをすると、for文かwhile文の繰り返しから抜けるという意味があります。


if は if文 と呼ばれ、

if 条件式:

で指定された条件が真(True)である場合に、特定のコードブロックを実行します。

コードブロックというのは、上の式であれば、if文の前にあるインテンド(半角スペースの塊)よりも更に深いインテンドで指定している処理の塊になります。


条件式中で値の判定を行う場合、

x == 0

==を用いて、左の値と右の値が等しいかを調べます。

※等しければ真(True)、等しくなければ偽(False)になります。


上のコードでは if文の条件の判定が二回行われていて、コードが見難くなりますので、

from turtle import *

shape("turtle")
while True:
␣␣␣␣forward(100)
␣␣␣␣left(90)
␣␣␣␣if int(xcor()) == 0 and int(ycor()) == 0:
␣␣␣␣␣␣␣␣break
done()

※␣は半角スペース1個分

のように条件式をandでひとまとめにすることが多いです。

※andは両方の条件式が真(True)である場合に下記の行のコードブロックを実行するになります。

マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。