先日は、

 

 

にてforについて書きました。forで指定できるのはrangeだけでなく配列も使用できるので、配列の値をループの値として使用することが出来ます。

 

 Python の for は、他のプログラミング言語の foreact のような機能があるので、結構多機能になっていますが、C言語で使用できるカウンタ変数の増減や評価を直接記述することはできません。

 

 ただし、構文だけでループ内のデータの扱いを色々とコントロールできるので面白い仕様になっています。

 

 この場合、  for 変数名 in 配列を格納した変数名  の形で宣言するとループで指定した変数名を表示すると、番号ではなく、リスト内のデータを表示できるようになります。

 
 実際にコードを書くと
 
 
のようになりますが、使用する変数をリストを使って
 
 
のように指定をした場合、forで、
 
 
 
のような指定をすることが出来ます。この時に
 
 
のようにループで指定している変数をprint()関数の引数として使用すると、リスト内のデータを呼び出すことが出来ます。実際に実行してみると
 
 
のようになります。また、多重ループも可能なので、
 
 
のように複数の配列を用意してネストすると、
 
 
のようにリストの値を参照しながら、リストで指定されたデータの数分だけループします。
 
 ifを使う場合、条件での判定ですから、1つだけで使用する場合にはスイッチと同じものと考えることが出来ます。
 
 その為、【 条件の有無 】なので、判定の最小単位の二値で判断をすることが出来ます。この時の判定条件を用意して判断をしているので、
 
 
のように
 
  ■ 0 : 信号なし
  ■ 1 : 信号あり
 
のようなものを扱っていることになりす。この時に 【 何をしたら1になるのか? 】 と言う条件を実装することになりま菅、これが 【 if 】 や 【 while 】 を使用した際に実装する 【 判定の条件 】 になります。マイクラのレッドストーン回路も安定はこれなので、この日の状態で何をしたら1になるのかと言う条件を信号の入力の前の部分に用意することになりますが、単一で if の判定をする場合には画像のような二値の判定と考えることが出来ます。
 
 この条件で考えると、 【 有無 】 の判定をする場合には、片方だけ判定をすれば、それ以外はもう片方の判定として使用することが出来るので、通常は、ifだけを実装すると判定を行うことが出来ます。
 
 二値の判定で考えると、 【 奇数と偶数の判定 】 も含まれますが、この場合、
 
 
のような判定を入れると処理ができそうな気がしますが、実際に実行すると
 
 
のようになります。これは、ループの後の処理まで流れて次の処理に向かっているので、判定後の表示をした後に、判定以外の条件で表示をするものの処理まで行うことになる(順次なのでそうなります。)ので、このように判定が入ると
 
  ■ 判定後の表示
  ■ 通常の表示
 
の双方が発生してしまいます。この場合、処理の流れを判定で止めてし編めばいいので、
 
 
のようにelseを使うと
 
 
のように奇数と偶数を個別に判定することが出来ます。では、
 
 
のコードで同じことをしようと思うとどうすればいいのか?と言うと、偶数の判定後にループの頭に戻ればいいので、そう言った処理を判定の後につかすれば、奇数と偶数の判定を行えるようになります。この時に使用するのが、 【 continue 】 になります。このコードを
 
 
のように書き換えると
 
 
のようになるので、判定を行う処理を、ループの頭に戻るし寄りに書き換えるだけで同じ結果を得ることが出来ます。このように
 
 
問処理の結果を求める場合でも
 
 
のような判定を複数実装する方法と
 
 
のように判定を行った後に判定に該当しない処理をそのまま実行しないように判定後にループの戦闘に戻すことでTrueとFalseでの処理を個別に行えるようにすることが出来ますから、同じ書を考える場合でも、アプローチの方法は複数存在しています。
 
 通常は、その中で速度の出るものを選ぶことになりますから、ベンチマークテストを行って速度が出て、メンテナンス性の高いものを選択することになります。
 
 continueは戦闘に戻る処理になりますが、特定の場所でループを止めたい場合にはbreakを使います。
 
 これは、 【 ループ内で呼び出している変数 】  で判定をすることになるので、
 
 
のような記述になりますが、実行してみると、
 
 
のように指定回数の場所で止まります。

 

 forループでは、他の言語のforeach相当の処理が出来るような仕様になっており、

 

 
  ■ 範囲 : 数値が使える
  ■ 配列 : 文字が使える

でループ回数や使用できるデータをしていできるのですが、
 
  ■ continue   : ループの戦闘に戻る
  ■ break   : ループを終了する
を使用することで、このループの流れを条件分岐で制御できます。
 
 

 ループ処理は、マイクラだとクロックカイロと同じ難度絵、処理の実行とリセットを行うことで状態の意地ではなく、実行を連続して行う仕組みになっています。クロック回路については、

 

 

 

 

 

 

