Skip to content

Instantly share code, notes, and snippets.

@superzazu
Created April 20, 2017 06:58
Show Gist options
  • Save superzazu/fbefc4edc73807f1ac965bbd03641f16 to your computer and use it in GitHub Desktop.
Save superzazu/fbefc4edc73807f1ac965bbd03641f16 to your computer and use it in GitHub Desktop.
"""Little script to learn kanas.
TODO: add accents
"""
import argparse
import random
import time
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
hiragana_table = {
"あ": "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",
}
katakana_table = {
"ア": "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",
}
def romaji_to_kana(nb_questions, kanas):
start_time = time.time()
score = 0
print()
for _ in range(0, nb_questions):
print()
kana, romaji_form = random.choice(kanas)
answers = []
answers.append(kana)
answers.append(random.choice(kanas)[0])
answers.append(random.choice(kanas)[0])
random.shuffle(answers)
question_string = "1. {0}\n2. {1}\n3. {2}\n{3}= ".format(
answers[0], answers[1], answers[2], romaji_form
)
user_answer = int(input(question_string))
if answers[user_answer - 1] == kana:
score += 1
print(bcolors.OKGREEN, "CORRECT", bcolors.ENDC)
else:
print(bcolors.FAIL,
"INCORRECT ({0} = {1})".format(romaji_form, kana),
bcolors.ENDC)
print()
total_time = time.time() - start_time
print(f"YOUR SCORE: {score} / {nb_questions}, IN {total_time:5.4}s")
def kana_to_romaji(nb_questions, kanas):
start_time = time.time()
score = 0
print()
for _ in range(0, nb_questions):
kana, romaji_form = random.choice(kanas)
user_answer = input(kana + "= ")
if user_answer == romaji_form:
score += 1
print(bcolors.OKGREEN, "CORRECT", bcolors.ENDC)
else:
print(bcolors.FAIL,
"INCORRECT ({0} = {1})".format(kana, romaji_form),
bcolors.ENDC)
print()
total_time = time.time() - start_time
print(f"YOUR SCORE: {score} / {nb_questions}, IN {total_time:5.4}s")
if __name__ == "__main__":
parser = argparse.ArgumentParser(prog="kana learner",
description="learn kanas.")
parser.add_argument("-n", "--number", default=5,
help="number of kanas", type=int)
parser.add_argument("-s", "--start", default=0,
help="start kana number", type=int)
parser.add_argument("-t", "--type", default="hiragana",
help="hiragana or katakana")
parser.add_argument("-e", "--exercise", default=1, type=int,
help="type of exercice (1 for kana -> romaji, 2 for romaji -> kana)")
args = parser.parse_args()
print("KANA E-LEARNER")
nb_kana = args.number
start_at = args.start
type_kana = args.type
type_of_exercise = args.exercise
if type_kana == "hiragana":
kanas_to_teach = list(hiragana_table.items())[start_at:start_at+nb_kana]
elif type_kana == "katakana":
kanas_to_teach = list(katakana_table.items())[start_at:start_at+nb_kana]
else:
raise Exception("Wrong kana type (accepted: hiragana or katakana)")
if type_of_exercise == 1:
kana_to_romaji(nb_kana * 4, kanas_to_teach)
elif type_of_exercise == 2:
romaji_to_kana(nb_kana * 4, kanas_to_teach)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment