フラッシュカード作ってみました


Python学習の一環でフラッシュカードにトライしました。環境は、Google coloboratoryです。

目標:

一つ一つの英単語に日本語で答え、正解であれば「正解」、「不正解」であれば再度不正解の英単語に答える。一度答えた英単語は再び出力しないようにする。

フロー

・英単語が表示される。
・日本語で解答する。
・英単語と日本語が合っているか確認する。

辞書型リストに英単語、日本語を入れ、それをデタラメに出力するようにしたいので、randomをインポートする

import random 

ベースとなる英語、日本語の辞書を作る

d = {
    'desk':'つくえ',
     'chair':'いす',
     'school':'がっこう',
}

while文によるループ(繰り返し)処理し、条件が真Trueである間はずっとブロック内の処理を繰り返すということにしたいので

while True:

英辞書のkeyだけ出したいので、単語を表示させる為、辞書のkeyだけを出したいので、keysメソッドを使う。そして、これをランダムに要素を取得したいのでrandom.choiceに、その前にlistでキャスト(別の型)にしてあげる.

 word = random.choice(list(d.keys()))
    print(word)

次に日本語を入力する欄を作る

    answer = input()

終了する際、0で入力したら、”終了します”で、終了。自分が入力した日本語と、英単語の答えがあっているか確認する。もし自分の答えが辞書のword(要素)と同じなら”正解”にする。違ったら”不正解”にする。

if answer == '0':
        print('終了します')
        break
elif answer == d[word]:
        print('正解')
else:
        print('不正解')

以下コードをまとめました。

import random 

d = {
    'desk':'つくえ',
     'chair':'いす',
     'school':'がっこう',
}

while True:
    word = random.choice(list(d.keys()))
    print(word)
    answer = input()
    if answer == '0':
        print('終了します')
        break
    elif answer == d[word]:
        print('正解')
    else:
        print('不正解')

実行すると・・・

school
がっこう
正解
desk
つくえ
正解
school
がっこう
正解
desk

一度正解の解答がまた出てくるサイクルになってしまいました。これを防ぐ為、While文を文字数0以上の間, 答えた要素を削除したいので、リストのメソッドpop()を使って、指定した位置の要素を削除し、その要素の値を取得できるにしました。


import random 
d = {
    'desk':'つくえ',
     'chair':'いす',
     'school':'がっこう',
}
while len(d)>0:
    word = random.choice(list(d.keys()))
    print(word)
    answer = input()
    if answer == '0':
        print('終了します')
        break
    elif answer == d[word]:
        print('正解')
        d.pop(word)
    else:
        print('不正解 もう一度')

結果は・・・・・

chair
つくえ
不正解 もう一度
desk
つくえ
正解
school
がっこう
正解
chair
いす
正解

不正解の場合は、再びトライの問題が出て、正解になった問題は再び出ることはなくなりました。

今後の目標:

スクレイピングから取得した情報を辞書リストにし、フラッシュカードを作れるようにしたいと考えています。