Python 으로 타자 속도 측정 도 구 를 실현 하여 당신 의 손 속 도 를 측정 합 니 다.

프로그램 해독
이번 프로그램 에서 우리 가 사용 하 는 python 라 이브 러 리 는 완전히 python 의 내장 라 이브 러 리 입 니 다.그 중에서 인터페이스의 제작 은 tkinter 를 이용 하여 제작 합 니 다.핵심 프로그램 은 세 부분 으로 나 눌 수 있 는데 각각 다음 과 같다.
텍스트 표시
텍스트 입력 검사
결과 계산 및 표시
2.텍스트 내용 의 표시
프로그램 초기 실행 단계 와'텍스트 전환'단 추 를 누 르 면 소프트웨어 인터페이스 에 텍스트 를 표시 해 야 합 니 다.프로그램 은 다음 그림 과 같 습 니 다.

프로그램 에서 self.Reset 함수 의 역할 은 인터페이스의 내용 을 모두 리 셋 하고 초기 값 으로 설정 하 는 것 입 니 다.화면 에서'리 셋'단 추 를 누 르 거나 프로그램 을 처음 실행 할 때 self.Reset 함 수 를 호출 합 니 다.그 효 과 는 다음 그림 과 같 습 니 다.

비교 텍스트 의 표 시 는 self.getSentence 함 수 를 호출 하여 이 루어 집 니 다.프로그램 이 로 컬 sentences.txt 텍스트 를 읽 은 후에 모든 텍스트 내용 을 읽 습 니 다.그 중에서 모든 줄 은 독립 된 문장 입 니 다.
random 라 이브 러 리 의 choice 함 수 를 통 해 무 작위 로 문장 을 선택 하고 인터페이스 에 표시 합 니 다."텍스트 전환"단 추 를 누 르 면 인터페이스 에서 텍스트 를 바 꿀 수 있 습 니 다.아래 그림 과 같 습 니 다.

3.텍스트 입력 검사
인터페이스 에 텍스트 를 표시 한 후,다음은 아래 입력 상자 에서 위의 텍스트 내용 을 베껴 쓰 는 것 입 니 다.이 텍스트 의 내용 은 tkinter 라 이브 러 리 의 StringVar 대상 을 통 해 추적 합 니 다.프로그램 은 다음 그림 과 같 습 니 다.


텍스트 를 입력 할 때 StringVar 대상 의 trace 함 수 를 통 해 실시 간 으로 텍스트 를 추적 하고 self.check 함 수 를 실행 합 니 다.self.check 함 수 는 텍스트 를 입력 하기 시작 할 때 self.start 를 설정 하 는 역할 을 합 니 다.time 텍스트 입력 시간 입 니 다.
텍스트 의 길이 와 보 여 주 는 텍스트 의 길이 가 일치 할 때 프로그램 은 self.result 함 수 를 자동 으로 호출 하여 결 과 를 계산 하고 표시 합 니 다.그 효 과 는 아래 그림 과 같다.

4.결과 계산 과 표시
타자 속도 에 대한 계산 과 표 시 는 self.result 함 수 를 호출 하여 이 루어 집 니 다.그 프로그램 은 다음 그림 과 같 습 니 다.

프로그램 은 사용자 가 입력 한 텍스트 내용 을 가 져 온 다음 에 사용자 의 입력 텍스트 와 정확 한 텍스트 간 의 일치 프로그램 을 계산 하여 타자 의 정확 도 를 계산 합 니 다.사용자 의 타자 계산 시간 을 계산 하여 사용자 의 타자 속 도 를 계산 하고 인터페이스 에 표시 합 니 다.효 과 는 다음 그림 과 같 습 니 다.

전체 코드
더 이상 말 하지 않 고 마지막 에 하 드 코드 를 직접 올 립 니 다.(주의:sentences.txt 파일 을 만들어 같은 폴 더 에 넣 어야 합 니 다)

