【コラム】

日本語で10行プログラミング

76 英単語帳を作成する(その2)

 

76/90

前回の復習

前回に続いて、英単語帳を作成します。前回はカード式の単語帳をパソコン上に作るべく設計を行い、単語データを入力するプログラムを作りました。今回は入力された単語データを元に、単語テストが行えるプログラムを作ってみたいと思います。

単語データの形式

前回の単語データを入力するプログラムでは、単語データはCSV形式で保存するようにしました。CSV形式は、1つのデータをカンマで区切る単純なデータ形式です。

データの保存形式に、CSV形式を選んだのには理由があります。なでしこではCSV形式の入出力に便利な命令を備えていることや、Excelなどの表計算ソフトを利用して、データの内容を確認・編集したりできるという大きな利点があるからです。また、ただのカンマ区切りのテキストですから、メモ帳で開いて見ることも可能です。

CSV形式は便利

以下に、単語のサンプルを示します。これを「動物の単語.csv」などのファイル名をつけて保存してください。

dog,イヌ
cat,ネコ
hippopotamus,カバ
mouse,ネズミ
horse,ウマ
wild boar,イノシシ
bear,クマ
bird,トリ
crocodile,ワニ
snake,ヘビ

プログラムの作成

今回はいきなり10行プログラムを見てもらい、これを少しずつ改良していくことで立派な単語テストプログラムを完成させてみようと思います。はじめに一度、単語テストについて、プログラムの流れを確認してみたいと思います。

単語テストを始めるにあたって、ユーザーにどの単語データを使ってテストを行うのか質問します。ユーザーは、CSV形式の単語データのファイルを選択します。次に選択された単語データのファイルを読み込みます。その後、テストを行うにあたり、出題の順番を決めて1つずつ画面に単語を表示することで出題します。箇条書きにすると以下のようになります。

  1. 単語テストのデータファイルを選択
  2. ファイルの内容を読む
  3. 出題の順番を決める
  4. 単語データを1行ずつ以下の5~6の手順を繰り返す
  5. 問題を表示
  6. 回答を表示

最初の10行プログラム

以下がなでしこのプログラムです。エディタに貼り付けて実行してみてください。

「.csv」のファイル選択。#1
もし、それが空ならば、終わり。#2
それを開く。#3
それを空白除去して単語帳に代入。#4
単語帳を配列シャッフルして、単語帳に代入。#5
単語帳を反復 #6
  問題=対象【0】。#7
  答え=対象【1】。#8
  「問題:{問題}」を言う。#9
  「答え:{問題}→{答え}」を言う。#10

単語帳を実行したところ

1行目でCSV形式のデータファイルを選択します。選択したファイルは変数「それ」で得られます。2行目では変数「それ」が空のとき、つまりキャンセルボタンが押されたときに、プログラムを終了するようにしています。3行目では選択されたファイルを開いて、そのすべての内容を変数「それ」に代入します。4行目では念のためデータファイルにある余分な空白を除き去って、変数「単語帳」に代入します。5行目では単語帳の内容をシャッフルして、出題順序を変更します。

6行目では単語帳の内容を順番に、1行ずつ反復するように指示します。繰り返す範囲は、7行目以降の字下げ(インデント)された部分です。7行目と8行目では問題と答えを取り出しています。6行目で「反復」構文を用いていますが、これにより単語帳の各行が順に実行されるのですが、このとき変数「対象」に各行が代入されます。ここで「対象【0】」と書くことで、CSVデータの0列目(ここでは英単語)が取得できるようになっています。9行目と10行目では、取り出した問題と答えをそれぞれ「言う」命令でダイアログに表示します。

日本語→英語で出題する

上の10行プログラムは、必ず、英語→日本語の順番で出題するようになっています。しかし、場合によっては日本語→英語の順番で出題したいこともありますよね。このように順番を変えるには、どこを修正したら良いでしょうか?

そのためには、2つの数字を修正するだけです。上のプログラムの7~8行目を見てください。

  問題=対象【0】。#7
  答え=対象【1】。#8

