Python编写打字训练小程序


Posted in Python onSeptember 26, 2019

你眼中的程序猿

Python编写打字训练小程序

别人眼中的程序猿,是什么样子?打字如飞,各种炫酷的页面切换,一个个好似黑客般的网站破解。可现实呢? 二指禅的敲键盘,写一行代码,查半天百度…那么如何能让我们从外表上变得更像一个程序猿呢?当然是训练我们的打字速度了啊!

训练打字

很羡慕那些盲打速度炒鸡快的人,看起来就比较炫酷。但很多IT男打字速度并不快,甚至还有些二指禅的朋友们,太影响装13效果了。那么今天我们就来使用Python写一个打字训练的小工具吧。先来看看使用效果…

Python编写打字训练小程序

我们使用Python内置的GUI模块Tkinter来编写一个打字测试的小工具。点击开始测试,系统随机生成20个字符串,然后用户按照题目进行作答后,点击交卷,系统将对比我们的输入结果,来计算正确率,并使用涂色将系统与用户的答案进行对比。

生成随机数

首先我们需要生成键盘上的字符。当然我们可以0-9,A-Z,a-z,!-)等等的一个个枚举出键盘上的按键。但有没有更快捷的操作呢?你需要了解下string模块。这里介绍下几个string默认提供的内容:

import string
# 列举数字
string.digits
>>> '0123456789'
# 列举小写字母
string.ascii_lowercase
>>> 'abcdefghijklmnopqrstuvwxyz'
# 列举大写字母
string.ascii_uppercase
>>> 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
# 列举所有标点符号
string.punctuation
>>> '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
# 列举所有空白符
string.whitespace
>>> ' \t\n\r\x0b\x0c'
 
string.ascii_letters =
  string.ascii_lowercase + string.ascii_uppercase
string.printable =
  string.ascii_letters + string.digits
  + string.whitespace + string.punctuation

剩余的内容,我们只需要进行相关读写判断即可,整体代码如下:

# -*- coding: utf-8 -*-
# @Author  : 王翔
# @JianShu : 清风Python
# @Date   : 2019/8/25 20:59
# @Software : PyCharm
# @version :Python 3.7.3
# @File   : TypingTest.py
 
from tkinter import *
import random
import string
from datetime import datetime
 
root = Tk()
root.title("Python打字练习题 By:清风Python")
Label(root, text='系统题目:').grid(row=0)
Label(root, text='用户作答:').grid(row=1)
Label(root, text='考试结果:').grid(row=2)
v1 = StringVar()
v2 = StringVar()
v3 = StringVar()
v1.set("点击'开始测试'按钮开始出题")
e1 = Entry(root, text=v1, state='disabled', width=40, font=('宋体', 14))
e2 = Entry(root, textvariable=v2, width=40, font=('宋体', 14))
e3 = Label(root, textvariable=v3, width=40, font=('宋体', 10), foreground='red')
e1.grid(row=0, column=1, padx=10, pady=20)
e2.grid(row=1, column=1, padx=10, pady=20)
e3.grid(row=2, column=1, padx=10, pady=20)
text = Text(root, width=80, height=7)
text.grid(row=4, column=0, columnspan=2, pady=5)
 
 
class TypingTest:
  def __init__(self):
    self.time_list = []
    self.letterNum = 20
    self.letterStr = ''.join(random.sample(string.printable.split(' ')[0], self.letterNum))
    self.examination_paper = ''
 
  def time_calc(self):
    self.time_list.append(datetime.now())
    yield
 
  def create_exam(self):
    text.delete(0.0, END)
    # e3.delete(0, END)
    v1.set(self.letterStr)
    self.time_calc().__next__()
    text.insert(END, "开始:%s \n" % str(self.time_list[-1]))
    user_only1.config(state='active')
 
  def score(self):
    wrong_index = []
    self.time_calc().__next__()
    text.insert(END, "结束:%s\n" % str(self.time_list[-1]))
    use_time = (self.time_list[-1] - self.time_list[-2]).seconds
    self.examination_paper = v2.get()
    if len(self.examination_paper) > self.letterNum:
      v3.set("输入数据有误,作答数大于考题数")
    else:
      right_num = 0
      for z in range(len(self.examination_paper)):
        if self.examination_paper[z] == self.letterStr[z]:
          right_num += 1
        else:
          wrong_index.append(z)
      if right_num == self.letterNum:
        v3.set("完全正确,正确率%.2f%%用时:%s秒" % ((right_num * 1.0) / self.letterNum * 100, use_time))
      else:
        v3.set("正确率%.2f%%用时:%s 秒" % ((right_num * 1.0) / self.letterNum * 100, use_time))
        # e2.delete(0, END)
        text.insert(END, "题目:%s\n" % self.letterStr)
        tag_info = list(map(lambda x: '4.' + str(x + 3), wrong_index))
        text.insert(END, "作答:%s\n" % self.examination_paper)
        for i in range(len(tag_info)):
          text.tag_add("tag1", tag_info[i])
          text.tag_config("tag1", background='red')
          user_only1.config(state='disabled')
 
 
