只要过了假名这一关,就可以愉快地拼读各式高达 / 忍术 / 小电影(咦)的名字了啊,简直打开新世界的大门有木有。但是作为一个在一学期里能从图书馆的书丢到学生证和手机的记忆力战五渣,这扇大门我实在是迟迟不敢推开啊……直到我想起了 Python 大法。

记忆作为一项重复性很强的活动,简直天生适合脚本化辅助。而对五十音图来说,需要记住的不外乎百来个 {の: 'no'} 格式的键值对。废话少说,撸一个小脚本干好这件事吧——毕竟 UNIX 哲♂学啊。

这个脚本至少要有这几个关键的功能:

  • 从文本里读取假名 - 罗马音。毕竟键值对是一种常见的记忆格式。今天我把五十音记下来了,明天就可以拿来记十二星座啦三十六计啦七十二宫啦一百零八将啦什么的(咦)。
  • 设定每次重复的假名范围。不论是瞬时记忆还是长期记忆,其广度毕竟是有限制的。譬如我的脑子一次塞进五六个完全陌生的概念就很容易宕机(哭)。所以每次通过设置行号范围等方式来限制每次循环的重复范围是很有必要的。
  • 在一定的随机选择次数内,不应出现重复。直接用 random 模块生成的伪随机整数很容易出现连续的重复值,这是很影响体(bi)验(ge)的。
  • 对不熟悉的假名,通过标记来提高其出现率;对熟悉的假名,可以予以剔除。我在实践了几次后发现剔除的方式要比提高出现率来得好。因为每次重复记忆的假名范围基本不会超过 20 个,这时候提高出现率还不如直接把已经很熟悉的假名排除掉来的高效("の" 笑而不语…)

于是就有了下面这份简单的 Python 代码。

#coding=utf-8
import random, sys
reload(sys)
sys.setdefaultencoding('utf8')
def start():
try:
pos = raw_input("Set line number range(x-y), enter for all: ")
except (EOFError, KeyboardInterrupt):
print "\nBye."
exit()

if pos == "":
start = 0
end = len(items) - 1
else:
start = int(pos.split('-')[0]) - 1
end = int(pos.split('-')[1]) - 1
print "Append ! if sure."
recite(items, start, end)
def recite(items, start, end):
sure_num, used_num = [], []
repeat = False
while True:
# repeat is False if answer is right.
if repeat is False:
while True:
if len(sure_num) == end - start + 1:
print "\nFinished, now restart."
return
chosen = random.randint(start, end)
if chosen not in sure_num and chosen not in used_num:
used_num.append(chosen)
break
try:
input = raw_input('%s > ' % items[chosen][0]).replace(' ', '')
except (EOFError, KeyboardInterrupt):
print "\nBye."
exit()

if input.replace('!', '') == items[chosen][1].split('\n')[0]:
if input.find('!') > 0:
sure_num.append(chosen)
print "Correct."
repeat = False
else:
print "Incorrect."
repeat = True

remain = end - start + 1 - len(sure_num)
while (len(used_num) > remain / 2):
del(used_num[0])
if __name__ == "__main__":
with open(sys.argv[1]) as f:
lines = f.readlines()

items, tmp = [], []
for l in lines:
tmp.append(l.decode('utf-8').split(' ')[0])
tmp.append(l.decode('utf-8').split(' ')[-1])
items.append(tmp)
tmp = []

while True:
start()

使用方式:

python recite.py data.txt

然后再分享一份五十音文本吧:

