飞道的博客

还在手写记单词?使用Python开发练习英语单词,助你逆袭单词记忆王!

362人阅读  评论(0)

学英语记单词

最近看到好多同学在专升本,死记硬背的记单词,手抄的单词一页接着一页,不管是公众号,还是刷抖音,导出都能看到关于学英语、背单词的广告,教你快速提升。

不知道现在同学们背单词买的什么辅导学习的材料。

今天,我们就使用Python来做一个英语单词自测工具!


   
  1. # -*- coding:utf-8 -*-
  2. import pygame
  3. import pygame.locals
  4. import random
  5. from win32con import WM_INPUTLANGCHANGEREQUEST
  6. import win32gui
  7. import win32api
  8. import copy
  9. class window_bg:
  10. def __init__(self, x, y):
  11. pygame.init()
  12. self.x = x
  13. self.y = y
  14. self.window = pygame.display.set_mode((x, y))
  15. self.clock = pygame.time.Clock()
  16. self.fontobject = self.read_fontobject() # 字体类
  17. self.num = 0
  18. self.data_list_cache = [{"location": [int(x / 4), 0], "Font": "你好","data":"hello"},
  19. {"location": [int(x / 4), 0], "Font": "(尤指苦战后获得的)胜利,成功,成就", "data": "triumph"},
  20. {"location": [int(x / 4), 0], "Font": "发誓;做保证", "data": "pledge"},
  21. {"location": [int(x / 4), 0], "Font": "摆姿势;造成、导致", "data": "pose"},
  22. {"location": [int(x / 4), 0], "Font": "例行公事;常规;惯例", "data": "routine"},
  23. {"location": [int(x / 4), 0], "Font": "赢得", "data": "attain"},
  24. {"location": [int(x / 4), 0], "Font": "基础", "data": "foundation"},
  25. {"location": [int(x / 4), 0], "Font": "资源;自然资源", "data": "resource"},
  26. ]
  27. self.data_list = []
  28. self.english_list = [] # 翻译存放处
  29. self.NUM_code = list(range(48, 57 + 1)) # 数字按键所对应的码
  30. self.ABC_code = list(range(97, 122 + 1)) # 字母按键所对应的码
  31. self.NUM_ABC_code = self.NUM_code + self.ABC_code # 数字与字母按键所对应的码
  32. # 切换成英文输入法
  33. def Ctrl_English(self):
  34. # pygame只支持英文输入
  35. hwnd = win32gui.GetForegroundWindow()
  36. win32api.SendMessage(hwnd, WM_INPUTLANGCHANGEREQUEST, 0, 0x0409)
  37. def read_fontobject(self):
  38. pygame.font.init() # 字体初始化
  39. return pygame.font.Font('msyhbd.ttc', 15)
  40. # 显示输入框
  41. def show_ziti(self, import_label, string_list, x, y, wide, height): # 输入标签,输入信息列表,位置x,位置y,宽度,高度
  42. message = import_label + ''.join(string_list)
  43. pygame.draw.rect(self.window, (0, 100, 100), (x, y, wide, height), 0) # 0是全覆盖
  44. pygame.draw.rect(self.window, (255, 255, 255), (x - 2, y - 2, wide + 4, height + 4), 1) # 1是边框
  45. if len(message) != 0:
  46. self.window.blit(self.fontobject.render(message, 1, (255, 255, 255)), (x, y))
  47. def pygame_event_get(self):
  48. for event in pygame.event.get():
  49. # 事务处理(按键鼠标)
  50. if event.type == pygame.QUIT:
  51. exit()
  52. if event.type == pygame.locals.KEYDOWN: # 有键盘按下
  53. # print('===',event.unicode) #按键所对应的值
  54. # print(event.key) # 按键所对应的码
  55. if event.unicode == '': # 输入法不是英文的,改成英文
  56. if event.key in self.NUM_ABC_code: # 字母与数字按键所对应的码
  57. self.Ctrl_English()
  58. event.unicode = chr(event.key)
  59. if event.key == pygame.locals.K_BACKSPACE: # 删除键
  60. self.english_list = self.english_list[0:-1]
  61. elif event.key in self.ABC_code: # 账号密码支持小写字母与数字
  62. self.english_list.append(event.unicode)
  63. elif event.key == pygame.locals.K_RETURN: # 回车键
  64. for i_index, i in enumerate(self.data_list):
  65. if i["data"] == ''.join(self.english_list):
  66. self.data_list.pop(i_index)
  67. self.english_list=[]
  68. return
  69. # 位置下移,到一定的位置就消失
  70. for i_index, i in enumerate(self.data_list):
  71. i["location"][1] += 0.5
  72. if i["location"][1] > self.y - 200:
  73. self.data_list.pop(i_index)
  74. self.num += 1
  75. if self.num % 150 == 0:
  76. # 深度复制
  77. data = copy.deepcopy(random.choice(self.data_list_cache))
  78. self.data_list.append(data)
  79. def pygame_display_update(self):
  80. self.window.fill((0, 0, 0)) # 背景色
  81. self.show_ziti('翻译:', self.english_list, 300, 650, 200, 20)
  82. for i in self.data_list:
  83. self.show_ziti(i["Font"], [], i["location"][0], i["location"][1], 300, 20)
  84. pygame.display.update()
  85. self.clock.tick(26) # 窗口1秒刷新多少次
  86. a = window_bg(800, 700)
  87. while True:
  88. a.pygame_event_get()
  89. a.pygame_display_update()

先来看看实现效果吧…程序输入你想测试的单词,然后系统出来你所输入的单词,答对就会消失,一直反复循环,不信你还记不住喽...


转载:https://blog.csdn.net/qq_44278941/article/details/115681622
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场