はじめに
今回の記事は、実際にプログラムを作成する実践編になります。
これまで学習した部分を生かしながら、つまずきやすい部分(実際に筆者がつまずいた部分)を中心に複数回にわたって解説していきます。細かい文法というよりは、初歩的なプログラムを作成するうえでの考え方などを中心に取り扱います。
もくじ
- 概要 (はじめに)
- 関数にどんな値やデータが必要?
- まずは1つ作ってみる! ~ランダムに文字列を表示する関数~
- データを読み込んでランダムに表示させたい どんなパターンが考えられる?
- pythonの便利機能「モジュール」を使おう 使い過ぎに注意!
- 読み込むためのテキストファイルを作ろう
- 実際に書いてみよう
- まとめ
関数にどんな値やデータが必要?
前回の【第8回】タッチタイピングを作ろう①では、作りたいプログラムの仕様と、プログラム全体の大まかな流れについて決定しました。今回はプログラムの部品である関数をどのように作っていくか、実際にコードを書きながら説明していきます。
今回作成する「タッチタイピング」はどんな流れで、どんな処理があったか確認してみます。
前回解説したように、このうち
①ランダムで文字列が表示される
②ランダムに表示された文字列と入力した文字列の一致率が表示される
③入力にかかった時間が表示される
の処理は関数としてひとまとめにできそうです。関数としてひとまとめにする場合も、関数にする必要がない簡単な処理の場合も、どんな値やデータが必要になりそうか事前に考えてみるとスムーズに書くことができます。
まずは1つ作ってみよう~①ランダムに文字列を表示する関数~
今回は、①のランダムに文字列を表示する関数を作っていきます(次回以降は今回の流れをふまえて残り2つの処理について解説します)
・文字列をランダムに表示させたい どんなパターンが考えられる?
プログラムをスタートすると、まずランダムな文字列が表示されます。
ランダムに文字列を表示させるとなると、
①リストに入ったたくさんの文字のなかからx個ランダムに選んで、文字列をつくる
②別のファイルにたくさんの文字列が書いてあり、それのどれかひとつをランダムに表示させる
などいろいろなパターンが考えられます。今回は②の方法を採用しますが、練習のために①でも書いてみたい!という方はぜひ挑戦してみてください。
・pythonの便利機能「モジュール」を使おう 使い過ぎに注意!
②では別のファイルから、ランダムに1行を選んで表示させますが、「別のファイルにどうやってアクセスする!?」と思うかもしれません。今回使うpythonには、実は便利機能がたくさん搭載されています。これをモジュールといいます。
便利機能を使うために、モジュールをインポートします。インポートというのは、便利機能のなかでも今回使うものだけ引っ張ってくるイメージです。
今回は「ランダムに選ぶ」機能として import random と、
「ファイルを開く」機能として import os を書きます。
これによって、python内で便利機能が使えるようになりました。
・読み込むためのテキストファイルを作ろう
次に、読み込むためのテキストファイルを作ります。ランダムで表示させたい文字列をここに複数行書いておきます。あとで1行ごとに読み込むので、改行して文字列を書きます。また、読み込むさいに支障が出ないよう、空白スペース無しで記述します。
- hoyahoya39
- abcbbca
- touchtypinggogo
- ・・・
- ・・・
今回は「linelist.txt」として保存しておきます
ある程度書き終わったら、このファイルはタッチタイピングプログラムと同じ階層に入れておきます。
読み込むためのファイルが完成したので、さっそくコードを書く作業に移りましょう!
実際に書いてみよう
まずは、関数の引数や戻り値が必要であるか考えてみます。
1行をランダムに読み込むとき、ほかの別の値によって影響を受けるわけではないので、今回引数は必要なさそうです。また、ランダムな文字列は、あとで自分が打ち込んだ文字列と比べるのに必要なため、戻り値として返すことにします。
———————————————————————————————————-
def random_line_loading():#ファイルの1行をランダムで読み込んで、表示する関数
~このなかにランダムに1行を表示する処理を書く~
return random_line #選ばれた1行(文字列)を返す
実際にこれを呼び出す場合、以下のかたちになりそうです。
random_line=random_line_loading()
———————————————————————————————————-
関数の形が決まったらどんどん書いていきます。
ファイルからデータを読み込むとき、
ファイルを開く→ファイルから読み込む→ファイルを閉じる
一連の操作が必要です。ファイルの名前を書けば勝手に読み込んでくれそうな感じがしますが、読み込んだり操作をする場合はファイルを開かないと動きません!また、開いたファイルは必ず閉じるようにします。(ファイルを閉じないとメモリを圧迫したりなど悪影響が出るためです)
——————————————-
f=open(“typing_text.txt”,”r”)#ファイルを開く
~このなかにランダムに1行を表示する処理を書く~
f.close#ファイルを閉じる
——————————————-
ファイルをひらいたら、まずはファイルからすべての行を読み込んでリストにします。
datalist=f.readlines()#ファイルを開いて読み込んだものをdatalistという変数とする
これによって、ファイルに書いてある文字列すべて読み込むことができました。
つぎに、この読み込んだリストのなかからランダムで1行選ぶ記述をしていきます。
random_line=random.choice(datalist) #ランダムで1行選ばれる
print(random_line)
ランダムで選ばれた1行をprintで表示することができます。
このrandom_lineという変数は後ほど使うため、戻り値として返します。
以上で「1行をランダムで読み込む処理」の関数が完成しました。
完成した関数のまとめ
def random_line_loading(): #1行をランダムで読み込む関数
f=open(“typing_text.txt”,”r”)#ファイルを開く
datalist=f.readlines()#ファイルのデータを1行ずつ読み込んでリストにする
random_line=random.choice(datalist) #リストからランダムで1行選ばれる
print(random_line)#1行を表示する
f.close#ファイルを閉じる
return random_line #1行を返す
まとめ
関数をつくるときは、まず引数や戻り値が必要かどうか考え、実際に呼び出す場合を想定するとスムーズに記述することができます。
プログラミングのさいpythonがもともと備えている便利機能を「モジュール」として読み込む(import)ことで、簡単に記述することができます。しかし初心者の場合、これに頼りすぎると勉強にならない場合も多いため注意が必要です。
次回以降は残りの処理について解説していきます。
ここまで読んでくださってありがとうございました!
コメント