CSV形式のデータより、問題は対象の0列目、答えは1列目と取り出しています。データでは0列目に英単語、1列目に意味が入っていますので、この場合、英語が問題、日本語が答えとなっていたのでした。そこで、これを逆にしてみると、日本語→英語で出題するようになります。以下のようにプログラムを修正してみてください。

  問題=対象【1】。#7
  答え=対象【0】。#8

日本語→英語で出題するようになりました

英日、日英を選択できるようにする

プログラムの改造方法は分かったのですが、毎回、出題方法を変更したいと思うごとにプログラムを書き換えるというのでは、少々不便です。そこで、なでしこの「ボタン選択」という命令を利用して、出題方法を変更できるように改良してみたいと思います。この命令は、ボタンで選択するダイアログを表示する命令です。使い方は以下のようになります。

「テスト方式は?」を、
「0.英→日
1.日→英」のボタン選択。
それを言う。

「ボタン選択」命令のダイアログ

「ボタン選択」の1つ目の引数には質問を書いて、2つ目の引数には選択肢を書きます。選択肢は、選択肢1つごとに1行を書きます。そしてユーザーが選択すると、変数「それ」に選択肢の内容が代入されます。具体的に言うと「1.日→英」のボタンを選択すると、「それ」に「1.日→英」という文字列が代入されます。

これを使ってプログラムを書き換えると以下のようになります。

「.csv」のファイル選択。もし、それが空ならば、終わり。#1
それを開いて、空白除去して単語帳に代入。#2
「テスト方式は?」を「0)英→日{改行}1)日→英」のボタン選択。#3
Q列はそれの1文字左部分。A列は(Q列+1)%2。#4
単語帳を配列シャッフルして、単語帳に代入。#5
単語帳を反復 #6
  問題=対象【Q列】。#7
  答え=対象【A列】。#8
  「問題:{問題}」を言う。#9
  「答え:{問題}→{答え}」を言う。#10

2行増えましたがその分、行を1行にまとめたので10行に収まりました。今回増えたのは3行目と4行目で、変更したのが7行目と8行目です。

3行目では「ボタン選択」命令を利用して、出題方法を選択してもらいます。そして4行目では選択してもらった結果を元に、問題出題に使う列番号を変数「Q列」に、その答えに使う列番号を変数「A列」に代入しています。

「Q列」には単純に選択肢の1文字目の数字を取り出しています。「A列」ではQ列に1を足して2で割った余りを代入しています。ちょっと複雑な感じがしますが、Q列が0ならば1に、1ならば0になるようにする計算です。

分かりやすく書くなら、以下のようになります。

A列=Q列+1
もし、Q列が2ならば
  A列は0

改造のヒント

最後に、改造のヒントとして、いくつかアイデアを書き留めておきます。

まず、今回の10行プログラムでは、問題と答えをただ表示するだけでした。これをよりテスト形式にするために、問題を「尋ねる」ダイアログで表示するようにすれば、ユーザーに答えをキーボードで入力してもらえます。これで、よりテスト形式に近づくでしょう。また、このままだと途中で問題の表示を止めることができないので、問題の表示を途中で止める機能も必要だと思います。

そして、よりテスト形式に近づけるために正解と不正解の数をカウントし、最後にスコア表示ができるようにプログラムすると、楽しく学習ができるようになると思います。ぜひ、完成させて学習に役立ててみてください!

最後に、参考までに私が作った単語帳も載せておきます。

最終的な単語帳

以下のリンクからtest3.nakoをダウンロードしてください

test3.nako - test3.nakoのファイル(1KB)

76/90

インデックス

