【勉強日記】タッチタイピングを作ろう⑥【第13回】

プログラミング

はじめに

今回の記事は、実際にプログラムを作成する実践編になります。

これまで学習した部分を生かしながら、つまずきやすい部分(実際に筆者がつまずいた部分)を中心に複数回にわたって解説していきます。細かい文法というよりは、初歩的なプログラムを作成するうえでの考え方などを中心に取り扱っていきます。

もくじ

  • はじめに 
  • 前回のおさらい 
  • 作ったプログラム
  • 振り返り 
    • 1 仕様を考えて大まかな流れと計画を立てる
    • 2 部品としての関数を作る
    • 3 タッチタイピング一回分を作る
    • 4 全体のプログラムを作る
    • (5 デバッグで動きを確認する)
  • 作ったプログラムを動かしてみよう!
  • まとめ

前回のおさらい

前回は、作成したプログラムが正しく動くか確かめるデバッグ作業をしました。

今回は、タッチタイピング①~⑤の総ざらいと、実際にプログラムを動かして遊んでみるところまで解説していきます。

作成したプログラム

import random
import os
import difflib
import time


#開始
#ファイルの一行をランダムで読み込む(ファイルがなかった場合エラー)
#一行を表示させる(時間計測開始点)
#ユーザーが入力する
#処理をする(時間計測終了点)(一致率計算・タイピング時間を計算)
#結果を出力する
#もう一度タイピングを行うか尋ねる
#yならタッチタイピングを繰り返す
#nならタッチタイピングを終了してお疲れ様表示
#yとn以外ならもう一度尋ねる


def touch_typing_once(): #タッチタイピング
    
    '''
    ファイルを読み込んでランダムで一行返す
    一行が表示された後の時刻
    ユーザーの入力
    ユーザーが入力し終わったあとの時刻
    一致率を出す
    かかった時間の計算
    結果を表示
    '''
    random_line=random_line_loading() 
    start=time.time() 
    input_lines=user_input() 
    end=time.time() 
    rate=rate_of_concordance(input_lines,random_line) 
    final_time=round(end-start,1) 
    print(f"一致率は{rate}%です")
    print(f"入力にかかった時間は{final_time}秒です") 


def random_line_loading(): #1行をランダムで読み込む関数
    
      f=open("typing_text.txt","r")
      datalist=f.readlines()
      random_line=random.choice(datalist) #ランダムで1行選ばれる
      print(random_line)
      f.close

      return random_line #1行を返す

    
def user_input(): #ユーザーの入力項目を返す関数

    input_lines=input("同じ文字列を入力してください : ")

    return input_lines


def rate_of_concordance(input_lines,random_line): #一致率を計算する関数
   
    precise_rate = difflib.SequenceMatcher(None, input_lines, random_line).ratio()
    rate=round(precise_rate,1)*100
   
    return rate


def main():
 
  if os.path.exists("typing_text.txt"): #読み込むファイルが存在する場合

    touch_typing_once() #1回目の処理

    while True: #2回目以降の処理

      answer=input("もう一度行いますか? y/n :") #もう一度行うかの質問

      if answer =="y": #yの場合タッチタイピングを行って次のループ先頭に戻る
        touch_typing_once() 
        continue

      elif answer =="n": #nの場合ループを抜けて終了
        print("お疲れ様でした!")
        break
    
      elif answer !="n"and"y": #nでもyでもない場合ループ先頭に戻る
        continue

  else: #ファイルが存在しない場合
     print("ファイルがありません")
    

if __name__ =="__main__":
    main() 

振り返り

今回は、実際に作成したプログラムを確認しながら、特に著者がつまったところをポイントにして振り返っていきます。

  • 1 プログラムの仕様を考えて大まかな流れをつくる(タッチタイピングを作ろう①)
  • 2 何度も使いそうな機能は関数にする(タッチタイピングを作ろう②~③)
  • 3 タッチタイピング一回分を作る(タッチタイピングを作ろう④)
  • 4 プログラム全体の流れの処理を作る(タッチタイピングを作ろう④)
  • (5 デバッグで動きを確認する) (タッチタイピングを作ろう⑤)

①プログラムの仕様を考えて大まかな流れと計画を立てる

まず、タッチタイピングプログラムの仕様を考えていきます。どんな機能があるのか?どういう順番で表示されるのか?など、断片的でもいいので挙げていきます。

書き出したら、プログラムの基本構造である順接・条件・ループを思い出しながら、処理の順番にフローチャートを書いてみます。

何度も使いそうな機能は関数にする

フローチャートを書いたら、何度も使いそうな機能は関数にまとめてみます。

ひとつの関数を考えるときは、その関数(処理)にどんなデータや値が必要か考えて引数と戻り値を決めます。関数のなかで細かい処理の記述をしていくときは、pythonであれば「モジュール」を使うと簡単な文で表すことができる場合があります。

③タッチタイピング一回分を作る

これまでに作成した関数を組み合わせて、何度も繰り返すタイピングの一回分の関数を作ります。一回分をまとめておくことで、後でループ処理で繰り返すとき「何を・どのタイミングで」繰り返すか明確になります。

④プログラム全体の流れの処理を作る

続けるか?やめるか?などの条件分岐を追加してプログラム全体の流れをコントロールしていきます。一回目のタッチタイピングが終わったあとwhile文を使って、入力条件によってループをするか・しないかを分岐させます。

⑤デバッグで動きを確認する

正常に動くかどうかをデバッグで確認します。Visual Studio Codeを使用している場合は簡単にデバッグを行うことができます。

作ったプログラムを動かしてみよう!

それでは実際に作成したプログラムを実行して遊んでみましょう!(今回はVisual Studio Codeを使用して動かしていきます)

まずは、ターミナルを開いて、プログラムを書いているファイルが一番右に表示されるのを確認します。(今回は「typing_program」というファイル名にしています)

メニューのターミナル→新しいターミナルを選択

右上のスタートボタンでファイルを実行すると…

ランダムな文字列と入力欄が表示されました!同じ文字列を入力してみると…

文字列の一致率と入力にかかった時間、もう一度行うかどうかの入力欄が表示されました。これでタイピング一回分が完了になります。もう一度行いたいのでyを入力すると

もう一度タイピングが開始され、先ほどとは異なる文字列が表示されました。

yでもnでもない文字を打ち込むと、続けるかどうかの質問文が繰り返されます。nを打ち込むと

お疲れ様でした!の表記が出てプログラムが終了します。

まとめ

初心者向けにプログラムの文法について解説した本などはたくさんありますが、プログラム作成のめどの立て方や、「なぜこのロジック(処理の方法)に至ったのか?」などを教えてくれる教材は意外と少ないため、数回にわたりプログラム作成入門編としてタッチタイピング作成の解説をしました。

今回はPythonを用いてプログラミングをしましたが、基本的な進め方は他のプログラミング言語でも生かせるような構成になっています。python以外の言語を学ぶときの初めての演習として、ぜひタッチタイピングプログラムを作成してみてください。

タッチタイピング作成編はこれにて終了になります。

ここまで読んでくださってありがとうございました!

コメント

タイトルとURLをコピーしました