akitiik's blog

alwayslookonethebrightsideoflife

日々の瞬間英作文トレーニングをちゃんとこなすためのツールを作った

これまでブログに書いてきたように、プログラミング初心者未満者が初めてのプログラム作成に挑戦し、それが先ほどやっと完成した。とりあえず最低限の機能は付いてる。正直すばらしい出来だと思う。そうはいってもまだまだ欲しい機能はあるからこれからどんどん良くしてって毎日使えるツールにしたい。まあこれを使って英語を勉強するよりはこのツールをもっとよくしたいって気持ちのほうが遥かに勝ってるんだけど。

コードはここに載せておく。このブログのアクセス数なんて無いに等しいもんだけど、誰かがこれを見てアドバイスをくれる可能性もなくはない。(誰か見てたらください)

これで出来ることはこんなこと。あらためて書いてみるとたったこれだけかって気持ちになる。

  • ターミナルでshunkaneisakubun.pyを実行すると日本語が表示される。それに対応した英文を打ち込むと正解不正解が出る
    • 正解かどうかはあらかじめ用意してるファイルの中の英文と一致するかどうか
  • このスクリプト起動時にshunkaneisakubun.py 34みたいに数字を付け加えると問題集を指定できる
    • ちなみに問題集は1ファイルにつき10文載ってて、計79ファイルある(多すぎ)
#!/usr/bin/env python3
# coding: utf-8
import sys
import random

argv = sys.argv[1:]
exercise_list = [str(x) for x in range(1, 80)] # 問題集のリスト
num = 10 # 出題数

# オプションで問題集が指定されなかったらランダムに問題集を選ぶ
if len(argv) < 1:
    filename = 'shunkan/{}.txt'.format(random.choice(exercise_list))
else:
    filename = 'shunkan/{}.txt'.format(argv[0])

### 問題集のファイルを読み込んで、問題と解答のリストを作る
item_list = []
with open(filename, 'r') as f:
    for i in range(num):
        line = f.readline()
        item_list.append(line[:-1].split('\t'))

# ### リストから出題
for i in range(num):
    count = 0
    question = item_list[i][0]
    correct_sentence = item_list[i][1]
    while True:
        count += 1
        print('[Q]->', question)
        user_answer = input('[A]-> ')
        if user_answer == correct_sentence:
            print('------------✔✔✔------------')
            break
        else:           # 2回間違ったらアウト
            if count < 2:
                print('------------✗✗✗------------')
            else:
                print('==========正解は・・・========\n', correct_sentence)
                print('~~~~~~2回入力して覚えよう~~~~~~')
                for i in range(2):
                    input()
                break

出題数numのあたりはちょっと無駄なことやってるけど、のちのち出題数を指定できたり問題集中の問題数を変更したりする予定だからとりあえず残してる。

それにしても一番たいへんだったのは問題集を用意するとこだった。なにせ全部で790文あるし・・・。

これはペンです。    This is a pen.
これはペンですか?    Is this a pen?

こんな感じで日本語と英文をタブ区切りで書いたファイルが全部で79個。さすがにファイルが79個もあるのは妥協感ありありなので、もっとまとめてそこからうまく問題を抽出するように考えたい。

これから追加する予定の機能は、ランダムに出題する機能と、成績なんかをつけておく機能。「これだけやってきた」ってのがわかると達成感とかやる気につながりそうだし。正直これらも最低限ないといけない機能のような気がするけど、とりあえずさっさと完成させたかったから省いてしまった。

ファイル名については、shunkaneisakubun.pyって長過ぎるしださいと思うけど良いものが浮かばない。短くてこのプログラムをよく表すいい名前がないもんか?これもおいおい考えよう。

それと変数名を英語で考えないといけないってのがなかなかつらい。英語を勉強するためのプログラムを作るのに英語を勉強しないといけないなんて。日本語をローマ字で書いたやつでもよかったんだけど、最初から妥協しまくりだと意味がないし別になんでもいいんだからえいやっとつけた。まあ人のコードを読んだりしてるうちに典型的なパターンみたいなのが見えてくるんだろう。

最後に、初めて実際にプログラムを作ってみて自分でも驚くくらい熱中してしまった。毎晩の日課も忘れてしまうくらいだった。それと、プログラマーの凄さもなんとなくわかった。とはいっても小学校の算数を習ったあとに、高校数学やってる人たちの凄さがわかったとか言ってるレベルだけど。(よくわからん例えだ)

最後の最後に、作る上で参考にさせてもらったドキュメントやサイトのすべての著者に感謝したい。それと検索エンジンの偉大さを改めて実感した。これも誰かが書いたプログラムだとは今では信じられない。すごすぎるだろ・・・。