Turtleグラフィックス② 変数と繰り返し
変数と繰り返し
Turtleグラフィックスを利用して, 変数 と 繰り返し の仕組みに関して学習しましょう. 変数とは数値や文字列などのデータを一時的に保存するための仕組みです. 変数には計算結果などを保存することができますが, プログラムを終了すると,変数に格納されたデータは参照することができなくなります. また,複数のデータを保存するには リスト と呼ばれるデータ構造を変数に保存します.
また,変数やリストを利用して, 繰り返し という制御が実現されます. 繰り返しは,その名前が示すように,特定の処理を複数回繰り返して実行する処理のことです. 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グラフィックスを描画してみましょう.
変数x
とy
にタートルの座標を代入して,長方形を描きます.
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
リスト
リストの宣言
リストは「[](角カッコ)」で,カンマで区切られた複数の値(要素)を囲むことで表現します.
作成したリストは,変数に代入することができます.
変数に代入されたリストの要素は,要素番号(添字)を用いて参照することができます.
例えば,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グラフィックスを描画してみましょう.
xlist
とylist
がタートルの座標を表しています.
後述の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])
繰り返し
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に値が格納される
例題1
for文を利用して,テストの得点の合計を計算してください.
得点の合計を格納するための変数total
を宣言し,結果をprint()
で出力しましょう.
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]}")
for文を活用した描画
for文を活用してTurtleグラフィックスを描画してみましょう.
for文を利用して0から5までの要素番号を指定して,xlist
とylist
の要素を取り出しています.
goto()
を6回記述するより,for文を利用する方が,コンパクトに記述できることがわかります.
for index in range(6): # 繰り返し回数はlen(xlist)でもOK
goto(xlist[index], ylist[index])
例題2
次の図を参考に1/2に縮小した図形を描画してください.
課題
次の課題に取組んでください.
- 図を参考にfor文を利用して時計回りの渦を描く
- ペンを徐々に太くする
- 横線は赤色,縦線は青色