Python3超入門講座【第11回】「ファイル入出力と占いプログラム」


初心者のためのPython3超入門講座の11回目です!!!

これまでPython3のデータ型からはじめ、if文、for文、while文、関数、例外処理を学んできました。ここまで学習した段階でかなりプログラミングの幅が広がってきているのではないでしょうか。そこで今回は過去に学んだテクニックの復習もかねてまずは占いプログラムを作成したいと思います。

たまには、ほんのちょびっとでも実用性のあるコードを書きたいですからね。

そして、その次にプログラムからファイルへ保存したり、プログラムにファイルを読み込むといったファイル入出力の勉強をしていきましょう!

今回は占いプログラム実習とファイル入出力の学習の2本立てです!お楽しみに!!

Python3による占いプログラムの作成

占いプログラムはとっても簡単に作成できます。その前にプログラムを作成する準備として、知っておきたい関数を1個だけ紹介します。

それは乱数を発生させる関数です。

今回はランダムな整数値を発生させる関数であるrandom.randint(a, b)の使い方からはじめましょう。

Python3で整数の乱数を発生させるには?

[書式]

import random # import文では「モジュール」を読み込むことができます。モジュールとは便利なツールのようなものです。

random.randint(a, b) # a~bまでの整数の乱数を取得

[サンプルコード]

是非、IDLEなどでサンプルコードを実際に手で動かして実行してみて下さいね。何度も同じようなことを申し上げて恐縮なのですが、プログラミングに入門し、プログラミングを上達させる早道は実際に手を動かしてコードを走らせてみることですからね!

またサンプルコードを参考に「あーでもない、こーでもない」と既存のソースコードを改良したり、機能を付け加えて遊ぶことも非常に効果的なプログラミングの学習法です。是非とも試してみて下さいませ!!!

サンプルコードは簡単ですね。

まずimport文でrandomモジュールを呼び出しておいて、randomモジュールの機能を拝借すればいいのです。具体的には、random.randint(乱数を発生させる整数の範囲)とすればいいのです。

サンプルコードの場合は実行する度に、1~10のいづれかの整数がランダムに表示されますよ。

さて、このrandintだけ知っていれば、Python3超入門【第1回】~【第10回】で学んだ知識で簡単ではありますが占いプログラムを作れます。

尚、占いプログラムはIDLEではなく、テキストエディタで作成し、忘れずに拡張子を(.py)にして、文字コードはUTF-8(ユーティーエフエイト)で保存して下さい。Windowsに付属しているメモ帳などの簡易テキストエディタを利用しても構いませんが、せっかくコーディングするなら支援機能満載のテキストエディタを利用することをお勧めします。以下に候補を挙げておきますね。

当サイト一押し!Python3と相性のいいテキストエディタ一覧

おまけ:Atomエディタの使い方の基礎

インストールが完了したら、上部のメニューバーから、Windows環境の方は[Setting]を、MAC環境の方はATOMメニューから[Prefereces・・・]を選択し、[Setting]画面を開きます。次に[+install]を選択すると、[install Packages]が開くので、そこの検索ボックスから以下の2つのパッケージをインストールして下さい。

  • japanese-menu
  • autocomplete-python

とりあえず、この2つのパッケージをATOMに入れておけば快適にPythonプログラムが書けます。

で、.pyの拡張子、文字コードUTF-8で保存したら、コマンドプロンプトなどのターミナルで、カレントフォルダに移動し、python filename.pyと入力すればPythonのスクリプトファイルを実行できます。MACの場合はターミナルで、
Python3 filename.pyと入力すればOKです。

尚Windowsのコマンドプロンプトの場合、カレントフォルダへの移動は、cd フォルダのパスで指定します。MACのターミナルでもカレントフォルダへの移動はcd フォルダのパスでOKです。

ちなみにフォルダ移動はCドライブ直下に、Pythonとかpyといった名前のフォルダを作成しておいて、そこにPythonのソースコードを置いておくと便利です。なぜなら、cdコマンドの後に長ったらしいファイルパスを入力せずに済むからです。

それでは早速、簡易占いプログラムのコードを見ていきましょう。

まず最初に2つの関数を定義しています。

1つ目の関数はnumber_input()、2つめの関数はjudgment()です。それぞれ順番に説明しますね。

number_input()関数を作ったのは、もし数値入力を何度も求めることになると、そのたびにわざわざ、input()関数で文字列型の数値を受け取って、その数値が本当に文字ではなく数値なのかを判定して、その上で、int()関数で数値に変換するという処理を何度も書きたくないからです。

