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数据结构之二叉树的遍历实例
Apr 29 Python
在Python下进行UDP网络编程的教程
Apr 29 Python
将Python的Django框架与认证系统整合的方法
Jul 24 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
python去掉 unicode 字符串前面的u方法
Oct 21 Python
PyQt5实现简单数据标注工具
Mar 18 Python
python单线程下实现多个socket并发过程详解
Jul 27 Python
python实现最大优先队列
Aug 29 Python
python如何从文件读取数据及解析
Sep 19 Python
Python-jenkins模块获取jobs的执行状态操作
May 12 Python
Django通过设置CORS解决跨域问题
Nov 26 Python
python中的plt.cm.Paired用法说明
May 31 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
php+mysql事务rollback&amp;commit示例
2010/02/08 PHP
PHP file_exists问题杂谈
2012/05/07 PHP
php中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
ECMAScript6 新特性范例大全
2017/03/24 Javascript
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
python中self原理实例分析
2015/04/30 Python
Python读取properties配置文件操作示例
2018/03/29 Python
python去除扩展名的实例讲解
2018/04/23 Python
Python3中详解fabfile的编写
2018/06/24 Python
利用Python半自动化生成Nessus报告的方法
2019/03/19 Python
django的auth认证,authenticate和装饰器功能详解
2019/07/25 Python
Django 实现前端图片压缩功能的方法
2019/08/07 Python
Python守护进程实现过程详解
2020/02/10 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
详解python 内存优化
2020/08/17 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
大学生的网络创业计划书
2013/12/26 职场文书
外企办公室竞聘演讲稿
2013/12/29 职场文书
生物制药自我鉴定
2014/01/25 职场文书
运动会跳远广播稿
2014/02/04 职场文书
服装设计专业自荐信
2014/06/17 职场文书
宿舍标语大全
2014/06/19 职场文书
购房委托书
2014/10/15 职场文书
优秀班集体事迹材料
2014/12/25 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书
Redis主从复制操作和配置详情
2022/09/23 Redis