(一)需求和规格说明
问题描述:
这是一款帮助学生背单词的小软件。建立单词库:
第一个功能是学生帮助学生记单词,会显示单词库中单词的拼写、音标、词性、中文翻译,学生可以选择中途退出,再次进入的时候,可以从上次退出的位置继续,也可以重新开始,如果没有上一次的记录,则重头开始。
第二个功能是测试,有四种模式可以选择,一种是隐去单词部分字母,一种是给出中文然后默写单词,一种是给出单词选择对应的中文翻译,一种是给出翻译然后选择对应的单词。
第三个功能是增加单词,可以一个一个单词的增加,也可以读取文件增加。
第四个功能是删除单词,只能一个一个单词的删除。
第五个功能显示单词库中的所有单词。
编程任务:
(1)建立单词库,并可以方便地对单词库进行增加、删除。
(2)随机读取一个单词,随机隐去单词中的一些字母,规则是:长度为2~4空一个字母,5~7空二个字母,8~10空三个字母,11以上空四个字母。用随机数方式确定隐去哪几个位上的字母,并在屏幕上显示带空格单词。
(3)用户填充空格处的字母,程序判断填充是否正确。
(4)当用户结束游戏时,统计正确率,并输出相应的鼓励语句。
(5)随机读取一个单词,给出音标、中文翻译、词性,默写出相应的单词。
(6)随机获得单词库中一个单词的翻译,再随机选择三个单词,将四个单词随机排列,从中选择翻译对应的单词。
(7)随机获得单词库中一个单词,再随机选择三个单词的翻译,将四个单词的翻译随机排列,从中选择正确的翻译。
(8)增加单词,有增加单个单词和读取文件两种方式,读取文件不需输入文件名,只要按照需求建立指定文件并按照固定格式存储即可。
(9)删除单词,只要输入需要删除单词即可,对于该单词的所有信息都会删除。
注:由于单词中空格不容易辨认,故将空格改为下划线。
(二)设计
1.设计思想
在本次大作业中,采用excel表存储数据,通过pandas.read_excel获取excel表中的数据中,存储在一个DataFrame中,后续所有的操作都在这个Data Frame中完成,最后在完成操作后,将内容写回读取的excel表。
一级菜单包含五部分:1.记单词或测试,2.增加单词,3.删除单词,4.显示所有单词,5.退出。在第一部分中,包含除返回外的四个功能,默写单词、填补单词、根据单词选翻译、根据翻译选单词。在增加单词部分,包含增加单个单词和读取文件增加单个单词,如果选择增加单个单词,则单词、音标、词性、翻译全部需要自己输入,如果选择以读取文件的方式增加单词,则需提前准备好相应的文件,运行时仅需选择相应功能即可。删除单词时仅有删除单个单词这一个功能,仅需输入该单词即可,相关的音标、词性和翻译会一次性删除。
2. 设计表示
函数:
数据类型 函数名称 描述
void My_menu() 显示主菜单,一级菜单
void Recite_words() 显示二级菜单1,对应主菜单的第一个选项,可以进行记单词和测试
void recite_words(num) 选择记单词的方式,如果输入为1,则从头开始记单词,如果输入为2,则从上次退出的地方继续记单词,如果没有之前的记录,则判定为从头开始,如果输入为其他数字,则由Recite_words()判定并反馈
void Stop_recite(num) 输入的数字是单词的编号,以此记录本次记单词退出的位置,内容将会写入文本文档中,如果下次需要继续,则直接调用文件中记录的内容
void write_word_from_memory(choice_num) 选择测试的功能后,如果输入为1,则隐去部分字母,需要补全字母,并统计正确率,如果输入为2,则给予提示(音标、词性、翻译),要默写出单词,如果输入为其他数字,则由Recite_words()判定并反馈
void judge_translate_from_word(choice_num) 选择测试的功能后,如果输入为3,则根据单词的翻译,从四个单词的选项中选择正确的单词,并统计正确率,如果输入为4,则根据单词,从四个翻译中选择与该单词对应的翻译,如果输入为其他数字,则由Recite_words()判定并反馈
boolean judge_in_words(string) 判断输入的字符串(单词)是否在单词库中,如果在则返回False,如果不在则返回True
DataFrame Add_words() 显示二级菜单2,对应主菜单的第二个选项,可以进行单词添加,可以选择单个单词或者读取excel文件的方式添加单词
void Show_all_words() 显示单词库中的所有单词,对应主菜单的第四个选项
DataFrame Delete_words() 显示二级菜单3,对应主菜单的第三个选项,可以进行单词删除,输入单词后,在单词库中寻找,没有找到则返回原来的dataframe,如果找到则返回删除单词后的dataframe文章来源:https://www.toymoban.com/news/detail-484856.html
3. 核心算法
核心算法主要是在记单词和测试、添加单词和删除单词三个部分。
1、在记单词和测试部分:
在记单词部分,如果是从新开始,则直接设置在Dataframe中开始的位置为0,如果是从上一次继续,则读取文件中记录的数字,如果读取到了,则将遍历Dataframe的开始位置设置为读取到的数字,如果没有读取到,则同样设置开始位置为0,从头遍历。在没有遍历完Dataframe的情况下,会持续遍历Dataframe的数据,打印出其中所有的数据,在循环中,如果选择停止,则会记录停止的位置到相应的文件中,然后退出,如果选择继续,则会打印输出下一个单词的信息,如果输入不符合规范,则打印提示,需要重新输入。
在测试部分,如果选择隐去单词部分字母,先建立一个空列表(列表1),在列表长度小于dataframe的行数时,处于循环中,在循环内,先生成一个规定范围的随机数,规定范围是dataframe行号范围,如果随机数在之前生成的列表(列表1)中,则重新生成,如果不在,则将该随机数添加到列表(列表1)中,添加之后,首先获得随机数对应dataframe处的单词,获得单词的长度,根据规则获得需要隐去字母的数量,然后生成随机数,获得相应数量的的随机数,放置到新的列表(列表2)中,对新的列表(列表2)中的数据排序,根据列表(列表2)数据将单词中指定位置的字母替换成下划线并打印出,根据输入字母判断是否正确,统计并计算正确率,根据正确率输出鼓励的话。
如果选择默写单词,在将随机数添加到列表(列表1)中后,直接打印出dataframe该位置单词的词性、音标、中文翻译,然后根据输入的单词判断是否正确,计算正确率,输出鼓励的话。
如果选择根据翻译选单词,开始流程与前面相同,在将随机数添加到列表(列表1)中后,获得dataframe中该随机数处的单词和中文翻译,将单词添加到一个空列表(列表3)中,再从dataframe中随机选择单词,如果单词不在列表(列表3)中,则添加到其中,如果在,则重新选择,直到列表(列表3)中有4个单词,再次生成一个随机数,范围为(0,3),按照前面的方法,通过空列表(列表4)判定是否将列表中(列表3)对应位置单词输出出去,输出所有单词后,输出中文翻译,输入与之对应的单词,计算正确率并输出。
如果选择根据单词选翻译,核心算法与上述(根据翻译选单词)相同,仅选择获取的数据不同。
2、在添加单词部分:
如果选择添加单个单词,可直接设定dataframe中的值,依据现有dataframe的行数,再添加一行,如果选择读取文件添加单词,先生成该文件的dataframe,然后遍历,如果该文件的dataframe中的单词在原dataframe中没有,则直接用loc[]函数设定,如果原dataframe中有,则跳过,最后将修改过的dataframe重新写入原文件中。
3、在删除单词部分:
仅能一个一个单词的删除,先设定标志,如果在dataframe中没有找到要删除的单词,则输出提示并结束,如果找到该单词,则用drop()函数直接删除对应行,然后修改dataframe中后续单词的编号,然后将修改后的dataframe写入源文件中。文章来源地址https://www.toymoban.com/news/detail-484856.html
import random
import pandas as pd
#单词以编号,单词,读音,词性,中文翻译几部分组成
words = pd.read_excel("Words_Library.xlsx")
indexs = words['Number'].notnull()
words = words[indexs]
def Stop_recite(num):#停止背单词,并记录停止时的单词编号
file = open('Record.txt','r+')
file.truncate()
string = str(num)
file.write(string)
file.close()
print("停止完成")
def recite_words(num):#二级菜单功能1
if num == 1:
number = 0
else:
print("您将从退出的位置继续。")
file = open('Record.txt','r')
string = file.read()
if string == '':
print("没有记录,请从新开始")
number = 0
else:
number = int(string)
print("输入next显示下一个单词,输入stop停止")
print("单词的读音、词性和中文翻译:")
while number < len(words['Number']):
print(words['Word'][number],words['Phonetics'][number],words['Word_class'][number],words['Translate'][number])
recite_flag = input()
if recite_flag == 'stop':
Stop_recite(words['Number'][number]-1)
return
while recite_flag != 'next':
print("输入错误,请重新输入")
recite_flag = input()
number = number+1
print("词库结束。")
def write_word_from_memory(choice_num):
judge = []
right_number = 0
false_number = 0
while(len(judge)<len(words['Number'])):
ch = random.randint(0,len(words['Number'])-1)
if ch not in judge:
judge.append(ch)
if choice_num == 1:
string = words['Word'][ch]
word_len = len
到了这里,关于python语言与系统设计 大作业——背单词的小软件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!