Python を使用して入力速度と精度をテストする

Python を使用して入力速度と精度をテストする

平均的なタイピング速度は、1 分間に約 40 語です。仕事で生産性を高めたい場合は、少なくとも 1 分間に 65 ~ 70 ワードを入力することを目標にする必要があります。タイピング速度を上げると効率が向上し、データ入力、コピーライティング、転記、管理の役割などのタスクが促進されます。

タイピング スキルをテストするために、Python を使用して簡単なタイピング テスト アプリケーションを作成できます。これを使用すると、正確な結果が得られ、中毒性のある習慣を身につけて、時間の経過とともに改善することができます.

Tkinter と Random モジュール

タイピング テスト ゲームを開発するには、 tkinterモジュールとrandomモジュールを使用します。Tkinter を使用すると、デスクトップ アプリケーションを作成できます。ボタン、ラベル、テキスト ボックス、レイアウト マネージャーなどのさまざまなウィジェットが用意されているため、手間をかけずにアプリケーションを簡単に開発できます。

これらとは別に、便利なライブラリ、キャンバス オブジェクト、および HTML/XML/PDF パーサーが付属しています。Tkinter をシステムにインストールするには、ターミナルを開いて以下を実行します。

pip install tkinter

Random モジュールには、乱数を生成するための関数のコレクションがあります。これらのルーチンを使用して、シャッフルされたシーケンス、ゲームの動き、および疑似乱数整数を生成できます。その一般的な用途には、サイコロのロールのシミュレーション、リストのシャッフル、ランダム パスワード ジェネレーター、ハンド クリケットや数字当てなどのゲームが含まれます。

Python を使用してタイピング テスト アプリを作成する方法

次の手順に従って、Python の Tkinter および Random モジュールを使用してタイピング テスト アプリケーションを構築します。

Tkinter と Random モジュールをインポートすることから始めます。Tkinter インスタンスを初期化し、ルート ウィンドウを表示します。ウィンドウのサイズ、タイトル、および背景色をピクセル単位で設定します。

from tkinter import *
import random
from tkinter import messagebox

Mainscreen = Tk()
Mainscreen.geometry('1000x600')
Mainscreen.title('MakeUseOf Typing Game')
Mainscreen.config(bg="aqua")

簡単に参照できるように、GitHub リポジトリから単語のリストをダウンロードし、Python スクリプトと同じフォルダーに配置します。テキスト ファイルの内容を読み取り、split() 関数を使用して各単語をリストに格納します。score、missed、および count1 変数を 0 に初期化し、time 変数を 60 に初期化します。

file1 = open('words.txt', 'r')
words = file1.read().split()
score = missed = count1 = 0
time = 60

上記のグローバル変数を参照するgiventime()という名前の関数を定義します。残り時間がゼロより大きい場合は、1 だけ減らして timercount ラベル (コードの後半で宣言) に表示します。after()関数を使用して、1,000 ミリ秒 (1 秒) の遅延後に giventime() 関数をコールバックします。

時間がオーバーした場合、startlabel の内容を Game Over に変更し、同時に gameinstruction ラベルにスコアを表示します。対応する変数をformat()関数に渡して、ヒット、ミス、および合計スコアを表示します。

def giventime():
    global time, score, missed

    if time > 0:
        time -= 1
        timercount.configure(text=time)
        timercount.after(1000, giventime)
    else:
        startlabel.configure(text='Game Over!')
        gameinstruction.configure(text='Hit = {} | Miss = {} | Total Score = {}'.format(score, missed, score - missed))

タイトルとメッセージをaskokcancel()関数に渡します。ダイアログ ボックスで受け取った応答が true と評価された場合は、exit()関数を使用してアプリケーションを停止します。

        rr = messagebox.askokcancel('Game Over!', 'Press Ok to Exit')

        if rr == True:
            exit()

event を入力引数として取るgame()という名前の関数を定義します。グローバル変数を参照します。時間変数が 60 の場合、giventime() 関数を実行してカウントダウンを開始します。ゲームの進行中に、configure() 関数を使用して単語を入力した後、startlabel を Continue に変更し、gameinstruction ラベルを Enter に変更します。

def game(event):
    global score, missed

    if time == 60:
        giventime()


    startlabel.configure(text='Continue..')
    gameinstruction.configure(text='Hit Enter After Typing The Word')

get()関数を使用して wordentry に入力された単語を取得し、画面に表示されている単語と等しいかどうかを確認します。はいの場合は、スコアを増やしてスコア ラベルに反映します。それ以外の場合は、欠落した変数を 1 つ増やします。