import time
from random import choice
from tkinter import Tk, Label, CENTER, LEFT, StringVar, Entry,Button,DISABLED, END,NORMAL
 
class typeSpeed(object):
    def __init__(self):
        self.start_time = 0
        self.sentence_words_num = 0
        self.sentence = ""
        self.root = Tk()
        self.root.geometry("900x450+300+100")
        self.root.title("Python    ")
        self.root.config(bg="#FFFF00")
 
        Label(self.root, text="       ", anchor=CENTER, font=(
            "times new roman", 50, "bold"), bg="#00154D", fg="#F2BC90").place(x=200, y=30)
 
        self.sentence_label = Label(self.root, text="           ",
                                       wraplength=400, anchor=CENTER, font=("  ", 15, "bold"), bg="#00154D", fg="#ffffff", width=40, justify=LEFT)
        self.sentence_label.place(x=200, y=150)
        self.text = StringVar()
        self.text.trace("w", lambda name, index, mode, text=self.text: self.check(text))
        self.input_entry = Entry(self.root, font=("  ", 15, "bold"),
                                    width=40, textvariable=self.text)
        self.input_entry.place(x=200, y=250)
 
        reset_button = Button(self.root, text="  ", font=(
            "  ", 18, "bold"), width=12, bg="#808080", command=self.Reset)
        reset_button.place(x=120, y=320)
        changetext_button = Button(self.root, text="    ", font=(
            "  ", 18, "bold"), width=12, bg="#808080", command=self.getSentence)
        changetext_button.place(x=360, y=320)
        result_button = Button(self.root, text="  ", font=(
            "  ", 18, "bold"), width=12, bg="#808080", command=self.result)
        result_button.place(x=600, y=320)
 
        self.speed_label = Label(self.root, text="  : 00     ", font=(
            "  ", 15, "bold"), bg="#f28500", fg="#ffffff")
        self.speed_label.place(x=120, y=380)
        self.accu_label = Label(self.root, text="   : 00%", font=(
            "  ", 15, "bold"), bg="#f28500", fg="#ffffff")
        self.accu_label.place(x=380, y=380)
        self.time_label = Label(self.root, text="  : 0  ", font=(
            "  ", 15, "bold"), bg="#f28500", fg="#ffffff")
        self.time_label.place(x=620, y=380)
 
        self.getSentence()
        self.root.mainloop()
 
    def Reset(self):
        self.input_entry.config(state=NORMAL)
        self.input_entry.delete(0, END)
        self.start_time = 0
 
        self.speed_label.config(text="  : 00    ")
        self.accu_label.config(text="   : 00%")
        self.time_label.config(text="  : 0  ")
 
    def getSentence(self):
        self.Reset()
        with open("./sentences.txt", "r", encoding="utf-8") as f:
            sentences = f.readlines()
            self.sentence = choice(sentences).rstrip()
            self.sentence_label.config(text=self.sentence)
            self.sentence_words_num = len(self.sentence)
 
    def result(self):
        duration = round(time.time() - self.start_time)
        input_text = self.text.get()
        wpm = round((len(input_text)/duration)*60)
        count = 0
        for index, char in enumerate(input_text):
            if self.sentence[index] == char:
                count += 1
        accu = round((count/self.sentence_words_num)*100)
        self.speed_label.config(text="  : {}     ".format(wpm))
        self.accu_label.config(text="   : {}%".format(accu))
        self.time_label.config(text="  : {}  ".format(duration))
 
 
    def check(self, text):
        if self.start_time == 0 and len(text.get()) == 1:
            self.start_time = time.time()
        elif len(text.get()) == self.sentence_words_num:
            self.input_entry.config(state=DISABLED)
            self.result()
 
 
if __name__ == '__main__':
파 이 썬 으로 타자 테스트 도 구 를 구현 하여 타자 속 도 를 측정 하 는 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 타자 테스트 기 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기