昨年(2020年)から小学校でプログラミング教育が必修になった。
拙者は小学校どころか中学、高校でも授業でコンピューターを使ったことがない。良いのか悪いのか分からないが、隔世の感。
将来みんな使えるようになるのだろうか。
それとも英語教育のようになるのだろうか。
案外、日本語プログラミング言語が主流に……まあ、ないか。
当ブログではこれまで地図に位置をプロットするのにLeaflet(言語はJavaScript)、R言語、Pythonを使っているが、
プロット ⇒ いっぱいプロット
で、
- 繰り返し(ループ)
- 外部ファイル(CSVファイル)の読み込み
といった操作を行っているので、今回は繰り返しのfor文について整理しておいた。
※ 繰り返しは、for文の他、while文もあるが、今後使うことがあったら付け加える
例として次のような数が入ったリスト(一次元配列)を扱ってみる。
sample [106,82,290,100,0,14]
要素は、
sample[0]=106、sample[1]=82、…、sample[5]=14
で、要素数は6。
Java
拙者のプログラミング言語の学習の土台は一応Java。今はなき(ホームページの)アプレットを作るべく『やさしいJava』という本を買って、よく分からないまま見よう見まねで使っていた。Cは『はじめてのC』という本を買ったものの早々頓挫。他にもかじっただけで頓挫したものがいくつかある。
コンパイルするとエラーが次々出て、そのメッセージがよく分からない英語だから、ますます困るというパターン。第一の関門。
Javaは久しく使っていないが……。
int sample[] = {106,82,290,100,0,14};
で配列の宣言。
※ 数(整数)の場合、int。
for文は、
int ttl=0;
for (int i=0;i < sample.length;i++){
ttl = ttl + sample[i];
}
ttlは任意の変数。予め適当に作っておく。
sample.lengthがsample []の要素数で6。i < 6と同じ。
i++でiが1ずつ増加してi=5まで繰り返して終了。
JavaScript
JavaScriptはJavaとは別言語。コンパイル不要のスクリプト言語。
HTMLの<script> </script>
タグの中に記述して使う。
変数、配列の宣言はintではなくvar。
var sample = [106,82,290,100,0,14];
for文はJavaと同じ。
var ttl = 0;
for (var i=0;i < sample.length;i++){
ttl += sample[i];
}
ttl += sample[i]は、
ttl = ttl + sample[i]
と同じ。
LeafletはJavaScript。
前回のプロットの繰り返し部分(抜粋)は、
var point = [
['大雪山' , 43.661864 , 142.833295],
['十勝岳' , 43.42 , 142.69],
・
・
・
['諏訪之瀬島' , 29.64 , 129.71],
];
for(var i=0;i < point.length;i++){
L.circle([point[i][1] , point[i][2]] , 4000 ,{
color:'green'
})
.addTo(map)
・
・
・
L.circle([point[i][1] , point[i][2]] , 1000 ,{
color:'red'
})
.addTo(map)
.bindPopup(point[i][0]);
}
配列 []の中に配列 []がある二次元配列。
R言語
プログラミング言語というかプログラミングできる統計ソフト。
sample <- c(106,82,290,100,0,14)
R言語の場合、0ではなく1から始まるので、
sample[1]=106、sample[2]=82、…、sample[6]=14。
合計はsum(sample)で瞬時に592と出るが、for文だと
ttl <- 0
for(i in 1:length(sample))
{ttl <- ttl + sample[i]}
ttl
length(sample)が要素数で6。i in 1:6と同じ。
1:6は配列で、
[1, 2, 3, 4, 5, 6]。
Python
PythonはJavaScript同様、スクリプト言語。近頃、専らJupyterで使用。
sample = [106,82,290,100,0,14]
合計はR言語同様、sum(sample)で592と出るが、for文だと
ttl=0
for i in range(len(sample)):
ttl += sample[i]
ttl
なお、
for i in range(len(sample)):
ttl += sample[i]
だとエラー。
IndentationError: expected an indented block
Pythonのfor文は:だけで{}がないので、繰り返し処理の部分(2行目以下)は行頭を字下げ(インデント)する必要がある。
len(sample)が要素数で6。for i in range(6):と同じ。
for i in len(sample):
だとエラー。
TypeError: ‘int’ object is not iterable
イテラブル?。英和辞典に載っていない。
※ iterate(繰り返す)ならば載っている。
こういったエラーが連発すると嫌になってくるが、
for i in 6:
といった使い方は駄目というメッセージなので、あまり難しく考えず、range()を使う。
range(6)は配列で、
Python 2だと[0, 1, 2, 3, 4, 5]。
Python 3だとrange(0,6)。list(range(6))で[0, 1, 2, 3, 4, 5]。
Python 3でlist(range(0, 12 , 3))だと[0, 3, 6, 9]。12は含まれない。