単語リストの項目を並べ替え、最初の要素を表示します。wordentry ウィジェットのゼロから最後のインデックスまでのdelete()関数を使用して、コンテンツをクリアします。

    if wordentry.get() == labelforward['text']:
        score += 1
        scorelabelcount.configure(text=score)
    else:
        missed += 1

    random.shuffle(words)
    labelforward.configure(text=words[0])
    wordentry.delete(0, END)

ラベル ウィジェットを使用して、startlabel、labelforward、scorelabel、scorelabelcount、labelfortimer、timercount、および gameinstruction を設定します。ラベル ウィジェットは、配置先の親ウィンドウ、表示するテキスト、フォントの種類、サイズ、色、スタイル、およびラベルの背景色を取り込みます。

X 座標と Y 座標をplace()メソッドに渡して、ラベルを特定の位置に整理します。

startlabel = Label(Mainscreen,text='Typing Game',font=('arial',30,'italic bold'),bg='black',fg='white')
startlabel.place(x=375, y=50)

labelforward = Label(Mainscreen,text=' ',font=('arial',45,'italic bold'),fg='green')
labelforward.place(x=350, y=240)

scorelabel = Label(Mainscreen,text='Your Score:',font=('arial',25,'italic bold'),fg='maroon')
scorelabel.place(x=110, y=100)

scorelabelcount = Label(Mainscreen,text=score,font=('arial',25,'italic bold'),fg='purple')
scorelabelcount.place(x=250, y=180)

labelfortimer = Label(Mainscreen,text='Time Left:',font=('arial',25,'italic bold'),fg='maroon')
labelfortimer.place(x=700, y=100)

timercount = Label(Mainscreen,text=time,font=('arial',25,'italic bold'),fg='purple')
timercount.place(x=700, y=180)

gameinstruction = Label(Mainscreen,text='Hit Enter After Typing The Word',font=('arial',25,'italic bold'),fg='grey')
gameinstruction.place(x=250, y=500)

入力した単語を受け入れるエントリ ウィジェットを定義します。配置する親ウィンドウ、フォントの種類、サイズ、スタイル、境界線のサイズ、両端揃えのプロパティを設定します。place() メソッドを使用してエントリ ウィジェットを配置し、focus_set()メソッドを使用して入力用のエントリ ボックスをアクティブにします。

wordentry = Entry(Mainscreen, font=('arial',25,'italic bold'), bd=10, justify='center')
wordentry.place(x=350, y=330)
wordentry.focus_set()

重要なステップは、Enter キーを Tkinter ウィンドウのイベントにバインドすることです。そうすることで、プレイヤーがEnter キーを押したときに特定の機能が実行されるようになります。これを実現するには、<Return> 文字列と game() 関数をパラメーターとしてbind()関数に渡します。mainloop ()関数は、Tkinter イベント ループを実行し、ウィンドウを閉じるまでイベント (ボタンの押下など) をリッスンするように Python に指示します。

Mainscreen.bind('<Return>', game)
mainloop()

すべてのコードをまとめて実行し、すぐにタイピング テスト ゲームをプレイできます。

Python タイピング テスト アプリの出力

上記のプログラムを実行すると、幅 1,000 ピクセル、高さ 600 ピクセルのウィンドウが表示され、背景色は水色、スコアボード、カウントダウン タイマー、ゲーム開始の指示が表示されます。

タイピング ゲーム Python 開始画面

Enter キーを押すとゲームが開始され、正解ごとにプログラムがスコアを 1 増やします。

タイピング ゲーム Python 進行中画面

時間が終わると、プログラムは最終スコアと、ゲームを終了するためのダイアログ ボックスを表示します。

タイピング ゲーム パイソン ゲーム オーバー スクリーン

初心者のための Tkinter GUI のアイデア

Tkinter は非常に強力なツールであり、魅力的で堅牢なシンプルなアプリケーションから完全に機能するアプリケーションを構築するために使用できます。初心者でも Tkinter を使用できます。ビルドできるサンプル プロジェクトには、クイズ ゲーム、アドレス帳、To Do リスト、または画像ビューアーなどがあります。

Tkinter を超えて移行したい場合は、Qt デザイナー、Kivy、Toga、BeeWare などの人気のある代替手段がいくつかあります。これらのフレームワークはすべて用途が広く、クロスプラットフォーム開発をサポートしているため、どのような環境でも問題なくアプリケーションを実行できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です