零基础 学 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的课后题好难_小甲鱼《零基础学习Python》课后笔记(二十六):字典——当索引不好用时2...
测试题 0.Python的字典是否支持一键(Key)多值(Value)? 不支持.对相同的键赋值会覆盖原来的值.>>> dict2 = {1:'one',1:'two',3:'thr ...
- 【零基础学Java】—throw关键字(四十六)
[零基础学Java]-throw关键字(四十六) 一.throw关键字 public class demo {public static void main(String[] args) {//创建i ...
- 【零基础学Java】—static关键字概述(十六)
[零基础学Java]-static关键字概述(十六) 一.static关键字 二.static关键字修饰成员变量 /*** @author :CaiCai* @date : 2022/4/8 11:1 ...
- 零基础 学 python开发 (Genius套餐A) 二十九
夜光序言: 恋人分手之际,还能把话说得平和得体的,肯定是已然变心的那一个. 正文: 5.3 对象初始化 5.3.1 目标 面向对象的程序设计中在对象实例化时往往要对实例做一些初始化工作,例如设置 ...
- 零基础 学 python开发 (Genius套餐A) 四十一
夜光序言: 人,可以爱到什么地步? 爱到,表面仍能不动声色微笑,内心却以常人难以发觉的惊人速度衰老,直至最后枯竭. 正文: 7.5 实践项目 学生成绩管理 7.5.1 目标 学生成绩记录包括学号(pN ...
- 【零基础学Python】爬虫篇 :第十四节--爬虫+词云解决实际问题
十行代码帮助小姐姐给偶像送上最真挚的礼物----爬虫词云齐上阵,熬夜精心制作 905.png#pic_center) 故事背景 最近嘛,有位朋友找我帮忙嘛,希望我帮她做一份礼物,送给一直鼓舞着她不断向 ...
- 小甲鱼python笔记_小甲鱼《零基础学习Python》课后笔记(二十九):文件——一个任务...
动动手 0.编写一个程序,接受用户的输入并保存为新的文件,程序实现如图: 代码如下:f_name = input('请输入文件名:') f = open(f_name, 'wt') print(&qu ...
- 小甲鱼《零基础学习Python》课后笔记(二十八):文件——因为懂你,所以永恒
测试题 0.下边只有一种方式不能打开文件,请问是哪一种,为什么? f = open('E:/test.txt','w') # A f = open('E:\test.txt','w') # B f = ...
- python语言程序设计难不难_零基础学Python编程开发难度大吗?从哪学起?
转行零基础学Python编程开发难度大吗?从哪学起? 近期很多小伙伴问我,如果自己转行学习Python,完全0基础能否学会呢?Python的难度到底有多大? 今天,小编就来为大家详细解读一下这个问题. ...
最新文章
- leetcode 组合总和
- UML类图与类的关系详解【转】
- Ukiyo-e faces dataset 浮世绘面孔数据集
- 第五章模糊查询和聚合函数
- SQLi LABS Less 9 时间盲注
- 阿里京东被怼假货泛滥;谷歌 CEO 承认中国版搜索 App 存在;YouTube 全球宕机 | 极客头条...
- ajax fetch api,fetch 简介: 新一代 Ajax API
- 数据-第18课-栈与递归
- Confluence 6 审查日志的对象
- 2022年视频号的五大机会,教育商家该如何上车?
- Android面试准备复习之Android知识点大扫描 .
- AMiner会议论文推荐第七十五期
- android studio Emulator is outdated
- 小功能⭐️Untiy组合键检测
- CAD怎么导出为图片?一分钟解决
- Boost.Geometry中的几何要素(Primitives)
- 计算机网络技术店面取名,适合电脑店的名字大全 霸气的电脑店铺起名
- 张洪斌 html css,网页设计与制作张洪斌 刘万辉体设计.doc
- MATLAB的应用 Applications of MATLAB in engineering
- 重装win10操作系统(制作系统U盘方法)
热门文章
- 桌面客户端开发框架技术选型
- 酒店行业如何建立积分体系促进会员消费?
- 简述计算机语言的发展史
- 三国志战略版360区S4服务器合并信息,三国志战略版s3赛季如何合区
- setTimeout面试题
- linux 没有那个文件或目录,Linux 解决 bash ./ 没有那个文件或目录 的方法
- 创建TLS客户端凭据时发生严重错误,内部错误状态为10013
- 机器学习之贝叶斯网络(概率流动的影响性、有效迹(active--trail)、网络的构建)
- 理解SetCapture、ReleaseCapture、GetCapture
- 奔驰事件疑宝马紧急预案;巴黎圣母院失火;郑大学生勾连间谍!