小姨说:既然你语文,数学的都给我做了,在来一个英语的吧!我:我太难了,
想看前面两篇语文数学的脚本关注我即可看到哦!
1. 单词背记
英语是目前世界上使用最广泛的语言之一,也是国际上通用的语言。随着各国交流越来越频繁,英语的地位与日俱增。在中国,已经有成千上万的人加入到英语学习大军中,英语对于我们来说已经是一门不可或缺的技能,但英语单词记忆是一大难题。请编写一个程序,帮助学习者快速背记英语单词。运行程序,随机输出英语单词的汉语意思,要求写出或说出英文。运行效果如下图所示。
示例代码如下:
import random # 思考: 一个中文对应一个英语单词,用什么数据类型存储好呢? # 答: 字典 key(中文) --> value(英文) word_dict = {"手机": "mobile phone", "美女": "beauty", "电脑": "computer", "成语": "idiom", "价格": "price", "年龄": "age", "商店": "shop"} word_list = list(word_dict) print("**************百词斩**************") while True: terms = random.choice(word_list) # terms: 词语 print("汉语:", terms) value = word_dict.get(terms).strip() # 从字典中获取中文所对应的英文单词 word = input("英语: ").strip() # 防止用户误操作录入空白 if word == value: print(f"\033[0;32m{chr(8730)}\033[0m 你真棒!!!") else: print(f"\033[0;31m{chr(215)}\033[0m 答错了,正确答案: \033[0;31m{value}\033[0m") print("要加油呀~")
下面对其中的一些语法进行说明:
2. 单词提醒
为百词斩程序添加提示功能和退出功能。运行程序,用户输入?号(中英文问好均可以)要求对单词进行提示,程序随机输出单词的前两个字母或后两个字母进行提示。用户输入q或者Q,提示正在退出程序!!并退出程序。运行效果如下图所示。
示例代码如下:
import random def equal(str_a, str_b): if str_a.strip() == str_b.strip(): # str_a: 用户输入的英文单词 str_b: 字典中的英文单词 print(f"\033[0;32m{chr(8730)}\033[0m 你真棒!!!") else: print(f"\033[0;31m{chr(215)}\033[0m 答错了,正确答案: \033[0;31m{str_b}\033[0m") print("要加油呀~") # 思考: 一个中文对应一个英语单词,用什么数据类型存储好呢? # 答: 字典 key(中文) --> value(英文) word_dict = {"手机": "mobile phone", "美女": "beauty", "电脑": "computer", "成语": "idiom", "价格": "price", "年龄": "age", "商店": "shop"} word_list = list(word_dict) print("**************百词斩**************") while True: terms = random.choice(word_list) # terms: 词语 print("汉语:", terms) value = word_dict.get(terms).strip() # 从字典中获取中文所对应的英文单词 word = input("英语: ").strip() # 防止用户误操作录入空白 # 判断总的分为三类: 1.输入q 2.输入? 3.输入正常单词 if word.lower() == "q": print("正在退出程序!!!") break elif word in ["?", "?"]: tips_list = [value[:2], value[-2:]] # 用列表将单词前两个字母和后两个字母存储 tips = random.choice(tips_list) # 随机取出提示字母 if tips_list.index(tips) == 0: print(f"\033[1;31m提示:\033[0m 单词前两个字母是: {tips}") else: print(f"\033[1;31m提示:\033[0m 单词后两个字母是: {tips}") word = input("英语: ").strip() # 防止用户误操作录入空白 equal(word, value) # 调用函数 比较用户输入的单词和字典中的单词是否一致 else: equal(word, value) # 调用函数 比较用户输入的单词和字典中的单词是否一致
3. 记忆功能
为百词斩添加记忆功能。用户答对的单词,不再重复出现。答错的单词和未出现的单词继续随机输出。当所有单词全部答完,提示你真棒,今天任务全部过关!!并退出程序。运行效果如图所示。
示例代码如下:
import random def equal(str_a, str_b): if str_a.strip() == str_b.strip(): # str_a: 用户输入的英文单词 str_b: 字典中的英文单词 print(f"\033[0;32m{chr(8730)}\033[0m 你真棒!!!") word_dict.pop(terms) else: print(f"\033[0;31m{chr(215)}\033[0m 答错了,正确答案: \033[0;31m{str_b}\033[0m") print("要加油呀~") # 思考: 一个中文对应一个英语单词,用什么数据类型存储好呢? # 答: 字典 key(中文) --> value(英文) word_dict = {"手机": "mobile phone", "美女": "beauty", "年龄": "age", "商店": "shop"} # 为了测试方便 删减一部分单词 print("**************百词斩**************") while len(word_dict): terms = random.choice(list(word_dict)) # terms: 词语 print("汉语:", terms) value = word_dict.get(terms).strip() # 从字典中获取中文所对应的英文单词 word = input("英语: ").strip() # 防止用户误操作录入空白 # 判断总的分为三类: 1.输入q 2.输入? 3.输入正常单词 if word.lower() == "q": print("正在退出程序!!!") break elif word in ["?", "?"]: tips_list = [value[:2], value[-2:]] # 用列表将单词前两个字母和后两个字母存储 tips = random.choice(tips_list) # 随机取出提示字母 if tips_list.index(tips) == 0: print(f"\033[1;31m提示:\033[0m 单词前两个字母是: {tips}") else: print(f"\033[1;31m提示:\033[0m 单词后两个字母是: {tips}") word = input("英语: ").strip() # 防止用户误操作录入空白 equal(word, value) # 调用函数 比较用户输入的单词和字典中的单词是否一致 else: equal(word, value) # 调用函数 比较用户输入的单词和字典中的单词是否一致 else: print("你真棒,今天任务全部过关!!!")
下面对其中的一些语法进行说明:
4. 语音朗读
为百词斩添加语音朗读功能。运行程序,在输出汉语单词的同时,语音播报汉语单词,答对了,语音播报答对了, 你真棒!!,答错了,语音播报答错了,正确答案是朗读正确英语单词, 加油啊!!,按q键退出程序时语音播报正在退出程序!!。整个单词背记结束时语音播报你真棒,今天任务全部过关!! 注意:完成此任务需要导入第三方模块,导入模块命令,在Mac系统下为:
pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com pyttsx3 pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com pyobjc
在Windows系统下为:
pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com pywin32
Mac系统下,示例代码为:
import random import pyttsx3 def speak(sp_str): engine = pyttsx3.init() engine.say(sp_str) engine.runAndWait() def equal(str_a, str_b): if str_a.strip() == str_b.strip(): # str_a: 用户输入的英文单词 str_b: 字典中的英文单词 print(f"\033[0;32m{chr(8730)}\033[0m 你真棒!!!") speak("答对了,你真棒!!!") word_dict.pop(terms) else: print(f"\033[0;31m{chr(215)}\033[0m 答错了,正确答案: \033[0;31m{str_b}\033[0m") speak("答错了,正确答案:" + str_b + "加油啊!!!") print("要加油呀~") # 思考: 一个中文对应一个英语单词,用什么数据类型存储好呢? # 答: 字典 key(中文) --> value(英文) word_dict = {"手机": "mobile phone", "美女": "beauty", "年龄": "age", "商店": "shop"} # 为了测试方便 删减一部分单词 print("**************百词斩**************") while len(word_dict): terms = random.choice(list(word_dict)) # terms: 词语 print("汉语:", terms) speak("汉语:" + terms) value = word_dict.get(terms).strip() # 从字典中获取中文所对应的英文单词 word = input("英语: ").strip() # 防止用户误操作录入空白 # 判断总的分为三类: 1.输入q 2.输入? 3.输入正常单词 if word.lower() == "q": print("正在退出程序!!!") speak("正在退出程序!!!") break elif word in ["?", "?"]: tips_list = [value[:2], value[-2:]] # 用列表将单词前两个字母和后两个字母存储 tips = random.choice(tips_list) # 随机取出提示字母 if tips_list.index(tips) == 0: print(f"\033[1;31m提示:\033[0m 单词前两个字母是: {tips}") else: print(f"\033[1;31m提示:\033[0m 单词后两个字母是: {tips}") word = input("英语: ").strip() # 防止用户误操作录入空白 equal(word, value) # 调用函数 比较用户输入的单词和字典中的单词是否一致 else: equal(word, value) # 调用函数 比较用户输入的单词和字典中的单词是否一致 else: print("你真棒,今天任务全部过关!!!") speak("你真棒,今天任务全部过关!!!")
Windows系统下,示例代码为:
import random import winsound from win32com.client import Dispatch def speak(sp_str): speak_out.speak(sp_str) winsound.PlaySound(sp_str, winsound.SND_ASYNC) def equal(str_a, str_b): if str_a.strip() == str_b.strip(): # str_a: 用户输入的英文单词 str_b: 字典中的英文单词 print(f"\033[0;32m{chr(8730)}\033[0m 你真棒!!!") speak("答对了,你真棒!!!") word_dict.pop(terms) else: print(f"\033[0;31m{chr(215)}\033[0m 答错了,正确答案: \033[0;31m{str_b}\033[0m") speak("答错了,正确答案:" + str_b + "要加油呀!!!") print("要加油呀~") # 思考: 一个中文对应一个英语单词,用什么数据类型存储好呢? # 答: 字典 key(中文) --> value(英文) speak_out = Dispatch('sapi.spvoice') word_dict = {"手机": "mobile phone", "美女": "beauty", "年龄": "age", "商店": "shop"} # 为了测试方便 删减一部分单词 print("**************百词斩**************") while len(word_dict): terms = random.choice(list(word_dict)) # terms: 词语 print("汉语:", terms) speak("汉语:" + terms) value = word_dict.get(terms).strip() # 从字典中获取中文所对应的英文单词 word = input("英语: ").strip() # 防止用户误操作录入空白 # 判断总的分为三类: 1.输入q 2.输入? 3.输入正常单词 if word.lower() == "q": print("正在退出程序!!!") speak("正在退出程序!!!") break elif word in ["?", "?"]: tips_list = [value[:2], value[-2:]] # 用列表将单词前两个字母和后两个字母存储 tips = random.choice(tips_list) # 随机取出提示字母 if tips_list.index(tips) == 0: print(f"\033[1;31m提示:\033[0m 单词前两个字母是: {tips}") else: print(f"\033[1;31m提示:\033[0m 单词后两个字母是: {tips}") word = input("英语: ").strip() # 防止用户误操作录入空白 equal(word, value) # 调用函数 比较用户输入的单词和字典中的单词是否一致 else: equal(word, value) # 调用函数 比较用户输入的单词和字典中的单词是否一致 else: print("你真棒,今天任务全部过关!!!") speak("你真棒,今天任务全部过关!!!")
5. 积分评价
为百词斩添加背记积分功能。背记单词时,单词一次答对积3分,利用提示答对不积分。答错后,后续答对积1分。最高积分为24分,最低积分为8分。20分及以上为优秀,16-19分为良好,12-15分为及格,12分以下为不及格。背记单词完成时播报选手的得分和评价。
程序运行结果演示
考虑到大多数人使用的是windows系统,笔者这里主要给出在windows系统下的示例代码:
import random import winsound from win32com.client import Dispatch def speak(sp_str): speak_out.speak(sp_str) winsound.PlaySound(sp_str, winsound.SND_ASYNC) def equal(str_a, str_b): global score if str_a.strip() == str_b.strip(): # str_a: 用户输入的英文单词 str_b: 字典中的英文单词 print(f"\033[0;32m{chr(8730)}\033[0m 你真棒!!!") speak("答对了,你真棒!!!") word_dict.pop(terms) if terms in word_set: score += 1 else: score += 3 else: print(f"\033[0;31m{chr(215)}\033[0m 答错了,正确答案: \033[0;31m{str_b}\033[0m") speak("答错了,正确答案:" + str_b + "要加油呀!!!") print("要加油呀~") word_set.add(terms) # 思考: 一个中文对应一个英语单词,用什么数据类型存储好呢? # 答: 字典 key(中文) --> value(英文) speak_out = Dispatch('sapi.spvoice') word_dict = {"手机": "mobile phone", "美女": "beauty", "年龄": "age", "商店": "shop", "我们": "we", "价格": "price", "书": "book", "电脑": "computer"} score = 0 # 用于统计分数 word_set = set() # 用于存储第一次答错的单词 print("**************百词斩**************") while len(word_dict): terms = random.choice(list(word_dict)) # terms: 词语 print("汉语:", terms) speak("汉语:" + terms) value = word_dict.get(terms).strip() # 从字典中获取中文所对应的英文单词 word = input("英语: ").strip() # 防止用户误操作录入空白 # 判断总的分为三类: 1.输入q 2.输入? 3.输入正常单词 if word.lower() == "q": print("正在退出程序!!!") speak("正在退出程序!!!") break elif word in ["?", "?"]: tips_list = [value[:2], value[-2:]] # 用列表将单词前两个字母和后两个字母存储 tips = random.choice(tips_list) # 随机取出提示字母 if tips_list.index(tips) == 0: print(f"\033[1;31m提示:\033[0m 单词前两个字母是: {tips}") else: print(f"\033[1;31m提示:\033[0m 单词后两个字母是: {tips}") word = input("英语: ").strip() # 防止用户误操作录入空白 equal(word, value) # 调用函数 比较用户输入的单词和字典中的单词是否一致 else: equal(word, value) # 调用函数 比较用户输入的单词和字典中的单词是否一致 else: if score >= 20: start = "优秀" elif score >= 16: start = "良好" elif score >= 12: start = "及格" else: start = "不及格" print(f"你的得分为{score}, 成绩{start}") speak("你的得分为: " + str(score) + "成绩" + start)
6. 默写输出
给百词斩增加默写输出功能。通过电脑进行单词背诵虽然效果较好,但如果能够将单词输出,对视力会降低影响。可以将单词以默写方式打印到纸上,用户可以方便的背诵和默写练习。要求程序可以通过输入设置每个单词打印默写空格数(1-6个默写空格),运行效果如图所示。
示例代码如下:
word_dict = {"手机": "mobile phone", "美女": "beauty", "年龄": "age", "商店": "shop", "我们": "we", "价格": "price", "书": "book", "电脑": "computer"} print("**************百词斩**************") blank_num = int(input("输入打印默认的空格数(1-6): ").strip()) # 获取字典中所有的key/value 并存入到列表中 key_list = list(word_dict) value_list = list(word_dict.values()) max_len_key = max(list(map(len, key_list))) * 2 # 一个中文占用两个英文字母的位置 max_len_value = max(list(map(len, value_list))) max_len = max_len_value if max_len_value > max_len_key else max_len_key # 取出英文和中文的长度最大值 file = open("word.txt", "a", encoding="utf-8") file.write("英语默写\n") for key in word_dict.keys(): if len(key)*2 < max_len: key = key + " " * (max_len-len(key)*2) print(key + " \t"+ "______________ " * blank_num) # 一般来说英文的长度肯定比中文长 content = key + " \t"+ "______________ " * blank_num + "\n" file.write(content) file.write("\n汉字默写\n") for value in word_dict.values(): if len(value) < max_len: value = value + " " * (max_len-len(value)) print(value + " \t"+ "______________ " * blank_num) content = value + " \t" + "______________ " * blank_num + "\n" file.write(content)
7. 词汇获取
本实例通过字典提供了少量练习用的英语单词,如果要实际应用,如果能从文件中导入单词,就非常方便实用了。下面编写一个可以按单元从文本文件导入英语单词的程序,文本中的英文和汉语中间用英文空格间隔。在导入过程中,删除单词前的.和、以及空格等。导入前的文本以及导入字典的效果如图所示。
示例代码如下:
eng = {} with open('unit1.txt', 'r', encoding='UTF-8') as file: while True: line = file.readline() if line == '': break group = line.split() new = [i for i in group if i.strip() != ''] if len(new) == 2: word_eng = new[0].lstrip(".") eng[new[1]] = word_eng else: for i in range(len(new)): if ord(new[i][0]) > 255: word_eng = ' '.join(new[0:i]) word_eng = word_eng.lstrip(".") word_han = ' '.join(new[i:]) break eng[word_han] = word_eng print(eng)
好了,到此结束了,看完记得留言点赞哦,可以拿着整个代码或者文章收藏,以后给你的孩子用嘛!嘿嘿嘿
此文转载于:Amo Xiang
著作权归作者所有,如有侵权联系小编删除!
原文地址:https://blog.csdn.net/xw1680/article/details/105307335