by 林绍钦 卡片记忆单词法的简易程序模拟。 核心**:随机产生五十音进行辨识
-
交大云盘下载
-
Gihub地址 Steven147/aiueo
功能需求
在大二下的日语选修课中修读了基础日语,需要在短时间内尽可能的熟练日语假名。虽然我之前接触过假名,但没有高效、完整的记忆过,存在许多漏洞:例如对不常用的假名更陌生、对片假名更加陌生、根据发音默写假名不如读出假名熟练。
这几个问题在语言学习上是共通的,根据以往的学习经验,我想起了卡片记忆法,原理就是通过将固定的词库记在一叠卡片上,随机的翻阅、记忆。这一方法用程序模拟能实现更灵活的功能,于是有了这一款简易的程序。
设计与实现限制:
-
运行环境限制: 在Windows、Mac等桌面操作系统中运行,数据保存在程序数据库中直接调用,在本地运行,不需要联网。
-
设计工具限制 使用Python进行编写,通过PyInstaller进行打包。数据仅仅涉及字符,可以直接使用Python自带数据结构保存在程序源代码中。外包库涉及简易PythonGUI编写库tkinter。
软件与硬件或其它外部系统接口:
- 人机接口:
- 文本框:显示发音、假名
- 按钮:使用若干按钮切换不同的显示模式
- 软件接口:
- 图形界面库:Python GUI 编程(Tkinter) | 菜鸟教程
- 可执行文件导出库:pyinstaller使用方法 - 知乎
性能需求
鉴于小程序功能相当简易,程序应尽可能实现迅速地开启与关闭,占用小,随开随用。
结构设计:定义软件系统各主要部件之间的关系。
软件主体较少(百行左右),因此可以整合到同一个py文件。下面是源代码文件的模块结构,以及互相调用的关系。 程序首先利用tkinter扩展库生成了python-GUI对象;然后基于此对象的方法生成文本框、按钮等控件;接着编写逻辑函数,读取对应数据,处理为显示的数据,并且和控件绑定;最后在程序中循环运行窗口监听按钮操作,调用函数,修改文本显示内容。
aiueo.py
├──{} tkinter ---library manager
├──[] variable ---data initialize
│ ├── romaji
│ └── ...
├──{} botton ---fuction defination
│ ├── botton1
│ └── ...
└──() mainloop ---program entry
#library manager 库文件导入
import tkinter
#data initialize 全局变量定义
romaji = ...
#fuction defination 函数定义,程序逻辑编写
def botton1():
...
#program entry 程序入口,程序窗口启动
#调用函数,调用库文件
if __name__ == "__main__":
...
windows.mainloop()
数据设计:将模型转换成数据结构的定义。
程序涉及到的数据量较小,下图基本包含了五十音学习的所有信息,包含平假名、片假名以及对应的发音。现有Unicode编码平假名、片假名储存。发音则以英文字符储存(日语习惯称为罗马字)。
将图片信息存入字符串与数组,数据结构如下:
#平假名字符串
hiragana = """あいうえお
かきくけこ
さしすせそ
たちつてと
なにぬねの
はひふへほ
まみむめも
やゆよ
らりるれろ
わをん"""
#片假名字符串
katakana = """アイウエオ
カキクケコ
サシスセソ
タチツテト
ナニヌネノ
ハヒフヘホ
マミムメモ
ヤユヨ
ラリルレロ
ワヲン"""
#发音数组
romaji = ['a','i','u','e','o',
'ka','ki','ku','ke','ko',
'sa','si','su','se','so',
'ta','chi','tsu','te','to',
'na','ni','nu','ne','no',
'ha','hi','hu','he','ho',
'ma','mi','mu','me','mo',
'ya','yu','yo',
'ra','ri','ru','re','ro',
'wa','wo','n']
接口设计:
软件图形界面根据常用的使用场景进行分析,最终界面中确定了两个文本框和四个按键。
- 控件设计:控件以图形界面展示的控件对应从上往下分别是
- 文本框一:显示发音
- 文本框二:显示假名
- 按键一(
生成!
):生成一个假名的罗马字表示 - 按键二(
答案?
):显示答案 - 按键三(
学习中
...):切换学习状态- (
学习中
)状态下会始终显示罗马音和假名 - (
显示发音
)状态下只显示罗马音,按下(答案?
)显示答案 - (
显示假名
)状态下只显示假名,按下(答案?
)显示答案
- (
- 按键四(
あ+ア
...):切换假名显示- (
あ+ア
)显示平假名和片假名 - (
あ
)显示片假名 - (
ア
)显示平假名 @import "image2.png"
- (
- 控件代码定义
控件定义使用tkinter规范,首先定义GUI窗口对象
windows
,然后使用label定义函数tkinter.Label
定义两个文本框,使用button定义函数tkinter.Button
定义四个按钮,按钮还要绑定四个逻辑函数botton1
botton2
botton3
botton4
#窗口初始化
windows = tkinter.Tk()
#文本框一初始化
l = tkinter.Label(textvariable = var,...)
l2 = tkinter.Label(textvariable = var2,...)
#文本框一初始化
b = tkinter.Button(text = '生成!', command=botton1,...)
b2 = tkinter.Button(text = "答案?", command=botton2,...)
b3 = tkinter.Button(textvariable = var3, command=botton3, ...)
b4 = tkinter.Button(textvariable = var4, command=botton4, ...)
过程设计:
学习过程可以抽象成不断循环随机生成假名-发音对的过程,通过按键一调用函数botton1()
,生成指定范围内的随机数,可以根据随机数打印假名和发音。同时,学习和测试的需求不同,通过按键二调用函数botton2()
,可以强制显示假名-发音对的所有内容,实现显示答案的效果。最后,根据需求需要定制显示的状态,通过按钮三调用botton3()
切换(学习中
)(显示发音
)(显示假名
)三个状态,通过按键四调用botton4()
切换(あ+ア
)显示平假名和片假名、(あ
)显示片假名、(ア
)显示平假名三个状态。
#botton1 按键一:生成一个假名的罗马字表示
def botton1():
pass
#生成随机数,根据随机数获取假名和发音数据
#根据显示状态刷新文本框显示
#botton2 按键二:显示答案
def botton2():
pass
#强制文本框显示所有内容
#botton3 按键三:切换学习状态
def botton3():
pass
#修改学习状态变量的值
#根据状态刷新文本框显示
#botton4 按键四:切换假名显示
def botton4():
pass
#修改显示状态变量的值
#根据状态刷新文本框显示
- 首先不断点击(
生成!
)按键,可以随机浏览发音与对应的平假名、片假名。 - 初步记忆后开始自测,点击(
学习中
)按钮,这时会切换到(显示发音
),此时是对假名的测试,点击(生成!
)生成新的发音,自行回忆发音对应的假名,如果对答案把握可以继续点击(生成!
),没有把握便可以点击(答案?
)显示答案。 - 根据发音记忆假名记忆完毕后,可以根据假名记忆发音,点击切换到(
显示假名
)状态,重复上面的记忆流程。 - 同样,如果只需要记忆片假名,可以点击(
あ+ア
)切换假名显示,继续重复上面的记忆流程。 - 不断重复直到基本熟练所有的假名及对应发音。
@import ".\code\aiueo_win.py"