の中でも触れていますが、電気耕作で使用する 【 タイマー回路 】 がこれと同じ処理をするものになります。マイコン制御でもタイマーの割り込みを使うことががありますが、機会を動かすときの周期を作ってその周期で動くような物を作る際にはタイマーを使用しますが、この周期をpcで動くアプリケーション内作る時に for や while などのループを使うことになります。

 

 

  変数

 
  変数を仕様する場合、
 
   【 変数名 = 値 】
 
 のような表記で行いますが、C言語のように
 
   【 型 変数名 】
 
 の表記で行うことになります。この記述は値がないので、後に値を代入することになりますが、この表記を 【 宣言 】 と言います。その為、宣言をすると
 
   ■ 変数の宣言
   ■ 変数に値を代入する
 
 という2つの工程を使用することになります。最初の形のように
 
  【 型 変数名 = 値 】
 
 のような表記も出来ますが、これは初期値を決めているので、スタート段階ではこの値が参照されます。このように変数の宣言と同時に初期値も決めるような方法を 【 初期化 】 と言います。
 
  Pythonの場合、型の表記がなくても型の認識を行ってくれるので、変数の初期化は、
 
   【 変数名 = 値 】
 
の形で行えますが、コードの流れの中での 【 型の状態 】 がわからなくなる場合があるので、初期化した後に使用する場所によって変数の方を最初に変換して処理を実行するようにすると方の違いによる影響を受けにくくなります。この場合、

  ■ 変数は特定の目的で使用する
  ■ 多目的な場合、型はを処理の前に変換する

ようにすると処理に影響の出ない状態で変数を使用することが出来ます。

 変数の仕様としては、

  【 一つの変数名に一つの値を格納できる 】

というものになりますが、この特性から考えると、スプレッドシートのように多くの数値が格納できるものを作ろうとするとかなり煩雑な処理を実装することになります。

 スプレッドシートは表計算ソフトのことですが、表計算ソフトは帳票なので、
 


のように縦横にセルが並んだ状態で、このセルに値や数式などを導入することで、セル内の値を参照して計算をすることが出来ます。また、用意舌データの条件抽出やソートも可能で、データを元にグラフにする個tも出来ます。これが、スプレッドシートの仕様になりますが、マイクロソフトオフィースだとExcelがそのカテゴリーのソフトになります。現在のバージョンはPythoに対応しているので、情報Iで学習するPythonによる処理の方法を覚えれば、外部ライブラリを使うように 【 Excel内での書式 】 を覚えるだけで、Pythonでの挙動をExcel内で実装することが出来ます。

 オフィースソフトもOSSのソフト(寄付金で運用されているもの)があるので、無償で利用できるオフィースソフトも複数あり、軽量で機能を抑えたものから、LibreOfficeのように多機能なものまであります。その為、スプレッドシートについても現在は気軽に機能を理解して利用できるようになっていますが、Linuxのディストリビューションでは、LibreOfficeが標準でインストールされているものもあります。
 
Libre Officeについては、

 

 

 


で触れていますが、



のように複数のツールで構成されているので文章制作や表計算だけでなく、プレゼンテイーション用のスライドなども作れます。また、JREが必要ですがBASEというデータベースソフトも利用できます。まや、Libre OfficeのマクロでもPythonが使用できるようになっています。
 
 こうしたデータの塊を扱う場合、多変数の構造を使うことになりますが、この際に

  a1=1,a2=2,...
  b1=1,b2=2,...

のように打ち込んでいくと少し大変なので、これをもっと簡素に扱う方法を用いることになります。こうした多変数になる 【 集合 】 を扱う機能として、殆どのプログラミング言語には 【 配列 】 が用意されています。
 

 

  配列


 配列については、

 

 


にて触れていますが、Pythonでは、【 文字列型は配列になっている 】 ので、実質的に文字配列ですから、インデックスで文字の位置を指定するとその文字だけを抽出できます。

 配列は、Pythonでは、 【 リスト 】 と言いますが、質とを用意する場合には、

  【 変数名 = [] 】

とすることで、空の配列を用意することが出来ます。ここに値を追加することで、何もない状態のリストに値を追加していくことができるのですが、最初から値を要する場合だと、

  【 変数名 = [値1,値2,値3,...] 】

のような形で、値を追加した後に、 【 , 】 で区切って次の値を追加します。この書式でエラーが出る場合だと、【 , 】 と変数名の間に半角スペースを配置すると治る場合があります。

 また、

  ■ 予約後
  ■ ファイル名と変数名が同じ
  ■ 別の処理で同じ名称のものが存在する

のような状態だとエラーが出たり、おかしな挙動になる場合があるので、そうなら内容のコードを書く必要があります。
 
 リストの指定ですが、データは空の配列を要する場合だと、

 
のようになり、数値を格納する場合だと、そのまま数値を[]内に追加します。

 
文字列の場合だと、引用符が必要なので 【 ” 】 か 【 ’ 】 で囲むことになるので、



のようになります。複数のデータを書くの売る場合には、 【 , 】 で区切るので




のようになります。これで、リストの中のデータを変数に代入できたので、変数を呼び出すとリストを使用できるようになります。

 リストは、



のようにprint関数で呼び出すと表示ができるので、



