电子英汉词典

import csv

导入CSV模块,以便在程序中读取和写入CSV文件。

函数 is_chineseis_english

def is_chinese(text):
    """判断文本是否为中文"""
    return all('\u4e00' <= char <= '\u9fa5' for char in text)

定义 is_chinese 函数,检查文本中的所有字符是否都是中文字符。

def is_english(text):
    """判断文本是否为英文"""
    return all(char.isalpha() and (char.islower() or char.isupper()) for char in text)

定义 is_english 函数,检查文本中的所有字符是否都是英文字母。

函数 add_entry

def add_entry():
    """向词典中添加新的词条"""
    while True:
        cn = input("请输入中文(输入#返回主菜单):")
        en = input("请输入英文(输入#返回主菜单):")

定义 add_entry 函数,在一个无限循环中提示用户输入中文和英文词条。输入 # 返回主菜单。

        if cn == en == '#':
            break

如果用户输入 #,则退出循环。

        if not is_chinese(cn):
            print("中文输入有误,请重新输入")
            continue

检查中文输入是否有效,如果无效,提示错误并继续循环。

        if not is_english(en):
            print("英文输入有误,请重新输入")
            continue

检查英文输入是否有效,如果无效,提示错误并继续循环。

        with open('dicts.csv', 'a+', encoding='utf-8-sig', newline='') as dict_file:
            csv_writer = csv.DictWriter(dict_file, fieldnames=["中文", "英文"])
            dict_file.seek(0)
            data = list(csv.DictReader(dict_file))
            if any(row["中文"] == cn and row["英文"] == en for row in data):
                print('对应词条已存在,请重试!')
                continue

打开 dicts.csv 文件用于追加内容,同时创建一个 csv.DictWriter 对象写入新词条。读取现有数据,检查词条是否已存在,如果存在则提示用户重试并继续循环。

            csv_writer.writerow({"中文": cn, "英文": en})
            print("已保存!")
            break

如果词条不存在,写入新词条并提示保存成功,然后退出循环。

函数 display_entries

def display_entries():
    """显示词典中的所有词条"""
    print("—————————————")

定义 display_entries 函数,用于显示词典中的所有词条,首先打印分隔线。

    with open('dicts.csv', 'r', encoding='utf-8-sig') as dict_file:
        reader = csv.DictReader(dict_file)
        print("语言| 中文 英文")
        for row in reader:
            print("词组| {} {}".format(row["中文"], row["英文"]))

打开 dicts.csv 文件进行读取,创建一个 csv.DictReader 对象读取词条。打印标题行,然后遍历并打印每个词条。

    print("——————————————")

最后打印结束分隔线。

函数 modify_entry

def modify_entry():
    """修改词典中的词条"""
    while True:
        search_term = input("请输入要修改的内容(按什么内容查找)(输入#返回主菜单):")
        if search_term == '#':
            break

定义 modify_entry 函数,在一个无限循环中提示用户输入要修改的词条。如果用户输入 #,则退出循环。

        new_cn = input("请输入新的中文:")
        new_en = input("请输入新的英文:")

提示用户输入新的中文和英文词条。

        if not is_chinese(new_cn):
            print("中文输入有误,请重新输入")
            continue

检查新的中文输入是否有效,如果无效,提示错误并继续循环。

        if not is_english(new_en):
            print("英文输入有误,请重新输入")
            continue

检查新的英文输入是否有效,如果无效,提示错误并继续循环。

        with open('dicts.csv', 'r', encoding='utf-8-sig') as dict_file:
            data = list(csv.DictReader(dict_file))
            entry_found = False
            for row in data:
                if row["中文"] == search_term or row["英文"] == search_term:
                    row["中文"] = new_cn
                    row["英文"] = new_en
                    entry_found = True
                    break

打开 dicts.csv 文件进行读取,将数据读取到列表中。查找并修改匹配 search_term 的词条,如果找到则更新其中文和英文词条,并设置 entry_foundTrue

            if not entry_found:
                print("未找到对应的单词,请检查")
                continue

如果未找到匹配的词条,提示用户并继续循环。

        with open('dicts.csv', 'w', encoding='utf-8-sig', newline='') as dict_file:
            csv_writer = csv.DictWriter(dict_file, fieldnames=["中文", "英文"])
            csv_writer.writeheader()
            csv_writer.writerows(data)
        print("已修改!")
        break

如果找到并修改了词条,打开 dicts.csv 文件进行写入,写入标题行和所有数据行,然后提示修改成功并退出循环。

函数 delete_entry

def delete_entry():
    """删除词典中的词条"""
    while True:
        search_term = input('请输入你要删除的单词(中文或者英文)(输入#返回主菜单):')
        if search_term == '#':
            break

定义 delete_entry 函数,在一个无限循环中提示用户输入要删除的词条。如果用户输入 #,则退出循环。

        with open('dicts.csv', 'r', encoding='utf-8-sig') as dict_file:
            data = list(csv.DictReader(dict_file))
            new_data = [row for row in data if row["中文"] != search_term and row["英文"] != search_term]
            if len(data) == len(new_data):
                print("没有找到对应的单词,请检查!")
                continue

打开 dicts.csv 文件进行读取,将数据读取到列表中。过滤出不匹配 search_term 的词条,如果没有变化则提示用户并继续循环。

        with open('dicts.csv', 'w', encoding='utf-8-sig', newline='') as dict_file:
            csv_writer = csv.DictWriter(dict_file, fieldnames=["中文", "英文"])
            csv_writer.writeheader()
            csv_writer.writerows(new_data)
        print(f"已删除 '{search_term}'!")
        break

如果过滤成功,打开 dicts.csv 文件进行写入,写入标题行和过滤后的数据,然后提示删除成功并退出循环。

函数 find_entry

def find_entry():
    """查找词典中的词条"""
    while True:
        search_term = input('请输入你要查找的单词的中文(输入#返回主菜单):')
        if search_term == '#':
            break

定义 find_entry 函数,在一个无限循环中提示用户输入要查找的中文词条。如果用户输入 #,则退出循环。

        if not is_chinese(search_term):
            print("输入错误,请输入中文!")
            continue

检查输入是否为有效的中文,如果无效,提示错误并继续循环。

        with open('dicts.csv', 'r', encoding='utf-8-sig') as dict_file:
            data = list(csv.DictReader(dict_file))
            translation = next((row["英文"] for row in data if row["中文"] == search_term), None)

打开 dicts.csv 文件进行读取,将数据读取到列表中。查找匹配 search_term 的英文词条,如果找到则保存到 translation 变量。

        if translation:
            print(f"'{search_term}' 对应的英文是 '{translation}'")
            break

如果找到对应的英文词条,打印结果并退出循环。

        else:
            print(f"没有找到 '{search_term}' ,请重新输入!")

如果未找到对应的词条,提示用户并继续循环。

主程序 main

def main():
    """主程序入口"""
    with open('dicts.csv', 'a+', encoding='utf-8-sig', newline='') as dict_file:
        dict_file.seek(0)
        if not dict_file.read(1):
            csv_writer = csv.DictWriter(dict_file, fieldnames=["中文", "英文"])
            csv_writer.writeheader()

定义 main 函数,首先打开 dicts.csv 文件以追加方式写入,并检查文件是否为空。如果文件

为空,写入标题行。

    passwd_book = {'yuan': "123456", 'user': 'user', 'admin': 'admin'}
    admin_users = ['yuan', 'admin']

定义用户密码字典 passwd_book 和管理员用户列表 admin_users

    while True:
        print("——————欢迎使用电子英汉词典——————")
        user_id = input("请输入用户名(输入q退出系统):")
        if user_id == 'q':
            print("程序退出")
            break

在一个无限循环中,显示欢迎信息并提示用户输入用户名。如果用户输入 q,则退出循环。

        passwd = input("请输入密码:")
        if user_id in passwd_book and passwd == passwd_book[user_id]:
            if user_id in admin_users:

提示用户输入密码,如果用户名和密码匹配,并且用户是管理员用户,则显示管理员菜单。

                while True:
                    print(f"欢迎您,{user_id}!您有词典的完全控制权限,请按提示选择")
                    print('1. 词条录入')
                    print('2. 信息显示')
                    print('3. 词条修改')
                    print('4. 词条删除')
                    print('5. 单词查询')
                    print('6. 退出登录')
                    choice = input('请按提示输入数字:')
                    if choice == '6':
                        print("已登出!")
                        break

在一个无限循环中,显示管理员菜单并提示用户输入选择。如果用户选择 6,则退出循环。

                    elif choice == '1':
                        add_entry()
                    elif choice == '2':
                        display_entries()
                    elif choice == '3':
                        modify_entry()
                    elif choice == '4':
                        delete_entry()
                    elif choice == '5':
                        find_entry()
                    else:
                        print("输入错误,请重新输入!")

根据用户的选择,调用相应的函数。如果选择无效,提示用户重新输入。

            else:
                while True:
                    print(f"{user_id}, 您好!您只有显示和查找的权限,请按键选择!")
                    print('1. 信息显示')
                    print('2. 单词查询')
                    print('3. 退出登录')
                    choice = input('请按提示输入数字:')
                    if choice == '3':
                        print("已登出!")
                        break
                    elif choice == '1':
                        display_entries()
                    elif choice == '2':
                        find_entry()
                    else:
                        print("输入错误,请重新输入!")

如果用户不是管理员,则显示普通用户菜单,并提示用户输入选择。如果选择无效,提示用户重新输入。

        else:
            print("用户不存在或密码错误,请重试!")

如果用户名或密码不匹配,提示用户重新输入。

if __name__ == '__main__':
    main()

当脚本作为主程序运行时,调用 main 函数启动程序。