あ	a
ア a
い i
イ i
う u
ウ u
え e
エ e
お o
オ o
か ka
カ ka
き ki
キ ki
く ku
ク ku
け ke
ケ ke
こ ko
コ ko
さ sa
サ sa
し shi
シ si
す su
ス su
せ se
セ se
そ so
ソ so
た ta
タ ta
ち chi
チ chi
つ tsu
ツ tsu
て te
テ te
と to
ト to
な na
ナ na
に ni
二 ni
ぬ nu
ヌ nu
ね ne
ネ ne
の no
ノ no
は ha
ハ ha
ひ hi
ヒ hi
ふ hu
フ hu
へ he
ヘ he
ほ ho
ホ ho
ま ma
マ ma
み mi
ミ mi
む mu
ム mu
め me
メ me
も mo
モ mo
や ya
ヤ ya
ゆ yu
ユ yu
よ yo
ヨ yo
ら ra
ラ ra
り ri
リ ri
る ru
ル ru
れ re
レ re
ろ ro
ロ ro
わ wa
ワ wa
を wo
ヲ wo
ん n
ン n

完成记忆上面那份以后,就可以尝试记忆下面的这一份了

が	ga
ガ ga
ぎ gi
ギ gi
ぐ gu
グ gu
げ ge
ゲ ge
ご go
ゴ go
ざ za
ザ za
じ ji
ジ ji
ず zu
ズ zu
ぜ ze
ゼ ze
ぞ zo
ゾ zo
だ da
ダ da
ぢ di
ヂ di
づ du
ヅ du
で de
デ de
ど do
ド do
ば ba
バ ba
び bi
ビ bi
ぶ bu
ブ bu
べ be
ベ be
ぼ bo
ボ bo
ぱ pa
パ pa
ぴ pi
ピ pi
ぷ pu
プ pu
ぺ pe
ペ pe
ぽ po
ポ po
きゃ kya
キャ kya
きゅ kyu
キュ kyu
きょ kyo
キョ kyo
しゃ sha
シャ sha
しゅ shu
シュ shu
しょ sho
ショ sho
ちゃ cha
チャ cha
ちゅ chu
チュ chu
ちょ cho
チョ cho
にゃ nya
ニャ nya
にゅ nyu
ニュ nyu
にょ nyo
ニョ nyo
ひゃ hya
ヒャ hya
ひゅ hyu
ヒュ hyu
ひょ hyo
ヒョ hyo
みゃ mya
ミャ mya
みゅ myu
ミュ myu
みょ myo
ミョ myo
りゃ rya
リャ rya
りゅ ryu
リュ ryu
りょ ryo
リョ ryo
ぎゃ gya
ギャ gya
ぎゅ gyu
ギュ gyu
ぎょ gyo
ギョ gyo
じゃ ja
ジャ ja
じゅ ju
ジュ ju
じょ jo
ジョ jo
びゃ bya
ビャ bya
びゅ byu
ビュ byu
びょ byo
ビョ byo
ぴゃ pya
ピャ pya
ぴゅ pyu
ピュ pyu
ぴょ pyo
ピョ pyo

对了,怎么能落下十分纯洁的《五十音图图像记忆法》!

