电子英汉词典
- Python
- 2024-06-25
- 163热度
- 0评论
import csv
导入CSV模块,以便在程序中读取和写入CSV文件。
函数 is_chinese
和 is_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_found
为 True
。
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
函数启动程序。