初版:2020/07/08
修正:2020/07/10
[対応モデル] - fx-CG50 OS3.20 以降、fx-9750GIII / fx-9860GIII OS3.21 以降反復可能オブジェクト、具体的には、文字列型、リスト型、タプル型、range型 などのシーケンス型のオブジェクト(要するに配列)の要素を順に使いながら、反復処理を行います。
1. C言語や Casio Basic の for文に近い使い方は、以下のスクリプト例でしょう。スクリプト例:s = 0
for x in range(1, 11):
s = s+x
print(s)
動作:1+2+3+・・・+9+10 を計算した結果 s (=55) を表示します。
x の値を 1 から 10 まで1つづつ変化させながら、
s = s+x を反復します。
range(1, 11) の2つめの引数は、11 になっていますが、これよりも1つ少ない値までが実際に使われるのは、
range() の仕様です。ここでは、
range() は数値のリストを作ります。
range() のリファレンスも参照してください。
スクリプト例:s = 0
for x in range(1, 11, 2):
s = s + x
print(s)
動作:range() 関数の第3引数 (この場合は 2) は、2 飛びで for 文に値を適用することを指示します。
つまり、1+3+5+7+9 を計算します。その結果は 25 になります。
2. Python の for文で使える便利な機能として、リストの要素を最初から順に x に適用して、反復処理を行う例です。スクリプト例:number = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
s = 0
for x in number:
s = s+x
print(s)
動作:numberリスト の要素を最初から最後まで順に使いながら処理を反復する例です。具体的には 1+2+・・・+9+10 を計算した結果 s (=55) を表示します。リスト [1, 2, 3, ・・・, 9, 10] の要素を順に x に適用しながら反復処理を行っています。
3. 文字列リストの要素を順に割り振って反復処理を行う例です。スクリプト例:selection = ['C language', 'Casio Basic', 'Casio Python', 'C#']
for language in selection:
print('I love ' + language)
動作:以下のような出力になります。
I love C language
I love Casio Basic
I love Casio Python
I love C#
selectionリストの要素は文字列になっており、順番に適用して反復処理で使われていることが分かります。
4. 文字列を使った反復処理の例を挙げます。
スクリプト例:string = 'Python^.^'
for character in string:
print(character)
動作:文字列は文字のリストなので、リストの要素である文字を頭から順に適用しながら反復処理を行います。
実行すると以下のような表示になります。
P
y
t
h
o
n
^
.
^
5. Casio Python はグラフィックス画面(描画画面)への出力がメインになるような使い方が多いと思うので、グラフィックス画面に点を描画する例を挙げます。(fx-CG50 / 9750GIII / 9860GIII OS3.40 以降のみ対応)スクリプト例:fron casioplot import *
for x in range(384):
set_pixel(x, 96)
show_screen()
動作:グラフィックス画面中央に左から右へ点を描画した結果、直線が描画されます。for x in range(384): は、0 から 383 までの整数値を順に x に適用します。グラフィックス画面は横方向に 384 個のピクセルで構成され、左端の座標値が 0、右端の座標値は 383 になっています。ピクセルの座標値だけでなく、n個の要素がある時、0 から n-1 までのインデックスが割り振られる例は、プログラミングではごく普通のことです。従って、range(p) とした場合は、0 から p-1 までのインデックスが割り振られる仕様になっています。便利だからこのような仕様になっているわけです。
6. Casio Python のグラフィックス画面を点で埋め尽くす例を挙げます。(OS3.40 以降のみ対応)スクリプト例:from casioplot import *
for y in range(192):
for x in range(384):
set_pixel(x, y)
show_screen()
動作:グラフィックス画面の座標 (x, y) に連続的に点を描画します。具体的には、左端から右端までの直線を上から下へ描画してゆきます。
7. for 文の反復は break で中断します。スクリプト例:number = [9, 3, 8, 0, 6, 5, 1]
exist = False
for x in number:
if x==0:
exist = True
break
if exist:
print('found 0')
else:
print('not found 0')
動作:ランダムな順序で並んでいる 一桁の整数が要素になっているリストnumber に 0 が含まれているかを調べるスクリプトです。for x in number: の書式は上で説明しています。 最初に exist変数を False としておき、反復処理の中で、0 が見つかったら True に変更します。繰り返しが終わった後、exist 変数の値に応じて結果を出力します。
0 が見つかれば、そこで反復処理を終了するために、break ステートメントを使っています。
8. Python の for文は、else が使えて、意外に便利です。スクリプト例:number = [9, 3, 8, 0, 6, 1, 7]
for x in number:
if x==0:
print('found 0')
break
else:
print('not found 0')
動作:上の例7と同じことを行うスクリプトですが、else を使うことでスクリプトがシンプルになります。else ブロックは break せずに for ループが回りきったときに実行されます。言い換えると for 文の else はループが break で終了しない時に実行され、break で終了した時には実行されません。
else は for と同じインデントレベルに記述する必要があります。else が if と同じインデントレベルだと動作が異なります。
9. continue を使った例スクリプト例:
while 1:
key = input('Input key')