五十音图图像记忆法
あ ア a
‘あ’看上去像是一个武术高手施展了一个扫堂腿,敌人肯定被扫得冷落花流水,啊的一声倒下去啦,所以读a。‘ア’片假名指示出了你发音的样子,嘴巴张开,舌头放到下面,a。
い イ i
‘い’通汉字‘以’,也念i,所以很好记的。‘イ’呢,我每次看到它就会想起汉字‘依’,也就记住了。
う ウ u
‘う’表示你发音时的样子,上嘴唇倾斜,下巴朝上撅,就发出了u。‘ウ’代表一个人,左胳膊好好的,右胳膊给生生截掉一半,他疼啊,在55的哭呢。念u。
え エ e
‘え’通汉字‘衣’,读音稍微改变了一些,成了e。‘エ’可以看成大写的英文字母I,很自然就读出e音来了。
お オ o
‘お’是一个人帽子被风吹走了,他急了,嗷嗷叫着去追帽子,所以读o。‘オ’片假名像是哈里波特穿上了一件魔法斗篷在空中飞翔,好爽啊,他激动的嗷嗷大叫。读o。
か カ ka
‘か’各位应该比较熟悉吧?在漫画中经常会出现这个字,表示卡卡的声音,这个假名应该记起来不难,再说,力量给人的感觉就是干净利索的,发ka也让人感到有力。‘カ’跟‘か’很接近,书写正规些而已,容易记,ka。
き キ ki
‘き’是一把刀子在刻东西,已经刻了一点了,刻就是ki了。‘キ’只剩下刀子了,但也是刻,ki。
く ク ku
‘く’很容易记,你把嘴的角度调整成‘く’的样子,是不是自然而然就发出了ku音呢?‘ク’是一只没有眼珠眼睛(是侧面图,片假名‘タ’是有眼珠的眼睛),为什么看不到眼珠呢?因为她在哭,念ku。
け ケ ke
‘け’是一扇门,门锁被打开了,门自然就开了,读ke。‘ケ’片假名是眼睛,但明显要比‘ク’大,因为眼睛张开了,(眼珠呢?可能张太大掉了),读ke。
こ コ ko
‘こ’是你读ko时的嘴型,嘴分得很开。‘コ’也是嘴型,只不过方向变了一下,嘴分开,大声念,ko。
さ サ sa
‘さ’通‘杀’,仔细看的话,像一把匕首刺入了一个人的脖子,杀人啦,所以是sa。‘サ’也是在杀人,左边的一竖是一个人,右边的一竖是他手中的弓,那一横表示他在开弓放箭,还是杀人,读sa。
し シ si
‘し’这个平假名像是一只喝饮料的吸管,所以念xi。‘シ’这个片假名要跟后面那个‘ミ(mi)’结合起来记忆,合起来不就是米西吗。米西之前,眼儿眯着,嘴儿抿着,就是‘ミ’这个样子,开始米西了,瞪着眼,伸直了胳膊去抢,就成了‘シ’。
す ス su
‘す’这个平假名看起来像挂在竹竿上的丝线,所以念su。’ス’呢,是晾晒完毕的丝线开始加工了,两股合为一股,所以也是su。
せ セ se
‘せ’这个平假名是一只手在往口袋里面塞东西呢,念se。塞呀塞,塞进去了,好了,就成了‘セ’了。
そ ソ so
‘そ’这个平假名,讲了一个女人不守妇道的故事,这个女人啊,很不像话,下面露着肚子,上面露出她尖尖的小奶,好不风骚,所以念so。‘ソ’这个片假名我是很犯难的,它跟后面的‘ン’很像,容易搞混,所以最好把它看做英文字母‘y’,因为‘そ’是比较骚的,所以你不得不对她yy啦。记住了,读so。
た タ ta
‘た’这个平假名通汉字‘他’,读ta。‘タ’呢,是一只眼睛,还有黑眼珠,你自己肯定不能从侧面看到你的眼睛啦,肯定是看他人的时候啦。所以这不是你的眼睛,是ta。
ち チ ti
‘ち’这个平假名很像是七,虽然下面多了一些零碎,但也是七,你把它看成七就成了,很好记,读音是qi。‘チ’看起来不像七了,倒像是千,没关系,千的发音也很像qi。
つ ツ tu
‘つ’是日语中的促音,是很常见的,促音的发音也是tsu,很容易记。‘ツ’是你发音时的样子,两个鼻孔张开,嘴成一条缝,蛮形象的。
て テ te
‘て’这个平假名引人注目的是下面那个半圆,像什么呢?像是孕妇的大肚子,看来是怀胎了,所以读te。‘テ’呢,说明这个人重男轻女,一开始生了个女孩,不满意,又要了第二胎,二表示是二胎,下面那个小东西说明生了个带把儿的,这下满意啦?记住读te。
と ト to
‘と’是一个男人正跪在那里费力的脱裤子,所以读to。‘ト’呢,很明显,裤子脱掉了,男人还很没羞的站了起来,就成这个样子了。总之都是to。
な ナ na
‘な’这个平假名不太好写,但是记起来却不难。仔细看,上面的十字和点中间形成了一个小缺口,下面的那个东西好像一个人在指向那个缺口,想像一下警匪片中,警察追捕坏人,但是拐了一个弯儿坏人不见了,一个警察扫视了一下周围的环境,发现了一个缺口,伸手一指,大声说:长官,哪儿!所以这个假名就读na了,我这么记,记得很牢固。再看‘ナ’,这个片假名左看右看都少了点东西,要是再多个捺就好了,可惜了一个大字。少什么你就念什么就可以了,所以就念na了。
に 二 ni
因为‘二’通汉字‘尔’,也就是你的意思,所以‘に’这个平假名看主体就是表示你,所以读ni。‘二’更明显了,明显就是ni嘛。
ぬ ヌ nu
‘ぬ’通汉字‘奴’,非常好记,读nu。‘ヌ’呢,是对劳动中的奴隶的一只胳膊的特写,请注意看,胳膊上还带着手铐,唉,悲惨的奴隶。
ね ネ ne
‘ね’的左边是一个小孩,瘦小柔弱,右边是妈妈的乳房(下垂扁平而又大头),母亲在奶自己的孩子,是nai。‘ネ’呢,大家看,孩子已经长大了,成了顶天立地的男子汉了,他的母亲已经苍凉,mimi已经成为了干瘪的一点。一个感人的故事,关于nai的故事。
の ノ no
‘の’这个假名我不想多讲了,这个是极其常见的一个日语假名,是‘的’的意思,读音是no,这个不用刻意去记也记住了。‘ノ’是‘の’的一个简写,只保留了‘の’的第一笔,也挺好记的,不啰嗦了。
は ハ ha
‘は’这个平假名左边是一个人在翩翩起舞,右边是站成一条线的围观的人,有人跳舞给大家看,大家当然高兴啦,每个人都笑哈哈。读ha。‘ハ’呢,请尽量去联系汉字‘哈’来记,‘ハ’相当于哈的右上部分,请多多联系。
ひ ヒ hi
‘ひ’是一个人在微笑的笑脸,虽然有些夸张,但还是能看出是在:)来,笑的有点大,所以出声了,嘿嘿的笑,读hi。‘ヒ’呢是一把匕首,这把匕首能让你白刀子进去黑刀子出来,为什么是黑刀子呢?因为在这里写字不具有彩色功能,没办法,只好黑刀子啦。这把刀子现在已经黑啦,就读hi。
ふ フ hu
‘ふ’充分展现了一个大丈夫的形象,就是上面的大头很小,下面的小头却很大,哈哈,好猛啊,是个大丈夫。读fu。‘フ’说明大丈夫在家里却没什么了不起,见了太太照样要第三下四,还要卑躬屈膝,好惨啊。‘フ’是大丈夫在下跪呢。
へ へ he
‘へ’这个平假名让人想起了大海上的波涛,读he。片假名‘へ’与平假名极其相似,这个记起来就容易多了。
ほ ホ ho
‘ほ’呢,还是大家在看一个人在跳舞,不过这次舞者在头上顶了一个盘子跳,这可是真功夫,有水平,大家都给她叫好,所以你见了也要叫ho。过了一会儿,跳舞的姑娘旋转起来,裙子都像伞一样撑开了,成了‘ホ’,好精彩啊,你还不叫好?
ま マ ma
‘ま’通‘马’,是一个人骑在马背上的俯视图,读ma。‘マ’是‘马’的缩写,写完第一笔后,其余的缩成一个点,但还是个马。
み ミ mi
‘み’这个假名看起来乱七八糟的,其实不然,你要善于抓住重点。看仔细了,左边那个小圈,还有点下垂,明显是一个大头的mimi嘛(汗,这样的mimi也太有特色了),忍忍吧,为了记住这个假名,它就是个大mimi啦,读mi。‘ミ’这个片假名要跟前面那个‘シ(xi)’结合起来记忆,合起来不就是米西吗。米西之前,眼儿眯着,嘴儿抿着,就是‘ミ’这个样子,开始米西了,瞪着眼,伸直了胳膊去抢,就成了‘シ’。
む ム mu
‘む’像一头牛,正在mu,mu叫着呢。‘ム’呢,是牟的一部分,二者联系起来的话,很容易记住。读mu。
め メ me
‘め’很像‘女’字,而‘メ’像是一把匕首,你想想用刀子逼迫一个女人还能干什么呢?当然是拿去让她卖啦,所以读me。
も モ mo
‘も’一眼看上去就像是汉字‘毛’,日本人为了不让别人说他一毛不拔,就狠狠心拔了一毛,成了现在这个样子,很好记,你看成毛就可以了。‘モ’写得更正规了一些,更像毛了,读音也是mo。
や ヤ ya
以前网上有个帖子,讨论用马桶大便的时候如何压水花的问题,日本人在这里给出了解释。你看‘や’,坐在马桶上,便便已经快落进去了,但是水花没有压好,溅出来了一点,好臭啊,没压好。而‘ヤ’就很棒,一点都没有水花,因为坐得靠前了嘛。这就是ya。
ゆ ユ yu
‘ゆ’在我看来就是一个幼女的‘幼’的草写,一看到它,就是yu了。‘ユ’呢,很明显是一只手,四指握拳,大拇指朝右,给你指方向呢。读yu。
よ ヨ yo
‘よ’这个假名我看了一眼就记住了,因为它的样子就像一把钥匙,读yo就很自然了。‘ヨ’呢,是所有假名里面含数字‘1(读yao)’最多的一个假名,横竖加起来有4个1,自然,由1组成的‘ヨ’也就读yo啦。
ら ラ ra
‘ら’这个假名相当好笑,你看那个人低着头蹲那儿在干什么呢?拉屎呗,那这个假名就是la了。‘ラ’也相当好记,拉完了,人走了,只剩下了马桶,而且马桶盖也盖上了,这个是拉完了的la。
り リ ri
‘り’也是一个容易记忆的假名,两个人立在哪儿,自然就是li了。‘リ’立得更直一些了,反正都是li。
る ル ru
‘る’表示的是发音时的口型,先发‘L’音,此时你的舌头是向上翘的,‘る’的上半部分就是代表向上的舌头,下面是一个大圈加一个小圈,代表你发’U’音的时候,你的口型由大变小。所以你看到‘る’这个假名,自然而然就把它读出来了。‘ル’呢,是写得比较夸张的‘LU’,也是表示出了读音,lu。
れ レ re
‘れ’我看着像礼品的‘礼’,当有人提着礼品来了,你肯定会迫不及待地冲人家喊,来来来,所以见了礼,你就喊le就行了。刚才是别人拿着礼,现在这个‘レ’是你看到礼来了的表现,你仰着脖子,大喊,来——
ろ ロ ro
‘ろ’也是发音时的口型,上面是发‘L’时的口型,下面嘴大张着,这是在发‘O’呢,所以一看到‘ろ’你就张嘴发lo。‘ロ’呢,是用两个‘L’组成了发音时的口型,很自然就发出了lo音了。
わ ワ wa
这个假名念wa,一般人在惊讶的情况下才会哇的一声,这里也是这个样子。‘わ’表示一位亭亭玉立的少女,突然裙子被大风给卷起来了,你看了不替她着急吗?一急就wa的一声叫出来了。‘ワ’看上去是一张大张着的嘴,右边那一竖是一串黄鼻涕,快进到嘴里去啦。wa!
を ヲ wo
‘を’这个假名呢,代表比较刺激的事情,才会嗷嗷叫。‘を’好像一个人去游泳,先把一只脚放到水池里试一试水温,wo,好凉。(其实把‘を’看成体位的话会更生动啦)。‘ヲ’呢,你有办法把它想成体位也可以啦,如果不能,你就可以把它看成一个人在滑雪或冲浪,正在腾空而起,好刺激。所以读wo。
ん ン n
‘ん’很像字母‘n’,只不过头上长了一些,你把它当成n就记住了。‘ン’呢,又是一个发音表情,上边一点表示鼻子,下面一画表示闭着的嘴,怎么样?你发n的时候是不是这个样子呢?这个假名轻读n。

福利分享完毕,看指环王去!