用python制作一个英语单词听写器
由于最近忙于备考六级,所以对于单词这块一直在记,但是市面上存在着许许多多英语单词听写的软件,比如某词斩等,然后遍突发奇想,为什么自己不能用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制作一个英语单词听写器相关推荐
- python词云代码如何增加字数_3分钟教你用python制作一个简单词云
原标题:3分钟教你用python制作一个简单词云 首先需要安装三个包: 1.制作英文字母的词云 效果图: 代码实现: 其中,test.txt文件内容如下 2.制作中文的词云 效果图: 代码实现: 其中 ...
- 3分钟教你用python制作一个简单词云
首先需要安装三个包: # 安装:pip install matplotlib # 安装:pip install jieba # 安装pip install wordcloud 1.制作英文字母的词云 ...
- 用python制作网盘_3分钟教你用python制作一个简单词云
Python是一种编程语言,它使用对象,类和清晰的语法语言来帮助您创建,编辑和生成自己的应用程序.Python最强大的地方是第三方库,强大的类库让我们快速完成想要的功能,不再重复造轮子,调库侠跑得快. ...
- python制作一个网易音乐下载器
你只需要在代码同级目录新建一个文件夹mp3即可.代码可复制粘贴. 第一次思路如下,该效果只能一次下载单个音乐: #coding=gbk """ 描述:传参id即可下载音乐 ...
- python英文词云代码_3分钟教你用python制作一个简单词云
首先需要安装三个包: # 安装:pip install matplotlib # 安装:pip install jieba # 安装pip install wordcloud 1.制作英文字母的词云 ...
- python制作词作云动画_3分钟教你用python制作一个简单词云
首先需要安装三个包: 1.制作英文字母的词云 效果图: 代码实现: 其中,test.txt文件内容如下 2.制作中文的词云 效果图: 代码实现: 其中alice.txt文件内容:赤朽木叶家族的传说观后 ...
- Python制作一个简易连点器
废话不多说,我只是觉得用c/c++会比较麻烦,这个也是比较针对于游戏的连点器,实在不放心加个random pip安装的模块: pyautogui,keyboard; 直接上代码: import ...
- 20220517 Python 制作一个儿童学习软件 (附源码和软件下载) 包含语音合成 视频播放 pyqt pptsx3 Qmovie request pygame 音频播放
20220517 Python 制作一个儿童学习软件 (附源码和软件下载) 包含语音合成 视频播放 pyqt pptsx3 Qmovie request pygame 音频播放 文章目录 202205 ...
- Python制作一个简单的抽奖软件(二)
Python制作一个简单的抽奖软件(二) 认识QT 因为都对 QT和tkinter都没用过,之前简单使用tkinter后发现,界面调整不太好弄.然后度娘了之后,QT是强大GUI库之一,很多人都推荐它. ...
最新文章
- exchange2003的部署
- php laravel 框架 APP_KEY 的作用
- python基础--面向对象之多态
- mac mysql 报错_mac os mysql 配置?报错-问答-阿里云开发者社区-阿里云
- Datatable/Dataset 转 JSON方法
- ide中tomcat乱码_idea tomcat 乱码问题的解决及相关设置
- 查看CUDA和cuDNN的版本号
- 某国产下载神器又出事了:前 CEO 已被公安局立案侦查!
- 如何在AngularJS中使用SpreadJS?
- python爬取酷狗音乐json数据为空_python使用beautifulsoup4爬取酷狗音乐
- 二十五个软件测试经典面试题
- 小米MIUI线刷包cust.img、system.img精简教程(一)
- 【SAP消息号M8147】
- Halcon标定板标定
- 参考文献格式要求及书写规则
- ssh远程打开ubuntu的vino-server
- [转] 全国测绘事业单位(转)
- Arndale Octa 5420网络设置
- python机器学习常用模型
- 编程改变世界_v20201007