Python之小词典应用
这个学期专业开了python课,最后老师布置了一个作业:用python制作一个英语小词典的应用,遂做了一下。
题目要求:
制作英文学习词典。编写程序制作英文学习词典,词典有三个基本功能:添加、查询、和退出。程序读取源文件路径下的txt格式词典文件,若没有就创建一个。词典文件存储格式为“英文单词 中文单词”,每行仅有一对中英释义。程序会根据用户的选择进入相应的功能模块,并显示相应的操作提示。当添加的单词已存在时,显示“该单词已添加到字典库”;当查询的单词不存在时,显示“字典库中未找到该单词”,用户输入其它选项时,提示“输入有误”。
思路:
由于题目要求的是用txt文件作为源文件,所以找了一个六级的txt文件作为词库。将txt文件转换为csv文件,由于csv文件的每一行为一个list,所以以list[0]作为英文单词,而list[1…]作为中文释义或其它。
增加操作即把单词存入txt文件,然后更新csv文件。
查找操作即遍历csv文件的所有list[0],匹配则输出。
生词本则是一个即兴操作。
待解决的点:
- 整体python的格式和命名规范存在问题。
- 路径的操作存在问题。
- 查找是否成功的flag在必须在查找之后才能返回,若是查找成功,则这一过程必须执行一次输出语句,如何才能保证查找成功后不输出又可返回flag,我是通过从新定义一个方法解决,但是感觉太不科学了。
代码:
# -*- coding: utf-8 -*-
#
# dictionary.py -
#
# Created by YuanPeng on 2018/5/16
#
import csv
class Dictionary(object):
# 类的构造方法
def __init__(self, filepath):
self.filepath = filepath # 读取文件路径
self.savepath = 'test_result.csv' # 保存文件路径
self.newpath = 'test_newword.csv' # 生词本路径
# 将txt文件转换为csv文件
def new_csv(self):
with open(self.filepath, 'r') as file: # 读取txt文件的所有行
lines = file.readlines()
count = len(lines)
with open(self.savepath, 'w', newline='') as csvfile:
csv_writer = csv.writer(csvfile, dialect='excel') # 不加newline和dialect后每一行会自动添加一个'\n'
for line in lines:
new_line = str(line)
oneline = new_line.strip() # 删去空白
oneline.replace('. ', '.') # 排除'. '的干扰
oneline.replace(', ', ',') # 排除', '的干扰
oneline.replace('; ', ';') # 排除'; '的干扰
data = oneline.split(' ') # 以空格分开 形成一个data列表
csv_writer.writerow(data)
# 添加单词
def add(self, str_word):
list_word = str_word.split(' ')
if self.search_flag(str(list_word[0])) is False:
with open(self.filepath, 'a', newline='') as txtfile: # a为追加写模式 要追加到txt文件(源文件)里
txtfile.write(str_word + '\n')
print('添加成功')
self.new_csv() # 更新csv文件
else:
print('该单词已存在于字典库')
# 查找单词 输出释义
def search(self, english):
with open(self.savepath, 'r') as csvfile:
csv_reader = csv.reader(csvfile)
for line in csv_reader:
if english == line[0]: # 每一行作为一个list[0]:english, list[1], list[2]...:chinese
for foot in range(len(line)): # 每一行可能有多个释义
print(line[foot])
answer = input('是否需要添加到生词本(Y or N):')
if answer == 'Y':
self.new_word(line)
else:
return
# 查找单词的flag
def search_flag(self, english):
success_flag = False # 查找成功的flag
with open(self.savepath, 'r') as csvfile:
csv_reader = csv.reader(csvfile)
for line in csv_reader:
if english == line[0]: # 每一行作为一个list[0]:english, list[1], list[2]...:chinese
success_flag = True
break
return success_flag
# 生词本
def new_word(self, list_word):
with open(self.newpath, 'a', newline='') as csvfile:
csv_writer = csv.writer(csvfile, dialect='excel')
csv_writer.writerow(list_word)
# 展示生词本
def display_new(self):
with open(self.newpath, 'r') as csvfile:
csv_reader = csv.reader(csvfile)
for line in csv_reader:
print(line)
# 展示所有单词
def display(self):
with open(self.savepath, 'r') as csvfile:
csv_reader = csv.reader(csvfile)
for line in csv_reader:
print(line)
# 显示菜单
def menu(self):
print("*******************************")
print(" 欢迎使用souldic词典")
print(" 1.查询 2.增加")
print(" 3.所有单词 4.生词本")
print(" 5.退出 ")
print("*******************************")
while 1:
choice = eval(input("请输入你的选择:"))
if choice == 1: # python没有switch 所以用if
word = input("请输入你要查询的单词:")
if self.search(word) is False:
print("词库尚未收录该单词")
elif choice == 2:
str_word = input("请输入你要加入的单词和释义:(中间以空格隔开)")
self.add(str_word)
elif choice == 3:
self.display()
elif choice == 4:
self.display_new()
elif choice == 5:
exit()
else:
print("输入有误,请重新输入!")
if __name__ == '__main__':
dic = Dictionary('test.txt')
dic.new_csv()
dic.menu()
ps:希望有大神看到能够指点一下,谢谢咯!