Turtleグラフィックス② 変数と繰り返し

Image from Gyazo

変数と繰り返し

Turtleグラフィックスを利用して, 変数繰り返し の仕組みに関して学習しましょう. 変数とは数値や文字列などのデータを一時的に保存するための仕組みです. 変数には計算結果などを保存することができますが, プログラムを終了すると,変数に格納されたデータは参照することができなくなります. また,複数のデータを保存するには リスト と呼ばれるデータ構造を変数に保存します.

Image from Gyazo

また,変数やリストを利用して, 繰り返し という制御が実現されます. 繰り返しは,その名前が示すように,特定の処理を複数回繰り返して実行する処理のことです. Pythonに限らず,一般的なプログラミング言語において, 変数や繰り返しは重要な機能となりますので,しっかりと身に付けましょう.

準備

Muエディタを起動したら,Python3 モードを選択しましょう. ツールバーにある「保存」をクリックして,「chapter3.py」という名前でスクリプトを保存します. また,Turtleグラフィックスのライブラリ(モジュール)をインポートしておきましょう.

# Turtleグラフィックスのライブラリをインポート
from turtle import *

変数

算術演算子

変数を理解する前にPythonで利用可能な算術演算について確認しましょう. 数値を対象に加算・減算などの算術演算を行うには算術演算子を用います. 算術演算子を次の表にまとめます. print()で各算術演算子の結果を表示してみましょう.

演算子 説明
+ 加算 3+2 -> 5
- 減算 3-2 -> 1
* 乗算 3*2 -> 6
/ 除算 3/2 -> 1.5
// 除算の商 3//2 -> 1
% 除算の余り 3%2 -> 1
** べき乗 3**2 -> 9
# 算術演算子
print(3+2) # -> 5
print(3-2) # -> 1
print(3*2) # -> 6
print(3/2) # -> 1.5
print(3//2) # -> 1
print(3%2) # -> 1
print(3**2) # -> 9

加算を表す+と乗算を表す*は文字列にも適用が可能です. 文字列を対象とするとき,+は文字列の連結,*は文字列の繰り返しを表します.

# 文字列の連結
print("abc" + "def") # -> abcdef

# 文字列の繰り返し
print("abc" * 3) # -> abcabcabc

変数

変数はデータを格納する箱のことです. 変数にデータを格納することを 代入 と呼び,演算子=を用いて記述します. 変数には 任意の名前(変数名) を付けることができますが, 変数の先頭の文字に数字を用いることはできません(予約語も使用できない). print()で変数名を指定すると,変数に格納されたデータが出力されます.

# 数値を変数x,yに代入
x = 100
y = 200
print(x) # -> 100
print(y) # -> 200

算術演算子を利用して,計算結果を変数に代入することもできます. 同じ変数名に値を代入すると,格納される値は上書きされることに注意しましょう.

x = x + 100
y = y * 2
print(x) # -> 200
print(y) # -> 400

print()で変数を出力するときに,f文字列 という機能がPython 3.6から利用可能になりました. 文字列に変数を埋め込んで出力するときにてとても便利です. 使い方を覚えておきましょう.

# f文字列
print(f"x={x} y={y}") # -> x=200 y=400

変数を活用した描画

変数を活用してTurtleグラフィックスを描画してみましょう. 変数xyにタートルの座標を代入して,長方形を描きます.

x = 100
y = 200
goto(x, y) # x=100 y=200

x = x - 200
goto(x, y) # x=-100 y=200

y = y - 400
goto(x, y) # x=-100 y=-200

x = x + 200
goto(x, y) # x=100 y=-200

y = y + 400
goto(x, y) # x=100 y=200

Image from Gyazo

リスト

リストの宣言

リストは「[](角カッコ)」で,カンマで区切られた複数の値(要素)を囲むことで表現します. 作成したリストは,変数に代入することができます. 変数に代入されたリストの要素は,要素番号(添字)を用いて参照することができます. 例えば,xlist = [100, -100, -100, 100]のように4つの要素で構成されるリストは, xlist[0]xlist[1]xlist[2]xlist[3]のように,0から3の要素番号を用いて参照します. ちなみにリストの要素数を超えた要素番号(例えばxlist[4])を参照するとエラーになります.

# リスト
xlist = [300, -300, -300, 300]
ylist = [200, 200, -200, -200]
print(xlist) # -> [300, -300, -300, 300]
print(ylist) # -> [200, 200, -200, -200]

# xlistの0番と1番
print(xlist[0]) # -> 300
print(xlist[1]) # -> -300

# ylistの2番と3番
print(ylist[2]) # -> -200
print(ylist[3]) # -> -200

リストの長さと合計

リストの長さを求めるlen(),リストの値を合計するsum()という関数が利用可能です.

zlist = [1, 2, 3, 4, 5]
print(len(zlist)) # -> 5
print(sum(zlist)) # -> 15

リストの要素の追加

リストの末尾に要素を追加するにはappend()を利用します.

# 要素の追加
xlist.append(400)
xlist.append(300)
ylist.append(0)
ylist.append(200)
print(xlist) # -> [300, -300, -300, 300, 400, 300]
print(ylist) # -> [200, 200, -200, -200, 0, 200]

リストを活用した描画

リストを活用してTurtleグラフィックスを描画してみましょう. xlistylistがタートルの座標を表しています. 後述のfor文をリストを組み合わせると, よりコンパクトなコードで同じ内容を記述することができます.

goto(xlist[0], ylist[0])
goto(xlist[1], ylist[1])
goto(xlist[2], ylist[2])
goto(xlist[3], ylist[3])
goto(xlist[4], ylist[4])
goto(xlist[5], ylist[5])

Image from Gyazo

繰り返し

for文(リストの要素で繰り返し)

リストの要素を順に取り出しながら,特定の処理を繰り返すことができます. ここでは,for文 と呼ばれる繰り返しのための制御構文を取り上げます. for文は次のように記述します.

for 変数 in リスト:
	繰り返す処理 # インデント(字下げ)が必要

forのすぐ後ろにある変数に,リストの要素が一つずつ代入されます. この変数を用いて,特定の処理を繰り返します. 繰り返す処理の先頭には インデント(字下げ) が必要です. 一般的には,タブキー(TAB)を利用して,4文字文のスペースをインデントとして用います.

例として,5人のテストの得点を表すリストを格納したscoresを考えます. リストから得点を一つずつ取り出し,print()で出力しましょう.

# テストの得点
scores = [80, 70, 90, 50, 80]

# for文で要素を取り出す
for data in scores:
	print(data) # 変数dataに値が格納される

Image from Gyazo

例題1

for文を利用して,テストの得点の合計を計算してください. 得点の合計を格納するための変数totalを宣言し,結果をprint()で出力しましょう.

Image from Gyazo

for文(決まった回数の繰り返し)

特定の決まった回数だけ繰り返しを行うにはrange()を利用することができます.

for 変数 in range(繰り返し回数):
	繰り返す処理 # インデント(字下げ)が必要

例えば,リストxlistの要素数である6を繰り返し回数に指定すると, 変数indexには,0から5までの値が代入されます. この値を参照番号として,リストの要素を参照すると便利です.

for index in range(6):  # 繰り返し回数はlen(xlist)でもOK
	print(index)
	print(f"x={xlist[index]} y={ylist[index]}")

Image from Gyazo

for文を活用した描画

for文を活用してTurtleグラフィックスを描画してみましょう. for文を利用して0から5までの要素番号を指定して,xlistylistの要素を取り出しています. goto()を6回記述するより,for文を利用する方が,コンパクトに記述できることがわかります.

for index in range(6):  # 繰り返し回数はlen(xlist)でもOK
	goto(xlist[index], ylist[index])

Image from Gyazo

例題2

次の図を参考に1/2に縮小した図形を描画してください.

Image from Gyazo

課題

次の課題に取組んでください.

Image from Gyazo

参考書籍

愛知県名古屋市にある椙山女学園大学 文化情報学部 向研究室の公式サイトです. 専門は情報科学であり,人工知能やデータベースなどの技術要素を指導しています. この公式サイトでは,授業で使用している教材を公開すると共に, ベールに包まれた女子大教員のミステリアスな日常を4コマ漫画でお伝えしていきます. サイトに関するご意見やご質問はFacebookまたはTwitterでお問い合わせください.