のようなコードを用意して実行すると


のように 【 変数内の内容 】 を表示することが出来ます。
 

 

  リスト内の要素を使う


 先程までの状態だと、 【 配列の形で保存された文字列や数値 】 なので、それをそのまま使用することが出来ないのですが、インデックスで指定することで指定した場所のデータを利用することが出来ます。
 
 プログラミング言語の数値の並びは 【 十進数の桁内に格納できる数値 】 で推移しますから、【 0〜9 】 を使います。日常では、数値の変化を10個の集まりで考えるので、数値が存在している状態の1〜10を使いますが、桁内に格納できるものは1〜9で10はひとつ上の桁に繰り上がった状態になります。桁が繰り上がると、下の桁はリセットされるので0になりますが、このシステムから考えると、1つの桁の中には、何かが存在する場合の個数を示す1〜9とリセットがかかり何もなくなった時の状態を示す0が格納できることになります。

 数値の場合、ブール代数のように二値が基本なので、有無を示す0と1があり、1の集合を十進数で示す場合に、n進数の中の桁の最大値である 【 n-1 】 を用いることになります。その為、二進数だと、2−1なので、桁内に格納できる値は0と1になりますが、十進数の場合も10−1なので9になります。これが0以外の状態なので、十進数では0〜9が桁内に格納できるわけです。小学校の算数では、日常で使用するものが 【 10の集まり 】 なので、

  ■ 0と言う個数のない状態
  ■ 1〜10までの数
  ■ 10の集合出できた数値

を扱うことで、桁の違いを理解しやすいようにしてありますが、小学校低学年で筆算が登場しますが、これを使うと計算をするのは1桁なので、桁内に格納されている数値が0〜9のみになりますから、

  ■ 繰り上がり
  ■ 繰り下がり

が生じます。これも、【 桁内に格納できない数値の取り扱い 】 を行った際の変化になります。

 プログラミング言語の場合、十進数が基本ですが、使用するのが、 【 桁内に格納できる値 】 でインデックスが振られているので、0から値がスタートすることになります。その為、



のように推移します。リスト内の値を呼び出す場合、

  【 リスト名[インデックス] 】

で呼び出せるので、



のようにして呼び出して、print関数で表示をすることが出来ます。



 このコードでは、



のように3つの配列を用意していますが、

  ■ 数値(0からスタート)
  ■ 文字列
  ■ 数値(1からスタート)

を用意していますが、最初の数値はインデックスと同じ並びなので、数値を指定するとその値が取得できます。

 文字列もインデックスを使いますが、これも0番目からスタートすることになります。

 一番最後のものは、数値ですが、これはインデックスとは異なる並びになっていますから、値から1を引いた数値をインデックスの値として指定しないと意図した値を取得できません。

 リストも変数なので、型を固定して運用したほうが扱いやすいのですが、インデックスで呼び出して



のような処理を実行することも出来ます。この場合、数値だと演算処理が行われるので、2つの値の和賀表示され、文字列だと結合されます。

 2つ目の事例では、型自体を変換することで、数値を文字に変換することで文字列にしています。
 

 3つ目は、インデックスの値を使用していますが、基本的にインデックスの値がもデータの総数を超えるとエラーになるのでそれを超えないようにする必要があります。また、この事例では、インデックスの値と、数の推移が異なるので、【 文字列のデータをインデックスと同じように扱っている状態 】 ですから、意図した値をnとした場合、インデックスの値はn−1になります。
 
 

 コード全体では、



のようになりますが、実際に実行すると
 


のようになります。

 

 

  要素を更新する


 この事例では一次元の配列を使用していますが、リストも変数なのでデータの更新をすることが出来ます。

 変数の値の更新をする場合には、再代入を行いますが、 【 b=b+1 】 のような記述を行った場合、変数bに対してb+1を代入できます。そうすることで、現在の変数bの値に+1したものを変数bに代入できるので変数bの値を更新することが出来ます。【 変数に対して値の変化を加えるように異なる値を代入する処理 】 のことを 【 再代入 】 と言いますが、リストに対してもそれを行うことが出来ます。前述のようにリストにはインデックスでデータの選択が出来ますが、呼び出しだけでなく 【 データの書き換え 】 を行うことも出来ます。この処理の方法も変数に値を再代入する方法と同じで、

  【 リスト名[インデックス] = 値 】
420
で指定できます。実際にコードを書いてみると

 
のようになりますが、コード内では、異なるインデックスを用意してそれぞれの要素を更新しています。実際に実行してみると



のようになります。変数では一つの値しか格納できませんから、再代入を行うと値の更新のみが行われますが、配列の場合、複数の値を格納していますから、この格納された全てのデータの状態を一つの変数の中に格納できます。その為、インデックスで指定した場所に値を代入して更新した場合も損状態の変化が記録されます。これが複数の要素に対して行えるようになっているので、個別の要素をそれぞれ更新していくと、更新号のデータが格納されていくので、一つのリスト内に格納した個別の値に変化を与えることが出来ます。