Created
April 20, 2017 06:58
-
-
Save superzazu/fbefc4edc73807f1ac965bbd03641f16 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"""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