你眼中的程序猿

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

训练打字

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

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

生成随机数

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

  1. import string
  2. # 列举数字
  3. string.digits
  4. >>> '0123456789'
  5. # 列举小写字母
  6. string.ascii_lowercase
  7. >>> 'abcdefghijklmnopqrstuvwxyz'
  8. # 列举大写字母
  9. string.ascii_uppercase
  10. >>> 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  11. # 列举所有标点符号
  12. string.punctuation
  13. >>> '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
  14. # 列举所有空白符
  15. string.whitespace
  16. >>> ' \t\n\r\x0b\x0c'
  17. string.ascii_letters =
  18. string.ascii_lowercase + string.ascii_uppercase
  19. string.printable =
  20. string.ascii_letters + string.digits
  21. + string.whitespace + string.punctuation

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

  1. # -*- coding: utf-8 -*-
  2. # @Author : 王翔
  3. # @JianShu : 清风Python
  4. # @Date : 2019/8/25 20:59
  5. # @Software : PyCharm
  6. # @version :Python 3.7.3
  7. # @File : TypingTest.py
  8. from tkinter import *
  9. import random
  10. import string
  11. from datetime import datetime
  12. root = Tk()
  13. root.title("Python打字练习题 By:清风Python")
  14. Label(root, text='系统题目:').grid(row=0)
  15. Label(root, text='用户作答:').grid(row=1)
  16. Label(root, text='考试结果:').grid(row=2)
  17. v1 = StringVar()
  18. v2 = StringVar()
  19. v3 = StringVar()
  20. v1.set("点击'开始测试'按钮开始出题")
  21. e1 = Entry(root, text=v1, state='disabled', width=40, font=('宋体', 14))
  22. e2 = Entry(root, textvariable=v2, width=40, font=('宋体', 14))
  23. e3 = Label(root, textvariable=v3, width=40, font=('宋体', 10), foreground='red')
  24. e1.grid(row=0, column=1, padx=10, pady=20)
  25. e2.grid(row=1, column=1, padx=10, pady=20)
  26. e3.grid(row=2, column=1, padx=10, pady=20)
  27. text = Text(root, width=80, height=7)
  28. text.grid(row=4, column=0, columnspan=2, pady=5)
  29. class TypingTest:
  30. def __init__(self):
  31. self.time_list = []
  32. self.letterNum = 20
  33. self.letterStr = ''.join(random.sample(string.printable.split(' ')[0], self.letterNum))
  34. self.examination_paper = ''
  35. def time_calc(self):
  36. self.time_list.append(datetime.now())
  37. yield
  38. def create_exam(self):
  39. text.delete(0.0, END)
  40. # e3.delete(0, END)
  41. v1.set(self.letterStr)
  42. self.time_calc().__next__()
  43. text.insert(END, "开始:%s \n" % str(self.time_list[-1]))
  44. user_only1.config(state='active')
  45. def score(self):
  46. wrong_index = []
  47. self.time_calc().__next__()
  48. text.insert(END, "结束:%s\n" % str(self.time_list[-1]))
  49. use_time = (self.time_list[-1] - self.time_list[-2]).seconds
  50. self.examination_paper = v2.get()
  51. if len(self.examination_paper) > self.letterNum:
  52. v3.set("输入数据有误,作答数大于考题数")
  53. else:
  54. right_num = 0
  55. for z in range(len(self.examination_paper)):
  56. if self.examination_paper[z] == self.letterStr[z]:
  57. right_num += 1
  58. else:
  59. wrong_index.append(z)
  60. if right_num == self.letterNum:
  61. v3.set("完全正确,正确率%.2f%%用时:%s秒" % ((right_num * 1.0) / self.letterNum * 100, use_time))
  62. else:
  63. v3.set("正确率%.2f%%用时:%s 秒" % ((right_num * 1.0) / self.letterNum * 100, use_time))
  64. # e2.delete(0, END)
  65. text.insert(END, "题目:%s\n" % self.letterStr)
  66. tag_info = list(map(lambda x: '4.' + str(x + 3), wrong_index))
  67. text.insert(END, "作答:%s\n" % self.examination_paper)
  68. for i in range(len(tag_info)):
  69. text.tag_add("tag1", tag_info[i])
  70. text.tag_config("tag1", background='red')
  71. user_only1.config(state='disabled')
  72. TypingTest = TypingTest()
  73. Button(root, text="开始测试", width=10, command=TypingTest.create_exam).grid(row=3, column=0, sticky=W, padx=30, pady=5)
  74. user_only1 = Button(root, text="交卷", width=10, command=TypingTest.score, state='disable')
  75. user_only1.grid(row=3, column=1, sticky=E, padx=30, pady=5)
  76. mainloop()

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