連載目次
第90回 10行プログラミング最終回~10行プログラミングを振り返って
第89回 フォルダ一括圧縮
第88回 テキストエディタに貼り付けたExcelの表を見やすく整形する
第87回 一発加算電卓
第86回 ブログにHTMLソースを貼れるよう変換する
第85回 カード式メモ帳
第84回 時間電卓を作る
第83回 アスキーアート地図エディタ
第82回 縦書き風テキスト作成ツール
第81回 Excelシートの比較を行う
第80回 ノルマ計算機
第79回 高速バックアップ
第78回 単語帳に読み上げ機能をつける
第77回 ホームページのバックアップツール
第76回 英単語帳を作成する(その2)
第75回 英単語帳を作成する(その1)
第74回 メモリカード挿入でデータをコピーするツール
第73回 モールス信号ソフトの作成
第72回 フォトCDランチャーを作る
第71回 残暑見舞い作成ツールを作る
第70回 画面キャプチャプログラムを作る
第69回 様々なルールに対応するビンゴシートのプログラムを作る
第68回 ビンゴカードを作る
第67回 ビンゴマシンを作る
第66回 パスワードマネージャの作成
第65回 アンドゥ機能をつける
第64回 テキストの比較ツール~FCフロントエンド
第63回 システム情報クリップ
第62回 飲み会電卓を作る
第61回 バイナリエディタの作成
第60回 メールフッタ作成ツール(その2)
第59回 メールフッタ作成ツール(その1)
第58回 プロセス監視ツールを作成する
第57回 TODOメモを作る
第56回 携帯電話をテキストリーダーに使う(2)
第55回 携帯電話をテキストリーダーに使う(1)
第54回 「オープンソースカンファレンス2006 Tokyo/Spring」に参加しました
第53回 10行でチャットソフトを作る(2)
第52回 10行でチャットソフトを作る(1)
第51回 プレゼンタイマーを作る
第50回 カラーピッカーを作る
第49回 簡単な暗号作成プログラム
第48回 お手軽データベース「SQLite」を使う
第47回 CUI(コマンドライン)環境を拡張する
第46回 デスクトップ画像を記録するプログラム
第45回 市外局番で住所を調べる検索プログラム
第44回 コマンドライン型ランチャーを作る
第43回 文字数カウンタを作る
第42回 日本語でバッチ処理
第41回 イベントドリブンと電光掲示板
第40回 なでしこでWindowsの「送る」メニューを使いやすくする
第39回 同人音楽即売会M3に参加して思ったこと
第38回 画像のサムネイル作成
第37回 なでしことExcelで行事予定カレンダーを作ろう
第36回 なでしことExcelで月間カレンダーを作ろう!
第35回 なでしことExcelで年間カレンダーを作ろう
第34回 急な電話にも安心、意外と便利な「手書きメモ」
第33回 携帯電話のアドレスデータを取り出す
第32回 記念日カウンターを作る
第31回 顔文字入力支援ソフト
第30回 アスキーアートのためのエディタ
第29回 HTTPサーバーを作る
第28回 手紙のあいさつ文を作成するプログラム
第27回 ギターコードの構成音を表示
第26回 音楽の再生スピードを変える
第25回 ミニスライドショーを作る
第24回 撮影日で写真を振り分け
第23回 PSP用テキスト画像の作成
第22回 金種計算
第21回 パスワードを自動生成
第20回 携帯メールでWEBを更新する
第19回 時間の使い方を反省するプログラム
第18回 ウェブを画像でキャプチャ
第17回 ラーメンタイマーを作る
第16回 画像のトリミングツール
第15回 ごみの分別カレンダー
第14回 デスクトップ検索ツール
第13回 フォント見本帳
第12回 セピア調の画像ビューワー
第11回 健康チェック
第10回 10行で壁紙にらくがきする
第9回 WEBサイトの更新チェッカー
第8回 WEBページのリンク切れをチェック その2
第7回 WEBページのリンク切れをチェック
第6回 音楽ファイルの整理 - メディアタグから自動フォルダ分類
第5回 請求書の自動作成・印刷~Word連携技
第4回 重要データのバックアップ術
第3回 10行ニュースリーダーを作ろう!
第2回 なでしことは その2
第1回 なでしことは? その1

もっと見る

人気記事

一覧

イチオシ記事

新着記事