當(dāng)普通人想要學(xué)習(xí)打字時(shí),他們會(huì)使用諸如Typing master之類(lèi)的軟件 。但是程序員們可以使用他們的知識(shí)來(lái)編寫(xiě)自己的打字導(dǎo)師應(yīng)用。一如既往,Python將會(huì)是最好的選擇,因?yàn)樗子诶斫猓槲覀兊奶囟康奶峁┝撕芏鄮?kù)。下面讓我們來(lái)看一下程序員如何使用Python制作自己的打字導(dǎo)師應(yīng)用程序吧。為了檢查打字速度和準(zhǔn)確性,我們需要記錄擊鍵。為此,我們將使用一個(gè)稱(chēng)為tkinter的python庫(kù)。由于tkinter已從Python 3.4及更高版本內(nèi)置,因此您無(wú)需使用pip進(jìn)行安裝。
這個(gè)應(yīng)用程式如何運(yùn)作?
首先,我們將獲取許多英文字母的數(shù)據(jù)集。然后,我們將從該數(shù)據(jù)集中向用戶(hù)隨機(jī)呈現(xiàn)單詞。用戶(hù)必須輸入這些單詞。如果他成功鍵入一個(gè)單詞,他將得到下一個(gè)單詞。同樣,用戶(hù)將獲得特定的生命。一旦用戶(hù)輸入錯(cuò)誤的字母,他將失去生命。如果他的生活結(jié)束了,比賽就結(jié)束了。而且,基于用戶(hù)鍵入特定單詞所花費(fèi)的時(shí)間以及正確鍵入的字母數(shù)來(lái)計(jì)算分?jǐn)?shù)。
在此項(xiàng)目中使用的英語(yǔ)單詞數(shù)據(jù)集可以在這里找到 。下載此文件并將其存儲(chǔ)在存在python文件的相同位置。該文件包含大約10,000個(gè)英語(yǔ)單詞。我們將從列表中隨機(jī)選擇給定數(shù)量的單詞。對(duì)于分?jǐn)?shù)計(jì)算,每當(dāng)用戶(hù)正確按下一個(gè)字母時(shí),我們就將分?jǐn)?shù)加1。還為每個(gè)單詞分配了時(shí)間限制,該時(shí)間限制是單詞長(zhǎng)度的倍數(shù)。如果用戶(hù)在時(shí)間限制之前輸入單詞,則剩余時(shí)間將添加到得分中。
代碼展示:
import tkinter as tk
import random
from os import system, name
import time
def clear():
if name == 'nt':
_ = system('cls')
else:
_ = system('clear')
index = 0
list_index = 0
list = []
word_count = 10
f = open('words.txt', 'r')
for line in f:
list.append(line.strip())
random.shuffle(list)
list = list[:word_count]
print("---WELCOME TO TYPING TUTOR---")
time.sleep(1)
clear()
print("Total words: ", len(list))
time.sleep(2)
clear()
print("Word "+str(list_index+1)+" out of "+str(word_count)+": "+list[list_index])
start_time = time.time()
end_time = 0
time_multiplier = 2
lives = 3
score = 0
def keypress(event):
global index
global list_index
global list
global lives
global score
global start_time
global end_time
global time_multiplier
word = list[list_index]
if event.char == word[index]:
index = index + 1
score = score + 1
else:
clear()
print("Word " + str(list_index + 1) + " out of " + str(word_count) + ": " + list[list_index])
print("wrong letter!")
lives = lives - 1
print("Lives left: ", lives)
if lives == 0:
print("Game Over!")
print("Final Score: ", score)
root.destroy()
return
if index == len(word):
clear()
print("right!")
index = 0
list_index = list_index + 1
end_time = time.time()
time_taken = int(end_time - start_time)
time_left = time_multiplier * len(word) - time_taken
score = score + time_left
print("time taken: " + str(time_taken) + " out of " + str(time_multiplier*len(word)) + " seconds.")
print("Current score: ", score)
time.sleep(1.5)
start_time = end_time
clear()
if list_index < len(list) and index == 0:
print("Word " + str(list_index + 1) + " out of " + str(word_count) + ": " + list[list_index])
elif list_index == len(list):
clear()
print("Congratulations! you have beaten the game!")
print("Final Score: ", score)
root.destroy()
root = tk.Tk()
root.bind_all('', keypress)
root.withdraw()
root.mainloop()
這段代碼復(fù)制到一個(gè)新的Python文件并將它命名為 app.py。可以使用以下命令設(shè)置游戲中顯示的單詞總數(shù) word_count 變量。當(dāng)前設(shè)置為100。 time_multiplier 變量控制分配給每個(gè)單詞的時(shí)間。當(dāng)前設(shè)置為2。這意味著對(duì)于長(zhǎng)度為5的單詞,時(shí)間限制為5 * 2 = 10秒。lives 變量定義玩家的生命數(shù)量。每當(dāng)玩家錯(cuò)誤地鍵入字母時(shí),生命都會(huì)過(guò)去。
要運(yùn)行此代碼,請(qǐng)打開(kāi)命令提示符,將目錄更改為該python文件的存儲(chǔ)位置,然后鍵入: python app.py
請(qǐng)注意,運(yùn)行此代碼后,命令提示符將不會(huì)保留為活動(dòng)窗口。您不必?fù)?dān)心。只需開(kāi)始輸入顯示的單詞的字母即可。當(dāng)您繼續(xù)正確輸入時(shí),樂(lè)譜將更新,接下來(lái)的單詞將繼續(xù)出現(xiàn)。另外,您實(shí)際上不會(huì)在屏幕上的任何地方看到要鍵入的單詞。您只需要繼續(xù)按正確的鍵即可。每當(dāng)您按下任何不正確的鍵時(shí),都會(huì)扣除生命。
通過(guò)上述介紹,如何使用Python制作自己的打字導(dǎo)師應(yīng)用程序相信大家也已經(jīng)知曉了吧,想了解更多關(guān)于Python的信息,請(qǐng)繼續(xù)關(guān)注中培偉業(yè)。