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 正则表达式 概述及常用字符
May 04 Python
Python读写ini文件的方法
May 28 Python
windows下Python实现将pdf文件转化为png格式图片的方法
Jul 21 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
python实现简易动态时钟
Nov 19 Python
详解安装mitmproxy以及遇到的坑和简单用法
Jan 21 Python
python使用Plotly绘图工具绘制水平条形图
Mar 25 Python
Django框架封装外部函数示例
May 28 Python
python 统计文件中的字符串数目示例
Dec 24 Python
python异常处理和日志处理方式
Dec 24 Python
JAVA SWT事件四种写法实例解析
Jun 05 Python
Python远程linux执行命令实现
Nov 11 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
类的另类用法--数据的封装
2006/10/09 PHP
Yii操作数据库的3种方法
2014/03/11 PHP
php简单判断两个字符串是否相等的方法
2015/07/13 PHP
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
2011/12/31 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
2012/11/08 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
js创建数组的简单方法
2016/07/27 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
vue elementUI tree树形控件获取父节点ID的实例
2018/09/12 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
2020/05/27 Javascript
python 多进程通信模块的简单实现
2014/02/20 Python
Python写的贪吃蛇游戏例子
2014/06/16 Python
Python的装饰器用法学习笔记
2016/06/24 Python
python os.path模块常用方法实例详解
2018/09/16 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
Python操作rabbitMQ的示例代码
2019/03/19 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
英文商务邀请信
2014/01/22 职场文书
揠苗助长教学反思
2014/02/04 职场文书
开业主持词
2014/03/21 职场文书
乡镇创先争优活动总结
2014/08/28 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书
Python基础之进程详解
2021/05/21 Python
python接口测试返回数据为字典取值方式
2022/02/12 Python
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL