Python之小词典应用

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:希望有大神看到能够指点一下,谢谢咯!

猜你喜欢

转载自blog.csdn.net/sinat_38617018/article/details/80413016