零基础 学 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=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 + " --- 查找失败")
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"] + " --- 增加成功")
def update(w):
 global words
 i=0
 j=len(words)-1
 while i<=j:
 m=(i+j)//2
 if words[m]["word"] == w["word"]:
 words["note"]=w["note"]
 print(w["word"]+" --- 更新成功")
 return
 elif words[m]["word"]>w["word"]:
 j=m-1
 else:
 i=m+1
 print(w["word"] + " --- 查找失败")
def delete(word):
 global words
 i=0
 j=len(words)-1
 while i<=j:
 m=(i+j)//2
 if words[m]["word"] == word:
 del words[m]
 print(word+" --- 删除成功")
 return
 elif words[m]["word"]>word:
 j=m-1
 else:
 i=m+1
 print(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 分别执行显示、查找、增加、更新、删除的操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值