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的collections模块中的deque双端队列结构
Jul 07 Python
Python实现树莓派WiFi断线自动重连的实例代码
Mar 16 Python
Python实现求解括号匹配问题的方法
Apr 17 Python
python主线程捕获子线程的方法
Jun 17 Python
PyCharm设置SSH远程调试的方法
Jul 17 Python
Anaconda2 5.2.0安装使用图文教程
Sep 19 Python
python3.7 sys模块的具体使用
Jul 22 Python
tensorflow使用指定gpu的方法
Feb 04 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
Feb 26 Python
tensorflow使用CNN分析mnist手写体数字数据集
Jun 17 Python
基于python实现计算两组数据P值
Jul 10 Python
详解python网络进程
Jun 15 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
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
纯js写的分页表格数据为json串
2014/02/18 Javascript
JavaScript中的单引号和双引号报错的解决方法
2014/09/01 Javascript
javascript中的this详解
2014/12/08 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
JavaScript类的继承多种实现方法
2020/05/30 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
2020/07/24 Javascript
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python遍历指定文件及文件夹的方法
2015/05/09 Python
Python字符串格式化
2015/06/15 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
python妙用之编码的转换详解
2017/04/21 Python
Python 含参构造函数实例详解
2017/05/25 Python
对Python3中的input函数详解
2018/04/22 Python
python常用数据重复项处理方法
2019/11/22 Python
HTML5+CSS3网页加载进度条的实现,下载进度条的代码实例
2016/12/30 HTML / CSS
HTML5超文本标记语言的实现方法
2020/09/24 HTML / CSS
日本小田急百货官网:Odakyu
2018/07/19 全球购物
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
生物医学工程专业学生求职信范文分享
2013/12/14 职场文书
高三地理教学反思
2014/01/11 职场文书
小学教师事迹材料
2014/01/13 职场文书
个人现实表现材料
2014/02/04 职场文书
红色电影观后感
2015/06/18 职场文书
爱国主义教育主题班会
2015/08/13 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书