Skip to content

Instantly share code, notes, and snippets.

@vayn
Last active April 18, 2019 05:58
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vayn/999d2be2f6b0c18fb098 to your computer and use it in GitHub Desktop.
Save vayn/999d2be2f6b0c18fb098 to your computer and use it in GitHub Desktop.
CLI Gojūon Exercise
#!/usr/bin/env python3
import random
import signal
import sys
"""帮助
输入 ? 显示正确答案
"""
TEST_COUNT = 0
WRONG_LIST = []
def sigint_handler(signal, frame):
wl = len(WRONG_LIST)
rate = 0
if TEST_COUNT > 0: rate = wl / TEST_COUNT
print("错误率:{:.2%}".format(rate, ))
print("错误数量:%s" % (wl, ))
for el in WRONG_LIST:
print(el)
sys.exit(0)
signal.signal(signal.SIGINT, sigint_handler)
HIRAGANA = 0
KATAKANA = 1
romaji = [
'a', 'i', 'u', 'e', 'o',
'ka', 'ki', 'ku', 'ke', 'ko',
'sa', 'shi', 'su', 'se', 'so',
'ta', 'chi', 'tsu', 'te', 'to',
'na', 'ni', 'nu', 'ne', 'no',
'ha', 'hi', 'fu', 'he', 'ho',
'ma', 'mi', 'mu', 'me', 'mo',
'ya', 'yu', 'yo',
'ra', 'ri', 'ru', 're', 'ro',
'wa', 'wo',
'n',
]
# ひらがな
hiragana = [
'あ', 'い', 'う', 'え', 'お',
'か', 'き', 'く', 'け', 'こ',
'さ', 'し', 'す', 'せ', 'そ',
'た', 'ち', 'つ', 'て', 'と',
'な', 'に', 'ぬ', 'ね', 'の',
'は', 'ひ', 'ふ', 'へ', 'ほ',
'ま', 'み', 'む', 'め', 'も',
'や', 'ゆ', 'よ',
'ら', 'り', 'る', 'れ', 'ろ',
'わ', 'を',
'ん',
]
# かたかな
katakana = [
'ア', 'イ', 'ウ', 'エ', 'オ',
'カ', 'キ', 'ク', 'ケ', 'コ',
'サ', 'シ', 'ス', 'セ', 'ソ',
'タ', 'チ', 'ツ', 'テ', 'ト',
'ナ', 'ニ', 'ヌ', 'ネ', 'ノ',
'ハ', 'ヒ', 'フ', 'ヘ', 'ホ',
'マ', 'ミ', 'ム', 'メ', 'モ',
'ヤ', 'ユ', 'ヨ',
'ラ', 'リ', 'ル', 'レ', 'ロ',
'ワ', 'ヲ',
'ン',
]
PLIST = dict(zip(romaji, zip(hiragana, katakana)))
def choose_exercise():
print("输入 ? 显示正确答案")
choice = input("练习平仮名/片仮名[h/k]:").lower() or 'h'
romaji_choice = input("练习罗马音[y/n]:").lower() or 'n'
etype = []
if choice == 'h':
etype.append(HIRAGANA)
else:
etype.append(KATAKANA)
if romaji_choice == 'y':
etype.append(True)
else:
etype.append(False)
return etype
def judge(answer, kana, ktype, roma, rchoice):
global TEST_COUNT
TEST_COUNT += 1
old_wl = len(WRONG_LIST)
wl = 0
right_answer = ''
if rchoice is True:
right_answer = roma
else:
right_answer = kana[ktype]
while True:
if answer == right_answer:
print("正确!")
print("=" * 10)
break
else:
if wl <= old_wl:
WRONG_LIST.append({roma: kana})
wl = old_wl + 1
if answer == '?':
print("错误+%d:%s" % (wl, roma))
print("=" * 10)
break
else:
answer = input("错误+%d 请输入正确的答案:" % (wl,))
def main():
etype = choose_exercise()
while True:
roma = random.choice(romaji)
kana = PLIST[roma]
ktype = etype[0]
rchoice = etype[1]
print("[%s]" % (kana[ktype],), end=' ')
if rchoice is True:
print("请输入罗马音:", end='')
else:
if ktype == HIRAGANA:
print("请输入平仮名:", end='')
else:
print("请输入片仮名:", end='')
answer = input()
judge(answer, kana, ktype, roma, rchoice)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment