一、项目目标
实现一个简易的英文字典管理和查询程序(包括显示、查找、增加、更新、删除、退出)
实现效果如下:
二、项目设计
1、显示
逻辑是使用了一个循环来遍历词汇列表,然后通过print语句输出每个单词和注释的内容且用正则表达式来实现每一个单词和注释的对齐
首先我们预先准备几个单词来测试显示功能
words = [{"word": "fuse", "note": "保险丝,导火索;熔化"},
{"word": "fort", "note": "堡垒,城堡"},
{"word": "revenge", "note": "报复,报仇;为...报仇"}]
接着写一个show()函数来实现显示功能
def show():
for w in words:
print("% -16s : % s" % (w["word"], w["note"]))
print()
2、查找
逻辑是这是一个二分查找的实现,使用了一个循环来遍历词汇列表,然后通过print语句输出每个单词和注释的内容。
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、增加
逻辑是在函数内部,首先创建了一个空字典w,然后通过input函数分别获取用户输入的单词和注释,并将它们存储到字典w中的"word"和"note"键对应的值中。最后,函数返回这个包含单词和注释信息的字典w。
def enter():
w={}
w["word"] = input("单词:")
w["note"] = input("注释:")
return w
再写一个插入函数,逻辑是在函数内部,首先通过global关键字声明变量words为全局变量,以便在函数内部可以修改它。然后,使用二分查找的方式找到应该插入的位置。如果发现要插入的单词已经存在于词汇列表中,就输出一条提示信息并返回。否则,通过insert方法将新的单词和注释插入到词汇列表的正确位置,并打印一条成功插入的提示信息。
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、更新
逻辑是在函数内部,首先通过global关键字声明变量words为全局变量,以便在函数内部可以修改它。然后,使用二分查找的方式找到需要更新的单词的位置。如果找到了对应的单词,就更新该单词的注释内容并打印一条更新成功的提示信息;如果未找到对应的单词,则输出一条查找失败的提示信息。
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[m]["note"] = w["note"] # 使用正确的列表索引来更新 note
print(w["word"] + "---更新成功")
return
elif words[m]["word"] > w["word"]:
j = m-1
else:
i = m+1
print(w["word"] + "---查找失败")
5、删除
逻辑是在函数内部,首先通过global关键字声明变量words为全局变量,以便在函数内部可以修改它。然后,使用二分查找的方式找到需要删除的单词的位置。如果找到了对应的单词,就使用del语句将该单词从词汇列表中删除,并打印一条删除成功的提示信息;如果未找到对应的单词,则输出一条查找失败的提示信息。
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+"---查找失败")
6、退出以及全部方法的实现
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")
三、完整代码
words = [{"word": "fuse", "note": "保险丝,导火索;熔化"},
{"word": "fort", "note": "堡垒,城堡"},
{"word": "revenge", "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[m]["note"] = w["note"] # 使用正确的列表索引来更新 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")