admin 管理员组文章数量: 1086019
零基础 学 python开发 (Genius套餐A) 二十六
夜光序言:
能够让人从癫狂中沉静,从暴戾中平和的力量,就是所谓的爱情吧~~
正文:
4.7 实践项目:我的英文字典
4.7.1 项目目标
实现一个简单的英语字典查询与管理程序。一个英文单词包含单词与单词的注释,结构如下:
words=[{"word":"about","note":"在附近,关于"},{"word":"post","note":"邮寄、投递"}]
所有的单词组成一个列表,每个单词与注释成为一个字典,程序的功能就是管理这样一组单词记录,程序有查找单词、增加单词、更新注释、删除单词、显示单词等功能。
程序运行的效果如下:1.显示 2.查找 3.增加 4.更新 5.删除 6.退出
请选择(1,2,3,4,5):1
about : 在附近,关于
post : 邮寄、投递
4.7.2 项目设计
1、单词存储
数据使用全局变量 words=[]存储,它是一个列表,每个元素是一个字典,字典是单词与注释的信息。
2、单词查找
为了加快查找的速度,我们把单词按字典顺序从小到大排列,查找时采用二分法查找~~~
二分法查找是一种高效的查找方法,在 words 中查找单词 w,主要思想如下:
(1) 设置 i=0,j=len(words)-1,即 i、j 是第一与最后一个下标;
(2) 如果 i<=j 就计算 m=(i+j)//2,m 是中间一个下标,如果 i>j 程序结束;
(3) 如果 words[m]["word"]==w["word"],那么说明 words[m]就是要找的单词,m 就是这个单词在列表中的位置;
(4) 如果 words[m]["word"]>w["word"],说明 word[m]这个单词比要找的单词大,由于是从小到大排序的,因此设置 j=m-1,构造[i,m-1]范围回到(2 继续)查找;
(5) 如果 words[m]["word"]<w["word"],说明 word[m]这个单词比要找的单词小,由于是从小到大排序的,因此设置 i=m+1,构造[m+1,j]范围回到(2 继续)查找;
(6) 如果全部查找完毕没有找到单词,那么这个单词是新的单词,它应该放在 words[i]的位置。
查找函数 seek 如下:
def seek(word):
i=0
j=len(words)-1
while i<=j:
m=(i+j)//2
if words[m]["word"] == word:
print("%-16s : %s" % (word, words[m]["note"]))
return
elif words[m]["word"]>word:
j=m-1
else:
i=m+1
print(word + " --- 查找失败")
3、插入单词
这是根据二分法查找思想设计的插入函数,把新的单词插入到 words[i]的位置:
def insert(w):
global words
i=0
j=len(words)-1
while i<=j:
m=(i+j)//2
if words[m]["word"] == w["word"]:
print(w["word"]+" --- 已经存在")
return
elif words[m]["word"]>w["word"]:
j=m-1
else:
i=m+1
words.insert(i,w)
print(w["word"] + " --- 增加成功")
在单词更新与删除中也采用二分法查找单词,
4.7.3 项目实践
words=[{"word":"about","note":"在附近,关于"},{"word":"post","note":"邮寄、投递"}]
def show():for w in words:print("%-16s : %s" % (w["word"],w["note"]))print()
def enter():w={}w["word"]=input("单词:")w["note"]=input("注释:")return w
def seek(word):i=0j=len(words)-1while i<=j:m=(i+j)//2if words[m]["word"] == word:print("%-16s : %s" % (word, words[m]["note"]))returnelif words[m]["word"]>word:j=m-1else:i=m+1print(word + " --- 查找失败")
def insert(w):global wordsi=0j=len(words)-1while i<=j:m=(i+j)//2if words[m]["word"] == w["word"]:print(w["word"]+" --- 已经存在")returnelif words[m]["word"]>w["word"]:j=m-1else:i=m+1words.insert(i,w)print(w["word"] + " --- 增加成功")
def update(w):global wordsi=0j=len(words)-1while i<=j:m=(i+j)//2if words[m]["word"] == w["word"]:words["note"]=w["note"]print(w["word"]+" --- 更新成功")returnelif words[m]["word"]>w["word"]:j=m-1else:i=m+1print(w["word"] + " --- 查找失败")
def delete(word):global wordsi=0j=len(words)-1while i<=j:m=(i+j)//2if words[m]["word"] == word:del words[m]print(word+" --- 删除成功")returnelif words[m]["word"]>word:j=m-1else:i=m+1print(word + " --- 查找失败")
while True:print("1.显示 2.查找 3.增加 4.更新 5.删除 6.退出")s=input("请选择(1,2,3,4,5):")if s=="1":show()elif s == "2":word = input("单词:")seek(word)elif s=="3":w=enter()insert(w)elif s=="4":w=enter()update(w)elif s=="5":word=input("单词:")delete(word)elif s=="6":break
print("Finished")
夜光:主程序部分是一个无限循环,只有选择 6 后才退出并结束,选择 1、2、3、4、5 分别执行显示、查找、增加、更新、删除的操作。
本文标签: 零基础 学 python开发 (Genius套餐A) 二十六
版权声明:本文标题:零基础 学 python开发 (Genius套餐A) 二十六 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1693587431a230858.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论