首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一个背单词的程序

这是一个分割线

最近在背单词的时候发现一个佷悲催的事情:由于我是用单词本背书,总是会不自觉得看单词的时候同时看到它的意思,所以最后总是记得住单词,记不住它的意思。(其实这个问题一直都存在。。。)

所以就想用python写一个程序来随机输出每天背的单词,这样就不会不自觉的看单词的时候同时看到它的意思,顺便也练习一下学习的代码,免得忘了(老年人啊。。。)。

基本思路:

用tkinter库弹出文件选择对话框

将单词录入txt文档,用open()函数打开保存到列表

随机从列表中取出单词,打印到控制台。并使用requests库从有道词典爬取每个单词的语音文件,通过playsound库播放。

导入库和模块

1importrandom

2importtkinter.filedialog

3importre

4importtime

5importtkinterastk

6importrequests

7importplaysound

8importos

很简单的一个代码实现,但是在实现过程中也遇到了一些问题,解决后也收获了很多。

1.最开始没有导入tkinter库,而是直接导入tkinter.filedialog弹出文件选择框,但是终端运行的时候发现弹出选择框的同时弹出了一个名为tk的对话框,并且这个对话框即使文件选择结束,文件选择对话框关闭,它也不会关闭,强行关闭会导致python停止运行。

解决方法:最后我谷歌查了一下,导入了tkinter库,加入了,这两行代码:

问题解决。

2.在用open()将txt文件转换成列表时,默认了只要取不到内容即停止读取。这样导致读取出来的单词少了一大截。原来在创建txt单词本的时候,不小心在前面某一行留了一个空行。为了防止这种错误发生,加入了这三行代码:

当程序检测到相邻两行空行时退出文件读取。

3.

文件读取结束后打印保存单词的列表时发现每个单词后面有一个“\n”换行符,而且最后两个用于判断文件读取结束的换行符也在列表末尾。

于是导入re模块,用正则表达式除去文件读取中的"\n"换行符。

4.

在从有道爬取语音文件的时候遇到了一个文件管理方面的问题,本来我想的是将语音文件写入一个统一的“word.mp3”文件当中,再传递给playsound库进行播放,播放完成后使用os.remove()将“word.mp3”删除。

但是当我在运行代码的时候发现了一个问题:第一次语音正常播放,第二次语音则报错,提示没有写入权限:

调试了一下发现是文件名的问题,因为在程序正在运行的时候不仅没有将文件删除,而且会将它占用起来,只有在程序运行结束的才会将它们统一删除。

所以在程序中引入一个初始值为0的变量 “i”,每播放一次语音i的值增加 1 。将i作为mp3文件的文件名,并将所有的mp3文件存放于名为binfor的文件夹中。程序运行结束后统一删除。

其实途中还遇到了一些小问题,但是基本上都是在功能添加上的问题,这里就不做记录了。

使用教程:

【使用教程】

1.创建单词表:单词表文件格式为txt,每一行只能有一个单词,而且不能有空格。(安装包中有一个单词表示例)

2.运行程序,选中创建好的单词表,导入即可。

注:由于本程序单词出现由伪随机数函数决定,所以一个单词本里面的单词数量不宜过多,200以下为宜,可以每天创建一个单词表。

运行界面:

(ps:由于懒,就不做GUI(图形用户界面)了, 直接用终端吧......)

源代码:

注:由于程序在运行时会向有道发送下载请求,所以需要在联网条件下使用,而且由于接口的问题,有时候语音下载会有些慢,稍等几秒钟即可。

编程学习,路曼曼其修远兮,吾将上下而求索!

下一篇:追书神器

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180806G0ACFK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券