2025年5月3日土曜日

英単語と日本語訳のペアが記述された CSV ファイルを読み込み、その内容に基づいて日本語訳を当てるクイズをPHPで作成してください

 はい、承知いたしました。英単語と日本語訳のペアが記述された CSV ファイルを読み込み、その内容に基づいて日本語訳を当てるクイズをPHPで作成します。

まずは、CSVファイルの準備をお願いします。以下のような形式で、カンマ区切りで英単語と日本語訳を記述した words.csv というファイルを作成してください。

コード スニペット
apple,りんご
banana,バナナ
orange,オレンジ
grape,ぶどう
strawberry,いちご
melon,メロン
pineapple,パイナップル
kiwi,キウイ
peach,もも
cherry,さくらんぼ
lemon,レモン
mango,マンゴー
... (以下、単語と日本語訳のペアを記述)

次に、このCSVファイルを読み込んでクイズを実行するPHPプログラムを作成します。以下のコードを quiz.php という名前で保存してください。

PHP
<?php

// CSVファイルのパス
$csvFile = 'words.csv';

// CSVファイルを読み込んで配列に格納
$words = [];
if (($handle = fopen($csvFile, 'r')) !== false) {
    while (($data = fgetcsv($handle)) !== false) {
        if (count($data) === 2) {
            $words[$data[0]] = $data[1]; // 英単語をキー、日本語訳を値とする連想配列
        }
    }
    fclose($handle);
} else {
    die("CSVファイルを開けませんでした。\n");
}

// 出題する単語数を設定
$numQuestions = 10;

// ランダムに単語を選択
$englishWords = array_keys($words);
shuffle($englishWords);
$quizWords = array_slice($englishWords, 0, $numQuestions);

$score = 0;

echo "英単語 日本語訳 クイズ (全 {$numQuestions}問)\n";

for ($i = 0; $i < $numQuestions; $i++) {
    $englishWord = $quizWords[$i];
    $correctJapanese = $words[$englishWord];

    echo "\n第 " . ($i + 1) . " 問: {$englishWord} の日本語訳は?\n";
    $answer = trim(fgets(STDIN)); // 標準入力から回答を取得

    if ($answer === $correctJapanese) {
        echo "正解!\n";
        $score++;
    } else {
        echo "不正解。正解は {$correctJapanese} です。\n";
    }
}

echo "\n--- 結果 ---\n";
echo "あなたの得点は {$score} / {$numQuestions} 点です。\n";

?>

プログラムの説明:

  1. CSVファイルのパス: $csvFile 変数にCSVファイルのパス (words.csv) を設定します。
  2. CSVファイルの読み込み:
    • fopen() 関数でCSVファイルを開きます。
    • fgetcsv() 関数を使って、CSVファイルから1行ずつ配列として読み込みます。
    • 読み込んだ配列の要素数が2つ(英単語と日本語訳)であれば、英単語をキー、日本語訳を値とする連想配列 $words に格納します。
    • fclose() 関数でファイルを閉じます。
    • ファイルが開けなかった場合はエラーメッセージを表示して終了します。
  3. 出題数の設定: $numQuestions 変数に出題する回数(ここでは10回)を設定します。
  4. ランダムな単語の選択:
    • array_keys() 関数で $words 配列のキー(英単語)を配列として取得します。
    • shuffle() 関数で英単語の配列をランダムに並び替えます。
    • array_slice() 関数で、先頭から $numQuestions 個の単語を $quizWords 配列として抽出します。
  5. クイズの実行:
    • ループ処理で $quizWords の各英単語について質問を表示します。
    • fgets(STDIN) 関数で標準入力からユーザーの回答を取得し、前後の空白を trim() 関数で削除します。
    • ユーザーの回答と正解($words[$englishWord]) を比較し、正誤判定を行います。
    • 正解の場合は "正解!"、不正解の場合は "不正解。正解は..." と表示します。
    • 正解数を $score 変数でカウントします。
  6. 結果表示: 全問終了後、得点と満点を表示します。

実行方法:

  1. 上記のPHPコードを quiz.php という名前で保存します。
  2. 英単語と日本語訳を記述した words.csv ファイルを quiz.php と同じディレクトリに保存します。
  3. ターミナル(コマンドプロンプト)を開き、保存したディレクトリに移動します。
  4. 以下のコマンドを実行してクイズを開始します。
Bash
php quiz.php

プログラムが実行されると、順番に英単語が表示され、日本語訳の入力を促されます。回答を入力してEnterキーを押すと、正誤判定と次の問題が表示されます。10問終了後に最終的な得点が表示されます。

このプログラムを元に、出題数を変更したり、不正解だった問題を復習する機能を追加したりするなど、さらに発展させることも可能です。

0 件のコメント:

コメントを投稿