The End

OK,今天的内容就到这里,如果觉得内容对你有所帮助,欢迎点击文章右下角的“在看”。 期待你关注我的公众号清风Python,如果觉得不错,希望能动动手指转发给你身边的朋友们。

作者:清风Python

使用Python编写打字训练小程序的更多相关文章

  1. 使用Python编写打字训练小程序【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/devcloud/article/detail ...

  2. Python编写的记事本小程序

    用Python中的Tkinter模块写的一个简单的记事本程序,Python2.x和Python3.x的许多内置函数有所改变,所以以下分为Python2.x和Python3.x版本. 一.效果展示: 二 ...

  3. Python学习之旅:用Python制作一个打字训练小工具

    一.写在前面 说道程序员,你会想到什么呢?有人认为程序员象征着高薪,有人认为程序员都是死肥宅,还有人想到的则是996和 ICU. 别人眼中的程序员:飞快的敲击键盘.酷炫的切换屏幕.各种看不懂的字符代码 ...

  4. Python flask构建微信小程序订餐系统

    第1章 <Python Flask构建微信小程序订餐系统>课程简介 本章内容会带领大家通览整体架构,功能模块,及学习建议.让大家在一个清晰的开发思路下,进行后续的学习.同时领着大家登陆ht ...

  5. Python flask构建微信小程序订餐系统☝☝☝

    Python flask构建微信小程序订餐系统☝☝☝ 一.Flask MVC框架结构 1.1实际项目结构 1.2application.py  项目配置文件 Flask之flask-script模块使 ...

  6. Python flask构建微信小程序订餐系统✍✍✍

    Python flask构建微信小程序订餐系统  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题, ...

  7. python实现串口通讯小程序(GUI界面)

    python实现串口通讯小程序(GUI界面) 使用python实现串口通讯需要使用python的pyserial库来实现,这个库在安装python的时候没有自动进行安装,需要自己进行安装. 1.安装p ...

  8. python爬取微信小程序(实战篇)

    python爬取微信小程序(实战篇) 本文链接:https://blog.csdn.net/HeyShHeyou/article/details/90452656 展开 一.背景介绍 近期有需求需要抓 ...

  9. Python爬取微信小程序(Charles)

    Python爬取微信小程序(Charles) 本文链接:https://blog.csdn.net/HeyShHeyou/article/details/90045204 一.前言 最近需要获取微信小 ...

随机推荐

  1. CSPS模拟 86

    看见异或两个字就孩怕 T1 按位? T2 这道异或稍水啊233 貌似可以打表找找规律 emm七种转移,有重复刷表 优化一下? T3 skyh已经接了2杯水了(实际情况他已经ak了) cbx开始抬头傻笑 ...

  2. call 与apply深入

    http://blog.csdn.net/bao19901210/article/details/21614761

  3. 使用Typescript重构axios(一)——写在最前面

    0.系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三)- ...

  4. 使用Typescript重构axios(二十九)——添加baseURL

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  5. HtmlSpanner 使用小结 -- 安卓解析html

    如何利用 HtmlSpanner解析 HTML格式 的字符串: 1. GitHub 下载HtmlSpanner项目 https://github.com/NightWhistler/HtmlSpann ...

  6. Spring mvc之源码 handlerMapping和handlerAdapter分析

    Spring mvc之源码 handlerMapping和handlerAdapter分析 本篇并不是具体分析Spring mvc,所以好多细节都是一笔带过,主要是带大家梳理一下整个Spring mv ...

  7. 决策树(上)-ID3、C4.5、CART

    参考资料(要是对于本文的理解不够透彻,必须将以下博客认知阅读,方可全面了解决策树): 1.https://zhuanlan.zhihu.com/p/85731206 2.https://zhuanla ...

  8. variable precision SWAR算法

    计算二进制形式中1的数量这种问题,在各种刷题网站上比较常见,以往都是选择最笨的遍历方法“蒙混”过关.在了解Redis的过程中接触到了variable precision SWAR算法(以下简称VP-S ...

  9. mysql里面的时间获取(格式年月日)

    1.当前日期 select DATE_SUB(curdate(),INTERVAL 0 DAY) ; 2.明天日期 select DATE_SUB(curdate(),INTERVAL -1 DAY) ...

  10. sso单点登录系统

    sso单点登录概念 1.一处登录,处处登录.会单独做一个单点登录系统,只负责颁发token和验证token,和页面登录功能. 2.通过在浏览器cookie中放入token,和在redis中对应toke ...