TypingTest = TypingTest()
Button(root, text="开始测试", width=10, command=TypingTest.create_exam).grid(row=3, column=0, sticky=W, padx=30, pady=5)
user_only1 = Button(root, text="交卷", width=10, command=TypingTest.score, state='disable')
user_only1.grid(row=3, column=1, sticky=E, padx=30, pady=5)
 
mainloop()

我们将最终的代码,打包成exe工具,即可脱离python环境,在单独的电脑上执行exe文件玩我们自己的打字练习题了:

Python编写打字训练小程序

总结

以上所述是小编给大家介绍的Python编写打字训练小程序,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python专用方法与迭代机制实例分析
Sep 15 Python
在Python的web框架中中编写日志列表的教程
Apr 30 Python
详解Python中expandtabs()方法的使用
May 18 Python
Python 实现简单的电话本功能
Aug 09 Python
python pandas库中DataFrame对行和列的操作实例讲解
Jun 09 Python
Python设计模式之适配器模式原理与用法详解
Jan 15 Python
Python3实现汉语转换为汉语拼音
Jul 08 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
详解字符串在Python内部是如何省内存的
Feb 03 Python
python数据预处理 :数据抽样解析
Feb 24 Python
Python高并发解决方案实现过程详解
Jul 31 Python
解决pytorch 数据类型报错的问题
Mar 03 Python
Python 如何优雅的将数字转化为时间格式的方法
Sep 26 #Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 #Python
python 模拟创建seafile 目录操作示例
Sep 26 #Python
python RC4加密操作示例【测试可用】
Sep 26 #Python
python使用 __init__初始化操作简单示例
Sep 26 #Python
如何安装2019Pycharm最新版本(详细教程)
Sep 26 #Python
Python命令行参数解析工具 docopt 安装和应用过程详解
Sep 26 #Python
You might like
解析htaccess伪静态的规则
2013/06/18 PHP
给大家分享几个常用的PHP函数
2017/01/15 PHP
JS 统计时间
2021/03/09 Javascript
jQuery JSON的解析方式分享
2011/04/05 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
jQuery选择器总结之常用元素查找方法
2016/08/04 Javascript
轮播图组件js代码
2016/08/08 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
简单介绍Python中的几种数据类型
2016/01/02 Python
Python ldap实现登录实例代码
2016/09/30 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
django教程如何自学
2020/07/31 Python
详解CSS3选择器:nth-child和:nth-of-type之间的差异
2017/09/18 HTML / CSS
Parfume Klik丹麦:香水网上商店
2018/07/10 全球购物
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
岗位工作说明书
2014/07/29 职场文书
学习张丽丽心得体会
2014/09/03 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
志愿者个人总结
2015/03/03 职场文书
人事聘任通知
2015/04/21 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers
SpringBoot整合JWT的入门指南
2021/06/29 Java/Android
Python requests用法和django后台处理详解
2022/03/19 Python