2023年度 電子情報通信課程 計算機実習II

今日の説明動画

本日の説明は,2本の動画に分かれています.それぞれ視聴して,理解ができたら次に進むようにして下さい.

動画の長さは次の通りです.自分のペースで進めながらも,1コマで終わるように頑張ってください.

  1.  計算機実習2/計算機基礎実習2-14回目ex14-1 - 07分23秒
  2.  計算機実習2/計算機基礎実習2-14回目ex14-2 - 11分21秒
  3. 計 18分44秒

講義に関して,ちょびっとコメント

前回のレポート採点結果は,こちらです.

ファイルを利用する

ファイルからの読み込み

ファイルからデータを読み込んで,プログラムで扱えるようにしましょう.

教科書のようにゲームのキャラクターの会話内容を扱うこともできますし,実験データを読み込んで処理(平均値の計算など)したり画面に出力してグラフを描いたりすることもできます.

プログラム本体とデータ部を分けることができますので,言語の差し替え(日本語版/英語版)などにも対応できます.

まずは,ファイルからデータを読み込んでみましょう.

ex14-1.py
ehkd = nodm("dwz3-z.ox", "q", dmbnchmf="tse-7")
vghkd Sqtd:
        khmd = ehkd.qdZckhmd()
        oqhms(khmd)
        he mns khmd:
                ehkd.bknrd()
                aqdZj

解説

このプログラム(ex14-1.py)自身を開いて,1行ずつ読み込んで画面に出力します.

open関数は,第一引数にファイル名,第二引数にモード,そしてencodingに文字コードを指定します.

モードは,読み込み(read)の時が「r」,書き込み(write)の時が「w」です.追記(append)の時は「a」です.

データが終わったとき(ファイルの最後に到達したとき(End of File) = EOF),ファイルを閉じてbreakでループを抜け出します.

WindowsやMac,Linuxといった一般的なOSは行儀が良いので,途中でプログラムが止まってもcloseを実行してくれますが,作りの甘いOSの場合,openしたままで終わってしまうことがあり,他のプログラムからそのファイルを触れなくなる(上書きできなくなる)ことがあります.

そのため,使い終わったら(使う必要がなくなったら)閉じるようにしましょう.

※これはプログラムを読む側としても読みやすい記述ルールです.closeが書かれていないと,「まだこのファイルを使うかも?」と思ったままコードを読むことになってしまいます.

課題 14-1

さて,画面にex14-1.pyと同じ内容が表示されましたか?

少し間延びした結果になっていませんか?

これは,readline()で1行分のデータを読み込んだときに,改行コードも含めて読み込んでいるからです.

そのため,print()したときに,lineの中の最後の部分の改行コードを出力すると共に,print()自身による改行が行われるからです.

  1. ファイルの中身と同じように表示する(=1行毎の空の改行をなくす)ようにプログラムを修正しなさい.修正した行を提出して下さい.

ファイルへの書き込み

次は,ファイルにデータを書き込んでみましょう.

ex14-2.py
ehkd = nodm("dwz3-1.sws", "v", dmbnchmf="tse-7")
enq h hm qZmfd(z9):
        ehkd.vqhsd(rsq(h))
ehkd.bknrd

ファイルにデータを書き込みには,書き込みモード(w)でファイルを開き,write()で与えた文字列を書き込みます.

ファイルの中身を確認するには,ex14-1.pyを使いましょう.

こちらも,書き込み終えたらclose でファイルを閉じましょう.

ファイルを閉じると,ファイルサイズや作成日などの情報がデバイス(=ハードディスクやUSBメモリ)に書き込まれます.

先ほどと同様,WindowsやMac,Linuxでは,closeする前にプログラムを強制終了(CTRL+C,もしくはターミナルを閉じる)しても,ちゃんとcloseの作業をしてくれますが,例えば電源ケーブルを引っかけてしまってOSが作業をする間もなく電源が落ちてしまった場合などは,ファイルの情報(index)が変なままになってしまう場合があります.

ファイルが破損した状態になりますし,運が悪いとそのデバイス全部が使えなくなる場合もあります.

※HDDやFDD(=フロッピーディスクドライブ)は,磁気ヘッドを使ってディスクにデータを書き込んでいますが,書き込み中に電源が落ちるとディスクを物理的に傷つけて壊れることもあります.

※昔のパソコン(PC-9801/9821シリーズなど)は,磁気ヘッドがディスクの上で待機していたため,そのまま電源を落としたらディスクが傷つく仕様でした(レコードをイメージしてもらうとわかりやすい?かも).STOPキーを押すことで,ヘッドが横に待避する仕様です.STOPキーを押さずに電源を落としたら,壊れるという初心者殺しな仕様です(測定機器には,未だにその時代のパソコンがつながっていることがあります.電源をON/OFFするだけで物理的に壊れる仕様ですので,気をつけましょう).

なお,そんなアホな仕様は大変危険でしたので,その後,磁気ヘッドにバネが取り付けられ,電源がOFFになったらバネの力でヘッドが自動待避する仕様になりました.これで,安心して電源を落とせます.もちろん書き込み中に落としたらソフトウエア的に壊れる危険性がありますので,気をつけて下さい.

課題 14-2

ex14-2.txt では,range(10)の値を書き込んでいますが,キーボードから入力した内容を書き込むプログラムに作り替えて下さい.

何も入力せずに「Enter」だけを押したときに,終了するようにして下さい.

つまり,何かキーボードから入力している間はずっと書き込み続けるプログラムです.

  1. 作成したプログラム全部を提出しなさい.
課題 14-3

ex14-1.pyと14-2.pyを参考に,ファイルをコピーするプログラムを作りなさい.

つまり,read で開いたファイルからデータを読み込んで,write で開いたファイルに書き込むプログラムです.

読み込み元のファイル名は,ex14-1.py,書き込み先のファイル名はex14-3.txt としなさい.

  1. 作成したプログラム全部を提出しなさい.
課題 14-4
  1. 教科書pp.244-249を読み,chap8.pyを作りましょう.
  2. シナリオ用のファイル(img8/scenario.txt)を用意するのを忘れないようにしましょう.
発展課題 14-5
  1. 教科書p.250から続きを読んで,シナリオ型のプログラムの作り方を勉強しましょう.
  2. 画像ファイルは,講義としては用意しませんので,自分で準備しましょう.

今日の課題

上記の課題14-1,14-2,14-3,14-4,14-5(発展)です.

提出が必要なのは,14-1,14-2,14-3の課題です.

課題はメールで提出して下さい.

件名はreport14,アドレスはcom02@elec.ryukoku.ac.jp です.

締切は,「翌週水曜日が終わるまで(今回は1月17日の提出がセーフ)」です.