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中time模块和datetime模块的用法示例
Feb 28 Python
python简单实现刷新智联简历
Mar 30 Python
Python实现的摇骰子猜大小功能小游戏示例
Dec 18 Python
Python中函数参数调用方式分析
Aug 09 Python
在python中按照特定顺序访问字典的方法详解
Dec 14 Python
Python如何把多个PDF文件合并代码实例
Feb 13 Python
python词云库wordcloud的使用方法与实例详解
Feb 17 Python
使用 Python 在京东上抢口罩的思路详解
Feb 27 Python
python3.7 openpyxl 在excel单元格中写入数据实例
Sep 01 Python
python 常用日期处理-- datetime 模块的使用
Sep 02 Python
python图片合成的示例
Nov 09 Python
pytorch 如何使用amp进行混合精度训练
May 24 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 zlib扩展实现页面GZIP压缩输出
2010/06/17 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
php微信开发之图片回复功能
2018/06/14 PHP
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
2013/01/16 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
jQuery使用post方法提交数据实例
2015/03/25 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
2019/08/15 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
对python中的pop函数和append函数详解
2018/05/04 Python
python自动生成model文件过程详解
2019/11/02 Python
聊聊python中的异常嵌套
2020/09/01 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
最新自我评价范文
2013/11/16 职场文书
怎样客观的做好自我评价
2013/12/28 职场文书
运动会邀请函范文
2014/01/31 职场文书
高中毕业典礼演讲稿
2014/09/09 职场文书
2014年财务经理工作总结
2014/12/08 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
党员个人承诺书
2015/04/27 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记