​ 由于最近忙于备考六级,所以对于单词这块一直在记,但是市面上存在着许许多多英语单词听写的软件,比如某词斩等,然后遍突发奇想,为什么自己不能用python自己写一个简单的英语单词听写器呢?

​ 说干就干,整个代码大约花了1个多小时,还处于非常简单的一个小阶段,并且并么有连接数据库和制作界面操作,因此也只属于简易版本。

一、大致思路

第一步:将自己需要复习的英语单词进行整理,然后存储为字典类型,单词为key,意思为value,取名total_words

第二步:取出存在字典内的所有key,并将它转化为list类型(便于后面随机取整),取名words,并且获取words的长度,取名lens

第三步:随机产生一个0-lens-1的整数,并获取该数在words中所对应的值,并输出该单词。

第四步:将用户输入的单词意思存储为word_in。并且判断该意思是否在total_words中该单词所对应的值中。

第五步:如果存在,则正确数目加一,如果错误,则将该单词输出并且输出对应的意思,然后将该错误单词写入wrong.txt文本文件中。

注:下面代码为公共部分代码,也就单独拿出来了

# 1.用于存储所有单词,存储类型:字典
total_words = {'abandon': ["丢弃", '离弃', '放弃'], 'abnormal': ['不正常的', '异常的'], 'abolish': ['彻底废除', '废止'],'abortion': ['流产', '堕胎', '失败', '夭折'], 'abrupt': ['突然地', '仓促的', '唐突的', '鲁莽的'],'absence': ['缺席', '不在场', '缺乏', '不存在'], 'absolute': ['绝对的', '完全的', '确实的', '专制的', '无限制的', '无条件的'],'abstract': ['抽象的', '摘要', '抽象', '提取', '抽取'], 'absurd': ['荒谬的', '荒唐的'],'abundance': ['大量', '丰富', '充足'], 'abuse': ['辱骂', '污蔑', '虐待', '滥用'],'accelerate': ['加快', '增速'], 'access': ['接近', '获得', '通道', '入口'],'accessory': ['附近', '配件', '装饰品', '同谋', '包庇犯'], 'accidental': ['意外的', '发生的'],'accommodate': ['容纳', '使适应', '向…提供住处', '顺应'], 'accommodation': ['住宿', '膳食', '适应', '调节'],'accompany': ['陪伴', '陪同', '伴随', '为…伴奏'], 'accord': ['一致', '符合', '谅解', '授予'],'accordance': ['一致', '和谐', '授予', '给予'], 'accountant': ['会计师', '会计人员'],'accumulate': ['堆积', '积累', '积聚', '累积'], 'accuracy': ['准确性', '精确性', '正确性'],'accurate': ['正确的', '正确无误的', '准确的', '精确的'], 'accuse': ['指责', '指控', '控告'],'acknowledge': ['承认', '理会', '确认', '报答']
}# 2.获取存储在total_words里面的关键字
words = list(total_words.keys())
lens = len(words)  # 获取words的长度
wrong_word = []

二、小试牛刀

# 3.随机产生一个0-lens-1的整数数,并获取该数在words所对应的值
word_int = random.randint(0, lens - 1)
word = words[word_int]# 4.将该单词输出,并且获取用户输入的该单词的意思,并进行判断
word_in = input(word + ':单词的意思为:\n')
if (word_in in total_words[word]):# 如果用户输入的单词存在意思库里,则打印出正确print("恭喜你,该题做对啦!")
else:# 否则就打印出该单词并且将该单词的意思也一并打印出来print("很遗憾,"+str(word)+'的意思为:'+'、'.join(total_words[word]))

三、初有成效

上面的步骤只能实现一次听写,我们可以添加一个循环,让用户自己输入一个数字,来确定循环的次数。