そう忘れてはいけない!input()関数の戻り値は必ず文字列型でしたね。例え100と入力しても”100″という文字列型の数値が返ってくるのです。しかし、isdigit()関数はとっても有能で、文字列型の”100″でもそれが数字の形をしていれば、それは数値であると判断してくれるんでしたね。

で、int(“100”)とすると、その戻り値は純粋な整数としての100でした。でもint(“apple”)とするとエラーが起きてプログラムが止まってしまいます。そこで事前に、isdigit()で数値かどうかチェックし、数値ならint()で整数値に変換して返します。

もし数値でないなら、エラーとして0を返します。

お次はjudgment()関数です。この関数は単純明快です。ただ単に、1から9の乱数を発生させて、それがユーザーが入力した値と同じだった場合、ユーザーが入力した値よりも大きかった場合、ユーザーが入力した場合よりも小さかった場合に分けて、占い結果のメッセージを画面に表示するだけですね。

で、何回ユーザーが入力ミスするかは不明なので、あえて意図的にwhile(True)で無限ループを作ります。そして変数omikujiにユーザーからの入力をnumber_input関数を利用して、受け取ります。

number_input()関数はエラーならば0を返しますから、まず0以外でないといけません。またユーザーに1から9の数値の入力を求めているので、omikujiは0より大きく、10より小さくなければなりません。

これら3つの条件をandでつないでいるだけです。そしてこの3つの条件を全てクリアできたら、占いをはじめる旨のメッセージを表示し、さらにjudgment()関数にomikujiを渡して、最終的な占い結果を画面に表示します。

ここまでやったらプログラムの目的は果たしたので、breakでwhileループを抜け、プログラムを終了します。

逆に、omikujiの値が、1~9のいづれにも該当しない場合はelse以下でエラーメッセージを表示し、もう1回、whileループをやり直す形になります。

これで占いプログラムの解説は終わりにしたいと思います。占いプログラムのコードがどうしても理解できない場合は、メールで質問して下さいね。

Python3のファイル入出力

まずはテキストファイルに文字列を保存する基本的なコードから理解しましょう。

ファイルを読み書きするには、まずはPythonからファイルを開かないと話がはじまりません。

open(ファイル名, モード)関数を実行するとファイルオブジェクトを返します。

例:file_object = open(‘test.txt’, ‘wt’)

上記の例のwtはファイルを開く際のモードを意味します。

モードには以下のような種類があります。

モードの1文字目

モード 意味
r 読み出し。
w 書き込み。指定したファイル名が存在しない場合はそのファイルを新規作成した上で書き込みする。

またファイルが既に存在している場合には上書きされる。

x 書き込み。但し、指定したファイルが存在しない場合のみ使える。
a 書き込み。ファイルが既に存在する場合は、そのファイルの末尾に追記する。

モードの2文字目

モード 意味
t テキストを意味する。
b バイナリを意味する。

従って、例えば「’wt’」と指定すると、ファイルを新規作成か若しくは上書きする。そしてそれはテキストファイルであることを意味する。ってな感じです。

では実際にテキストファイルを新規作成し、そこに文章を保存する簡単なコードを見てみましょう。

str=”’こんにちは!
筆者の鹿丸です!
Python3の入門記事を書いています”’

このように”’で囲むことで複数行に渡る文章を1つの変数にセットすることができます。

file = open(‘test.txt’, ‘wt’)で、新規作成または上書きのテキストモードで、text.txtを開きます。このopen()関数はファイルオブジェクトを返すので、変数fileにはtest.txtのファイルオブジェクトが格納されます。

尚「オブジェクト」については、次の解説以降で解説しますので、今は分からなくてだいじょうぶですよ。

で、flie.write(str)とすることで、ファイルオブジェクトにstrにセットされている文字列が保存されます。

すなわち、test.txtにstrの中身が保存されます。

最後に一度開いたファイルオブジェクトは必ずクローズするようにします。

とまあ、???となる部分もあるかもしれませんが、もう少し先に進めば完全理解できるはずです。

でも、細かい意味は分からなくても、Pythonスクリプトからテキストファイルを生成し、そこに好きな文字列を書き込むのは簡単だなと思いませんか?

今回はPython3におけるファイル入出力のさわりだけ、簡単に紹介しました。いづれ必ず、かなり詳しくファイル入出力を説明いたしますので、今後とも当サイトをよろしくお願い申し上げます。

【関連記事】

あわせて読みたい