Kiểm tra tốc độ đánh máy và độ chính xác bằng Python

Bạn muốn thử thách bản thân và cải thiện kỹ năng đánh máy không? Nếu có, game GUI được tạo bằng Python dưới đây sẽ giúp bạn.

Game đánh máy

Tốc độ đánh máy trung bình khoảng 40 từ mỗi phút. Nếu muốn làm việc năng suất hơn, bạn nên nhắm tới mục tiêu tối thiểu 65 tới 70 từ mỗi phút. Tăng tốc độ đánh máy sẽ cải thiện độ hiệu quả, từ đó, bạn cũng sẽ tăng tốc hoàn thành các nhiệm vụ như nhập dữ liệu, viết quảng cáo, chuyển ngữ và các vai trò quản trị.

Để kiểm tra kỹ năng đánh máy, bạn có thể xây dựng một app chuyên dụng bằng Python. Sử dụng nó, bạn có thể nhận kết quả chính xác và phát triển một thói quen “gây nghiện” để cải thiện tốc độ gõ phím cũng như chất lượng công việc theo thời gian.

Mô đun Tkinter và Random

Để phát triển game Typing Test, bạn sẽ dùng mô đun tkinter và random. Tkinter cho phép bạn tạo các ứng dụng desktop. Nó cung cấp một loạt widget như button, label, text box và quản lý bố cục. Tất cả giúp bạn phát triển ứng dụng dễ dàng.

Ngoài ra, các mô đun này còn đi kèm với các thư viện hữu ích, đối tượng canvas và trình phân tích cú pháp HTML/XML/PDF. Để cài đặt Tkinter vào hệ thống của bạn, mở terminal và triển khai nó:

pip install tkinter

Mô đun Random có một bộ sưu tập các hàm tạo số ngẫu nhiên. Bạn có thể dùng những đoạn chương trình đó để tạo ra các chuỗi xáo trộn, chuyển động của trò chơi và các số nguyên giả ngẫu nhiên. Một vài trong số mục đích sử dụng phổ biến của nó bao gồm mô phỏng lăn xúc xắc, xáo trộn danh sách, trình quản lý mật khẩu ngẫu nhiên và ở các game như đoán số.

Cách xây dựng app kiểm tra đánh máy bằng Python

Hãy làm theo các bước sau để xây dựng một app kiểm tra đánh máy bằng mô đun Tkinter và Random của Python.

Bắt đầu bằng cách nhập mô đun Tkinter và Random. Khởi chạy phiên bản Tkinter và hiện cửa sổ root. Thiết lập kích thước theo pixel, tiêu đề và màu nền của cửa sổ.

from tkinter import *
import random
from tkinter import messagebox

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

Tải danh sách từ từ repository GitHub và đặt nó vào trong cùng một thư mục dưới dạng tập lệnh Python để tham chiếu dễ dàng. Đọc nội dung của file text và dùng hàm split() để lưu từng từ vào một danh sách. Khởi tạo các biến score, missed và count1 thành zero và biến thời gian là 60.

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

Định nghĩa một hàm giventime() tham chiếu các biến toàn cục đã được nhắc tới ở trên. Nếu thời gian còn lại lớn hơn 0, hãy giảm 1 cho nó và hiện nó trên nhãn bộ đếm thời gian. Dùng hàm after() để gọi lại giventime() sau trì hoãn 1 giây.

Nếu thời gian trôi qua, thay đổi nội dung của startlabel sang Game Over, đồng thời hiện điểm số trên label gameinstruction. Chuyển qua các biến tương ứng sang hàm format() để hiện Hit, Miss và Total Score.

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))

Chuyển tiêu đề và thông báo sang hàm askokcancel(). Nếu phản hồi đã nhận trên box hộp thoại đánh giá là true, dừng ứng dụng dùng hàm exit().

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

        if rr == True:
            exit()

Định nghĩa một hàm mang tên game() lấy sự kiện là một đối số nhập vào. Tham chiếu các biến toàn cục. Nếu biến thời gian bằng 60, chạy hàm giventime() để bắt đầu đếm ngược. Khi đang chạy game, thay đổi startlabel sang Continuegameinstruction để nhấn Enter sau khi gõ từ bằng hàm configure().

def game(event):
    global score, missed

    if time == 60:
        giventime()

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

Truy xuất từ đã nhập trong wordentry bằng hàm get() và kiểm tra xem liệu có bằng từ hiện trên màn hình hay không. Nếu đúng, hãy tăng score và hiện nó trên label score. Nếu không, tăng 1 cho biến bị thiếu.

Sắp xếp lại các mục trong danh sách từ và hiện thành phần đầu tiên. Dùng hàm delete() từ 0 sang index gần nhất trên widget wordentry để làm rõ nội dung.

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)

Đặt startlabel, labelforward, scorelabel, scorelabelcount, labelfortimer, timercount, và gameinstruction bằng widget Label. Widget label lấy trong cửa sổ chính tại nơi bạn muốn đặt nó. Nó sẽ hiện text, kiểu font, kích thước, màu sắc và kiểu cùng với màu nền của label.

Chuyển tọa độ X và Y sang phương thức place() để sắp xếp lại các nhãn theo vị trí cụ thể.

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)

Định nghĩa một mục widget nhập vào, chấp nhận từ bạn gõ. Thiết lập cửa sổ chính bạn muốn đặt nó, loại font, kích thước, kiểu cùng kích thước đường viền và thuộc tính justify. Dùng phương thức place() để xác định vị trí của widget nhập vào và focus_set() để kích hoạt box nhập cho đầu vào.

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

Một bước quan trọng là liên kết phím Enter với một sự kiện trong cửa sổ Tkinter. Làm việc này đảm bảo khi người chơi nhấn Enter, một hàm cụ thể sẽ được thực thi. Để đạt được điều đó, bạn chuyển chuỗi <Return> và hàm game() dưới dạng tham số cho hàm bind(). Hàm mainloop() báo Python chạy vòng lặp sự kiện Tkinter và nghe các hành động (ví dụ nhấn nút bấm) cho tới khi bạn đóng cửa sổ.

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

Đặt tất cả code lại với nhau và chạy code này để chơi game luyện đánh máy.

Đầu ra của app Typing Test bằng Python

Khi chạy chương trình trên, một cửa sổ hiện chiều rộng 1.000 pixel và chiều cao 600 pixel, với nền màu xanh nước biển, một bảng ghi điểm, đồng hồ đếm ngược và một hướng dẫn để bắt đầu chơi game.

Nhấn Enter để bắt đầu game

Khi nhấn Enter, game bắt đầu và trên từng câu trả lời chính xác, chương trình tăng một điểm.

Khi nhấn Enter

Khi thời gian trôi qua, chương trình hiện điểm số cuối cùng với một hộp thoại thoát game.

Kết thúc game

Trên đây là cách tạo app luyện gõ 10 ngón bằng Python. Hi vọng bài viết hữu ích với các bạn.

Thứ Hai, 13/02/2023 10:51
51 👨 518
0 Bình luận
Sắp xếp theo
    ❖ Python