total_len = int(input('请输入需要测试的单词个数(共' + str(lens) + '个):'))
right = 0
for i in range(total_len):# 3.随机产生一个0-lens-1的整数数,并获取该数在words所对应的值word_int = random.randint(0, lens - 1)word = words[word_int]# 4.将该单词输出,并且获取用户输入的该单词的意思,并进行判断word_in = input(word + ':单词的意思为:\n')if (word_in in total_words[word]):# 如果用户输入的单词存在意思库里,则打印出正确print("恭喜你,该题做对啦!")right += 1else:# 否则就打印出错误print("很遗憾,"+str(word)+'的意思为:'+'、'.join(total_words[word]))print('\r\n恭喜你,这次一共做了' + str(total_len) + '题,做对了' + str(right) + '题,正确率为:' + str(int(right / total_len * 100)) + '%')

四、最终版本

上面的代码虽然可以运行,但是仔细可以发现这个地方出现的部分单词是重复的,如果我们想将单词设置成不重复的,即可引入一个list,取名word_list,这个用来存放已经出现过的单词。

total_len = int(input('请输入需要测试的单词个数(共' + str(lens) + '个):'))
this_time = 0  # 用来存储当前的执行次数
right = 0  # 用来记录正确题目的个数
word_list = []  # 用来存储已经出现过的单词
while (this_time != total_len):# 3.随机产生一个0-lens-1的整数数,并获取该数在words所对应的值word_int = random.randint(0, lens - 1)word = words[word_int]if (word in word_list):continueword_list.append(word)this_time += 1# 4.将该单词输出,并且获取用户输入的该单词的意思,并进行判断word_in = input(word + ':单词的意思为:\n')if (word_in in total_words[word]):# 如果用户输入的单词存在意思库里,则打印出正确print("恭喜你,该题做对啦!")right += 1else:# 否则就打印出错误print("很遗憾," + str(word) + '的意思为:' + '、'.join(total_words[word]))wrong_word.append(word)print('\r\n恭喜你,这次一共做了' + str(total_len) + '题,做对了' + str(right) + '题,正确率为:' + str(int(right / total_len * 100)) + '%')# 如果存在错题,则将错题输出在屏幕上并且将错误的题目写入wrong.txt文件内
if total_len - right != 0:with open('wrong.txt', 'a+', encoding="utf-8") as f:  # 将错误的单词写入文本now = datetime.now()f.write('\n' + now.ctime() + '\n')  # 将日期时间写入文件print('您的错误单词一共有' + str(total_len - right) + '题,分别是:')for j in range(len(wrong_word)):str1 = wrong_word[j] + ':' + ','.join(total_words[wrong_word[j]])print(str1)with open('wrong.txt', 'a+', encoding="utf-8") as f:  # 将错误的单词写入文本f.write(str(str1 + '\n'))

以上就是本次小项目的全部代码,希望各位有所收获。

五、小小知识点

  • 在使用randint时,需要传入一个范围值,而不是只传入一个最大值。random.randint(0, lens - 1)

    • def randint(self, a, b):"""Return random integer in range [a, b], including both end points."""return self.randrange(a, b+1)
      
  • 在使用ctime函数时,需要用datetime获取现在的时间戳,datetime.now().ctime(),并且需要导入语句是from datetime import datetime

  • 列表转化为字符串时,可以使用join函数。','.join(list)

  • 上下文管理器的使用,with open('wrong.txt', 'a+', encoding="utf-8") as f:它的好处是在函数结束时自动会关闭文件,而不需要单独写,这样可以节省代码也可以更加便于理解。并且r是只读,w是只写,a是追加模式,在后面加上一个+号表示即可读也可写。

用python制作一个英语单词听写器相关推荐

  1. python词云代码如何增加字数_3分钟教你用python制作一个简单词云

    原标题:3分钟教你用python制作一个简单词云 首先需要安装三个包: 1.制作英文字母的词云 效果图: 代码实现: 其中,test.txt文件内容如下 2.制作中文的词云 效果图: 代码实现: 其中 ...

  2. 3分钟教你用python制作一个简单词云

    首先需要安装三个包: # 安装:pip install matplotlib # 安装:pip install jieba # 安装pip install wordcloud 1.制作英文字母的词云 ...

  3. 用python制作网盘_3分钟教你用python制作一个简单词云

    Python是一种编程语言,它使用对象,类和清晰的语法语言来帮助您创建,编辑和生成自己的应用程序.Python最强大的地方是第三方库,强大的类库让我们快速完成想要的功能,不再重复造轮子,调库侠跑得快. ...

  4. python制作一个网易音乐下载器

    你只需要在代码同级目录新建一个文件夹mp3即可.代码可复制粘贴. 第一次思路如下,该效果只能一次下载单个音乐: #coding=gbk """ 描述:传参id即可下载音乐 ...

  5. python英文词云代码_3分钟教你用python制作一个简单词云

    首先需要安装三个包: # 安装:pip install matplotlib # 安装:pip install jieba # 安装pip install wordcloud 1.制作英文字母的词云 ...

  6. python制作词作云动画_3分钟教你用python制作一个简单词云

    首先需要安装三个包: 1.制作英文字母的词云 效果图: 代码实现: 其中,test.txt文件内容如下 2.制作中文的词云 效果图: 代码实现: 其中alice.txt文件内容:赤朽木叶家族的传说观后 ...

  7. Python制作一个简易连点器

    废话不多说,我只是觉得用c/c++会比较麻烦,这个也是比较针对于游戏的连点器,实在不放心加个random pip安装的模块:  pyautogui,keyboard; 直接上代码: ​​import ...

  8. 20220517 Python 制作一个儿童学习软件 (附源码和软件下载) 包含语音合成 视频播放 pyqt pptsx3 Qmovie request pygame 音频播放

    20220517 Python 制作一个儿童学习软件 (附源码和软件下载) 包含语音合成 视频播放 pyqt pptsx3 Qmovie request pygame 音频播放 文章目录 202205 ...

  9. Python制作一个简单的抽奖软件(二)

    Python制作一个简单的抽奖软件(二) 认识QT 因为都对 QT和tkinter都没用过,之前简单使用tkinter后发现,界面调整不太好弄.然后度娘了之后,QT是强大GUI库之一,很多人都推荐它. ...

最新文章

  1. exchange2003的部署
  2. php laravel 框架 APP_KEY 的作用
  3. python基础--面向对象之多态
  4. mac mysql 报错_mac os mysql 配置?报错-问答-阿里云开发者社区-阿里云
  5. Datatable/Dataset 转 JSON方法
  6. ide中tomcat乱码_idea tomcat 乱码问题的解决及相关设置
  7. 查看CUDA和cuDNN的版本号
  8. 某国产下载神器又出事了:前 CEO 已被公安局立案侦查!
  9. 如何在AngularJS中使用SpreadJS?
  10. python爬取酷狗音乐json数据为空_python使用beautifulsoup4爬取酷狗音乐
  11. 二十五个软件测试经典面试题
  12. 小米MIUI线刷包cust.img、system.img精简教程(一)
  13. 【SAP消息号M8147】
  14. Halcon标定板标定
  15. 参考文献格式要求及书写规则
  16. ssh远程打开ubuntu的vino-server
  17. [转] 全国测绘事业单位(转)
  18. Arndale Octa 5420网络设置
  19. python机器学习常用模型
  20. 编程改变世界_v20201007

热门文章

  1. HTML img标签align属性
  2. 【MATLAB】线性代数矩阵基本运算(转置,乘法,求逆)
  3. js实现未登录用户跳转到登录页面登录完成后返回原页面
  4. mysql怎么创建出生日期表_MySQL表的创建
  5. 动画: 一个浏览器是如何工作的?
  6. 模拟Chrome皮肤
  7. 三个思路解决413 Request Entity Too Large报错处理
  8. 无人机图像优化软件——新增正射影像处理(图像增强、阴影增强、去雾、自动优化、匀光匀色)
  9. 有序单链表转BST树+时间复杂度要求O(n)
  10. 查找算法系列之复杂算法:二叉排序树BST