今回はpythonの繰り返し処理、whileを使って簡単な英単語テストを作っていきます。
繰り返し処理とは?
繰り返し処理というのは、その名前の通り、同じ処理を何度も行わせるもののことです。
pythonだけではなく、その他のプログラミング言語にも存在し、while文やfor文が知られています。
while文やfor文がなぜ使われるのかはちょっと考えれば分かるでしょう。
例えば、問題に正解するたびに正解かどうかを表示し、点数を加算していくプログラムを作る場合、繰り返し処理を使わないと、問題が出題されるたびに同じプログラムを書かなければなりません。
これではすごく効率が悪いです。
繰り返し処理を使うことによって同じコードを何度も書かなくてもよくなるので、コーディングの効率が上がります。
while文で繰り返し処理を記述しよう
繰り返し処理では、上で述べた通り、while文とfor文が最もよく知られていますが、ここではwhile文を使って説明していきます。
基本的なwhile文の書き方
以下にwhile文の記述の仕方を示します。
while 条件式 :
繰り返し実行したい処理
条件式を満たしている間は何度もwhile文の中に書いた処理が実行されます。
以下の例を見てください。
count = 0 while count < 5: print(count) count += 1 0 1 2 3 4
この例ではcountという変数を0で初期化して、while文の中で表示していきます。また、繰り返し毎にcountに1を足していきます。
条件count < 5を満たしている間はこの処理が繰り返されるので、出力では上のように表示されます。
breakで繰り返しから抜けよう
break文を使うと、強制的に繰り返し処理から抜け出すことができます。
以下で例を示していきます。
count = 0 while count < 5: print(count) if count==2: break count += 1 0 1 2
上の例ではwhile文の中でif文を使い、countがちょうど2になった時に繰り返しからbreak文を実行しています。
よって出力は0から2までになっています。
continueで次の繰り返し処理を始めよう
continue文を使うと、繰り返しの処理を最後まで実行せずに、次の繰り返し処理に移ることができます。
以下で例を示していきます。
count = 0 while count < 5: if count==2: count += 1 continue print(count) count += 1 0 1 3 4
上の例では変数countが2になった時だけcontinue文で次の繰り返しに進んでいます。
つまり、countが2の時だけcountを表示しないようにしています。
そうすると出力では0から4の内2だけが抜けているのが分かると思います。
英単語テストを作ろう
それでは、ここまでで学んできたwhile文、break、continueを使って簡単な単語テストを作っていきましょう。
英単語テスト全体のソースコード
まずはソースコードを載せました。
以下を見てください。
import random word = { '時間' : 'time', 'お金' : 'money', '母’: 'mother', '父' : 'father', 'リンゴ' : 'apple', '犬' : 'dog', 'ネコ' : 'cat', '食べ物' : 'food', '神' : 'god', } count = 0 score = 0 while count<10: count += 1 randomword = random.choice(list(word.keys())) print(randomword) inputword = input('英単語を入力してください:') if inputword==word[randomword]: print('正解です。') score += 10 if count==10: break else: continue else: print('不正解です。正解は%sです。'%(word[randomword])) if count==10: break else: continue print('あなたの点数は%dでした。'%(score))
大まかな流れを説明します。
まずrandomモジュールをインポートします。これは辞書からランダムに単語を選んで出題するためです。
次に辞書に英単語とその意味を登録します。辞書については以下の記事で説明しているので参考にしてください。
その後、繰り返し処理で問題を出題し、答えの入力をしたら正解か不正解かが出力されるようになっています。
コードの細かい説明
それでは1つずつ説明していきます。
word = {....}の部分は辞書です。自分の好きなように単語の意味と単語を登録してください。
次にその下を見てください。
count = 0 score = 0 while count<10:
変数countとscoreが0で初期化されています。
countはwhileの中の処理が繰り返されるたびに1プラスされ、10(問)に達した時にループを抜けます(そのためにwhileの条件部がcount<10になっています)。
次にwhile文の中身を順番に見ていきましょう。
count += 1 randomword = random.choice(list(word.keys())) print(randomword) inputword = input('英単語を入力してください:')
ここではまずcountの数がプラス1されています。
これによってcountが1になりこれは1問目であることを表しています。
繰り返しのたびに1問出題されるので、countの数が出題された問題数に一致していることが分かると思います。
2行目の右辺ではランダムモジュールの中のchoice関数を使って最初に作った辞書wordのキーをランダムに1つ取り出しています。それにrandomwordと名付けています。
3行目ではrandomwordの出力をしています。つまり問題を出題しています。
4行目ではinput関数を使って答えを入力し、それをinputwordと名付けています。
では次にifの中身を見ていきましょう。
if inputword==word[randomword]: print('正解です。') score += 10 if count==10: break else: continue
ifの条件式の部分を見てください。
word[randomword]とは辞書wordにおいて、キーrandomwordと対になる値のことを指します。
つまりword[randomword]とは問題の答えを表します。
条件式ではこれと自分の入力(inputword)が等しい時としているので、if文の中では正解の時にやる処理が記述されていると分かります。
正解の時なので、まず「正解です」と出力し、score(点数)をプラス10点しています。1問10点で10問出題されるので、満点は100点になっています。
その後、if else文で、countが10(10問目)なら繰り返しを抜ける(break)、
それ以外なら次の問題に行く(continue)としています。
では最後にelse文の中を見ていきましょう。
else: print('不正解です。正解は%sです。'%(word[randomword])) if count==10: break else: continue
上で説明した通り、ifが正解の時の処理であるので、elseでは不正解の時の処理を書いています。
まず、printで正解のワードを示します。その後if文の時と同じで、if else文により、10問目の場合は問題終了、それ以外では次の問題に進んでいます。
pythonを使った英単語テスト:まとめ
今回は繰り返しの中でもwhile文について学びました。
そして繰り返しを強制的に抜けたり、次の繰り返しに進む方法(breakとcontinue)についても学びました。
最後に単語テストを作ってみることで繰り返しについてより理解を深められたはずです。
このように繰り返し処理は非常に便利で、知っているか知っていないかでコーディングの量がめちゃくちゃ変わってくるので是非しっかり覚えていってください。
他にもPythonの文法について学びたい方はUdemyの「Python 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルを学ぶオンライン講座」がおすすめです。
ちなみにこのコースに限らず、Udemyには返金保証があるので実質リスクゼロで学べます。
今後も定期的にプログラミング系の記事を発信していくので、興味のある人はブックマークして見にきてくれる嬉しいです!!