前回に引続きPythonの基本的な使い方として, 繰り返しの手続きである,for文とwhile文を学習する.
また,説明としては前後するが,プログラミングとはなにか,Pythonとはなにかを少し探ってみる.
最後に,次回の実技テストについて,第4節で解説するので,注意して読むこと.
※今回の課題も気象データを扱う. ただし,実技テスト用に準備したデータファイルとは異なるので注意すること.
前回に学んだif文は,プログラミングの基本中の基本とも言うべき,条件分岐を行う文である.
分岐は論理である.
論理の流れを整理できれば,わかりやすく間違えにくい条件分岐が書ける.たとえば,
こういったことを,今後の実習や研究で活用するには,まず基本を身につけることが必要だ. ぜひ今後も,前回のif文に関する部分や課題を何度も復習してほしい.
◆リスト型: 今回の課題に対応するために,第5回でやっていなかったリスト型を簡単に紹介しておく. リスト型なしでもプログラムは作成できるが,オプションとして出てくる. それほど難しいものではないので,簡単に説明しておく. (今回の内容・課題の必須ではないので,軽めに読んでおいて構わない)
リスト型とは,複数の数値や文字列を1つの箱にいれるデータ型である.
具体的には,"[]"で囲み,値の間は','( カンマ )で分ける.
以下,対話モードで確認してみよう.
>>> a=[123, 456, "文字も入る", 789]▼ ◀◀ 4つの値のリストを作り,aに代入
>>> a▼ ◀◀ aの中身を確認
[123, 456, "文字も入る", 789]
>>> a[0]▼ aの中の最初( リスト内は0から始まる )を取り出す
123
>>> a[2]▼ 3番目は文字列.[]の番号をインデックスと呼ぶ
'文字も入る'
>>> type( a[0] )▼ ◀◀最初の値は整数型
< class 'int'>
>>> type( a[2] )▼ ◀◀3番目は文字列型
< class 'str'>
>>> len( a )▼ ◀◀ 要素数を表示するlen( )関数
4 ◀◀リストaの要素数は4個
>>>
使い方は以上でなんとなく理解できるだろう. その他,リスト型については次の記事を一通り読めばよいだろう.
リストを使うと,forループで簡単に参照できる. 上のリストの中身を表示するプログラムは以下のようになる.
a=[123, 456, "文字も入る", 789]
for i in a: # ◀◀リストaの要素を1つずつ取り出す
print i # ◀◀ 取り出したのを表示
今回の課題で,複数のデータを入力する必要があるが,リストを使えばこのように,一括処理が可能になる.
以下,第5回でも述べたが,重要なことなので再掲する.
課題はそのつもりで,じっくり,何度でも,しっかりと読む必要がある.
[ページトップへ]
「同じ作業を100回繰り返す」という時に便利なのが,for文である. Pythonのfor文の文法はひとつだけ.
for ループ変数 in イテラブルオブジェクト:
ループ処理ブロック
…………
ループ処理ブロック
これで「ループ変数を変化させつつ,イテラブルオブジェクトの数だけループ処理を繰り返す」 という意味になる.
上の記事の「forの基本」の項目,「listのfor文」「rangeのfor文」を読み, 実際に入力して確認しなさい.
ここで覚えてほしいのは,反復回数や範囲を指定するrange( )関数を使うこと.
たとえば「はい!という表示を10回繰り返す」のなら,こうなる.
for i in range( 10 ):
print( "%dはい!" % ( i+1 ), end="" ) # ◀◀改行しない書き方
print( "" ) # ◀◀これはforブロックの外に
◎上のプログラムを実際に実行して確認しなさい. ファイル名は,lesson6-01.py .
◆range( )関数は,次の説明を読めばわかる.
繰り返しの回数を指定するだけでなく,「5から10」とか「2から100を2つ飛ばしで」などの指定ができる.
◎lesson6-01.pyのrange( )の引数を,"range( 6,70,7 )"に書き換えて, 何が起きるか確認しなさい.ファイル名は,lesson6-02.py .
ループを繰り返している中で,途中でやめたり, 次の行をパスして次のループを始めたいときがある. その時に活用できるのが"break"と"continue"だ.
上の記事を読み,実際に入力して確認しなさい.
★なお,break, continue, elseは次のwhile文の中でも使われる.
[ページトップへ]
for文と同様に繰り返しで使われるのがwhile文である. 書き方は以下の通り:
while 条件式:
ループ内ブロック
…………
ループ内ブロック
これで「条件式が成立している( 真である )限り,ループ内ブロックを繰り返す」 という意味になる. ◀◀日本人にとってはforより直感的かも?
◎典型的なwhile文を使ったプログラムを示すので,入力して確認しなさい. ファイル名はlesson6-03.py .
import random # ◀◀ ランダム関数を使うのでこいつをimport※要はサイコロを1回振るだけを何度でも繰り返す.なんの面白みもなくて面目ない.
i="" # ◀◀ iを空にしておく
while i == "": # ◀◀ iが空ならずっとループ
print( "[%d]" % random.randint( 1,6 )) # ◀◀サイコロを振る!
i=input( "Enter to Continue: " ) # ◀◀ Enterで続ける.何か文字を入れて終了
上の記事を読み,サンプルを入力して確認しなさい.行数があるのでエディタで編集すること. ファイル名は自由.
◎力試し:第5回プログラミングの基礎( 1 )の < ■3-4 プログラム実行でPython体験> に登場したlesson5-01.pyを元にして,以下の改造しなさい. ファィル名はlesson6-04.py
念の為に,lesson5-01.pyを再掲しておく.
while True:
name=input( "名前?:" )
number=eval( input( "回数?:" ))
for i in range( number ):
if i%3==0:
print( "Hello, %s." % name )
elif i%3==1:
print( "\tHey, %s!" % name )
else:
print( "\t\tHello, World!!!" )
実は,for文とwhile文は,まったく同等な処理が可能である. 書き方が違うだけで同じことをさせることができる. 例えば,上のプログラムlesson6-03.pyをfor文で書き換えると, 次のようになる.
l=[0]
for i in l:
l.append( i+1 )
a=input( "Enter to Continue: " )
if a != "": break
◎上のプログラムを実際に実行して確認しなさい. ファイル名は,lesson6-05.py .
これを見ると,forではやや面倒なことをしている. 逆に,「10回繰り返すだけ」なら,for文の方が簡単だ.
要するに,for/whileは同じ処理を書くことはできるが,それぞれの性質には適正があるということ.
[付録:少しは面白い?サイコロプログラム]
[ページトップへ]
ここまで大急ぎで,Pythonによるプログラミングを体験してきた. 本実習では今回で最後だが,今後のカリキュラムではプログラミングは避けて通れない道である.
順番は前後したが,プログラム/プログラミングとはなにか,Pythonはどんな言語かについて, 簡単に解説し,参考リンクを紹介しておきたい.
今後の情報系の実習や講義に参考になると思う.
プログラムとは,仕事の手続きを記したものだ. 料理で言えばレシピ.最近はIoT電子レンジがレシピをダウンロードして, その通りに火加減とタイマーを設定してくれたりする. まさにそれがプログラムである.
コンピュータはひとつのステップを限りなく正確に高速に行う. なので,手順書であるプログラムを実行すれば同じ働きをする.( してくれないととても困る ) しかし,手順書の書き方がまずいと,わざわざ必要もないことをしたり, 経なければならないプロセスを飛ばしたり,意図せぬ動きをする. しかしそれは,コンピュータがプログラムに書かれたこと忠実に実行した結果であり, コンピュータは悪くない.悪いのはプログラムである.
コンピュータ単体の計算能力は限界があり,多少改造を加えたところで向上するのは せいぜい数倍のオーダ-である. しかし,プログラムの集合体であるソフトウェアがトータルに向上すれば,数百倍, 場合によっては数千倍というオーダーで効率を稼ぐことができる. グローバルネットワークの時代に突入している現代社会では,今まさに,ネットワークを含めた安全性, 安定性,効率をトータルにプランニングする能力が,世界的に求められているといってよいだろう.
それもこれも,全てはプログラミングの第一歩から始まるのである.
以下に,参考サイトを挙げておく.
前回すでに述べたが,もう少し詳しい述べたい.
プログラミング言語の設計思想にも依存するが,PythonやJava,C言語等, 現在主流として使われている言語のほとんどは手続き型で関数を中心とした言語である. このタイプの言語は,「ルール・分岐・繰り返し・関数」という4つの要素を把握すれば, ほぼ使えるようになる. これらは言語の形態や類型ではないが,学習する上でのポイントだと思ってほしい.
プログラムもまた,言語によってルールが異なる. このルールをちゃんとわからずに適当に書いてしまうと,意図しない動きにとまどうことになりかねない.
学んだばかりだが,forとwhileが繰り返しの中心で,Python以外の言語にも備わっている.
そしてif文とfor/while文を駆使すれば,ほとんどのプログラムは実現可能である. もちろん現実には複雑な処理をわかりやすく,効率よくするために,さまざまな工夫がなされるが, 原理としては分岐と繰り返しがあれば,プログラムは書ける.
1つのプログラムの中では,他にも応用できる基本的な作業がある.
※例:出社のために社屋のカードゲートを通り,エレベータに並び,
必要な階のボタンを押す.
職場に来たら挨拶をする.
コピー機でコピーする.
次の会議のために会議室を予約する.
◀◀ これらは会社のどの部署でも同じ手順である
こういった,ひとまとまりの仕事をまとめて,他でも呼び出して利用できるようにしたのが
「関数」だ.
関数を中心として設計された言語( C言語,Perl, Rubyなど多数 )以外では, まとまった機能を呼び出すことは,言語の仕様により「サブルーチン」「ブロシージャ」 と呼ばれることもある( 両方を使い分ける言語もある ).
また,関数を集めてひとつのパッケージのようにしたのが「ライブラリ」「モジュール」である. ライブラリはどんな関数の組み合わせでも作れるが,実際には使い勝手を考え, 画像処理,統計,ゲーム,通信,セキュリティなど,用途にあわせたものとしてまとめられている.
Pythonではモジュールを非常によく活用する. それは,Python本体をシンプルにしておくという設計思想による. 何もimportしないPythonは裸同然だと考えてよいだろう. この思想は,Python本体の実行速度の向上やバグの少なさに貢献している.
関数については本実習ではprint( )やinput( )などを利用しているものの, 学習項目としては取り上げていない.計算機実習2以降の実習や講義で,しっかり学んでほしい.
Pythonの特徴は検索すれば山ほど出てくる. 大まかだが,Pythonの特徴をまとめると,次のようになるだろう.
以下に,Python関連のサイトを紹介しておく( 一部紹介済み ).
★おすすめ学習サイト:
★Python概要解説:
★他:公式サイト:
[ページトップへ]
次回の実技テストについて,注意事項を伝える.
基本的には情報基礎での注意事項,遵守するべきテストのルールは同じである.
また,ディレクトリとデータの準備については,第5回に提示したものと同様である.
テストの出題範囲は,第1回から第4回の内容である. 各回の内容についてしっかりと理解し,操作できるように繰り返し復習しておくこと.
第2回
第3回
第4回
一度入力しても,入力後に何度でも編集可能. 確認できていない所を繰り返し確認できるので何度でも利用してもらいたい.
2020-07-16 by Kobori Satoshi, Fujii Daisuke