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) 二十六