{"id":2024,"date":"2026-05-29T16:43:38","date_gmt":"2026-05-29T08:43:38","guid":{"rendered":"https:\/\/wmea.charity\/?page_id=2024"},"modified":"2026-05-29T16:44:34","modified_gmt":"2026-05-29T08:44:34","slug":"elementary-grammar-in-use-ch-11-20","status":"publish","type":"page","link":"https:\/\/wmea.charity\/index.php\/elementary-grammar-in-use-ch-11-20\/","title":{"rendered":"Elementary Grammar In Use Ch 11-20"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2024\" class=\"elementor elementor-2024\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d0a7d46 e-flex e-con-boxed e-con e-parent\" data-id=\"d0a7d46\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-db4f556 elementor-widget elementor-widget-html\" data-id=\"db4f556\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"zh-Hant\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Senior Grammar Explorer: Chapters 11-20 Quiz & Worksheet (Bigger Font)<\/title>\n  <!-- Tailwind CSS -->\n  <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n  <!-- Google Fonts -->\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Fredoka:wght@300..700&family=Noto+Sans+TC:wght@300..900&display=swap\" rel=\"stylesheet\">\n  \n  <style>\n    body {\n      font-family: 'Fredoka', 'Noto Sans TC', sans-serif;\n    }\n    @media print {\n      .no-print {\n        display: none !important;\n      }\n      .print-page-break {\n        page-break-after: always;\n      }\n      body {\n        background-color: white !important;\n        color: black !important;\n      }\n    }\n  <\/style>\n<\/head>\n<body class=\"bg-gradient-to-b from-slate-900 via-indigo-950 to-slate-900 min-h-screen text-slate-100 pb-12\">\n\n  <!-- ================= HEADER SECTION (no-print) ================= -->\n  <header class=\"no-print bg-slate-900\/90 backdrop-blur-md sticky top-0 z-50 shadow-sm border-b border-slate-800\">\n    <div class=\"max-w-6xl mx-auto px-4 py-3 flex flex-wrap items-center justify-between gap-4\">\n      <div class=\"flex items-center gap-2.5\">\n        <span class=\"text-3xl\">\ud83c\udf92<\/span>\n        <div>\n          <h1 class=\"text-xl md:text-2xl font-black bg-gradient-to-r from-indigo-400 via-purple-400 to-pink-400 bg-clip-text text-transparent\">\n            Senior Grammar Explorer (Chapters 11-20)\n          <\/h1>\n          <p class=\"text-[11px] text-slate-400 font-bold\">\u5c0f\u4e94\u82f1\u6587\u6587\u6cd5\u7279\u8a13\u4e92\u52d5\u7df4\u7fd2\u8207\u5217\u5370\u7cfb\u7d71 (\u5b57\u578b\u653e\u5927\u7248)<\/p>\n        <\/div>\n      <\/div>\n      \n      <!-- Controls -->\n      <div class=\"flex items-center gap-3\">\n        <!-- Timer toggle -->\n        <button id=\"btn-timer-toggle\" onclick=\"toggleTimerOption()\" class=\"bg-slate-800 hover:bg-slate-700 border border-slate-700 text-amber-400 px-3 py-1.5 rounded-xl text-xs font-black transition-all flex items-center gap-1\">\n          \u23f1\ufe0f \u8a08\u6642\u6a21\u5f0f: \u95dc\u9589\n        <\/button>\n\n        <!-- Mode Switcher -->\n        <div class=\"bg-slate-800 p-1 rounded-xl flex gap-1 text-xs font-black border border-slate-700\">\n          <button id=\"btn-practice-mode\" onclick=\"switchMode('practice')\" class=\"px-3 py-1.5 rounded-lg bg-indigo-600 text-white shadow-sm transition-all flex items-center gap-1\">\n            \ud83c\udfaf \u4e92\u52d5\u7df4\u7fd2\n          <\/button>\n          <button id=\"btn-print-mode\" onclick=\"switchMode('print')\" class=\"px-3 py-1.5 rounded-lg text-slate-400 hover:text-slate-200 transition-all flex items-center gap-1\">\n            \ud83d\udda8\ufe0f \u5217\u5370\u8003\u5377\n          <\/button>\n        <\/div>\n\n        <!-- Sound toggle -->\n        <button id=\"btn-sound\" onclick=\"toggleSound()\" class=\"p-2 rounded-xl bg-slate-800 hover:bg-slate-700 text-slate-300 transition-all border border-slate-700\" title=\"\u958b\u95dc\u97f3\u6548\">\n          \ud83d\udd0a\n        <\/button>\n      <\/div>\n    <\/div>\n  <\/header>\n\n  <main class=\"max-w-6xl mx-auto px-4 mt-6\">\n    \n    <!-- ========================================================= -->\n    <!-- ================= PRACTICE MODE CONTAINER =============== -->\n    <!-- ========================================================= -->\n    <div id=\"practice-container\" class=\"no-print grid grid-cols-1 lg:grid-cols-12 gap-6 animate-fadeIn\">\n      \n      <!-- Left Sidebar: Chapter Selection -->\n      <div class=\"lg:col-span-4 bg-slate-900\/60 rounded-3xl p-5 border border-slate-800\/80 shadow-lg h-fit\">\n        <h3 class=\"text-xs font-black text-slate-400 uppercase tracking-widest mb-3 flex items-center gap-1.5\">\n          \ud83d\uddfa\ufe0f \u9078\u64c7\u7279\u8a13\u6587\u6cd5\u5cf6\u5dbc\n        <\/h3>\n        <div class=\"space-y-2.5\" id=\"practice-chapter-list\">\n          <!-- Dynamic chapters populated by JS -->\n        <\/div>\n      <\/div>\n\n      <!-- Right Area: Question Card -->\n      <div class=\"lg:col-span-8 space-y-4\">\n        \n        <!-- Score and Chapter Title Banner -->\n        <div class=\"bg-gradient-to-r from-indigo-900 via-purple-900 to-indigo-950 text-white rounded-3xl p-6 border border-slate-800 shadow-xl flex justify-between items-center\">\n          <div>\n            <span id=\"quiz-chapter-num\" class=\"bg-indigo-500\/20 text-indigo-300 border border-indigo-500\/30 px-2.5 py-1 rounded-full text-[10px] font-black tracking-wider uppercase\">UNIT 11<\/span>\n            <h2 id=\"quiz-chapter-title\" class=\"text-xl md:text-2xl font-black mt-1.5 text-slate-100\">Loading Chapter...<\/h2>\n            <p id=\"quiz-chapter-desc\" class=\"text-xs md:text-sm text-slate-300 font-medium mt-1 leading-relaxed\">Loading description...<\/p>\n          <\/div>\n          <!-- score circle -->\n          <div class=\"text-center bg-slate-950\/60 px-4 py-2.5 rounded-2xl border border-slate-800 min-w-[85px]\">\n            <div id=\"quiz-score\" class=\"text-2xl font-black text-indigo-400\">0 \/ 20<\/div>\n            <div class=\"text-[9px] font-bold text-slate-500 uppercase\">Score<\/div>\n          <\/div>\n        <\/div>\n\n        <!-- Step indicators -->\n        <div id=\"practice-progress-steps\" class=\"flex h-2.5 bg-slate-800 rounded-full overflow-hidden border border-slate-800\">\n          <!-- Populated by JS -->\n        <\/div>\n\n        <!-- Quiz Panel Card -->\n        <div id=\"quiz-card\" class=\"bg-slate-900\/90 rounded-3xl p-6 md:p-8 border border-slate-800 shadow-2xl relative min-h-[420px] flex flex-col justify-between\">\n          \n          <div>\n            <!-- Mascot speaking -->\n            <div class=\"flex items-start gap-3 bg-indigo-950\/50 border border-indigo-500\/10 p-4 rounded-2xl mb-6 relative\">\n              <span class=\"text-3xl animate-bounce\">\ud83e\udd89<\/span>\n              <div>\n                <h4 class=\"text-xs font-black text-indigo-400 uppercase tracking-widest\">\u8a9e\u5883\u601d\u7dad\u63d0\u793a\uff1a<\/h4>\n                <p class=\"text-xs md:text-sm font-bold text-slate-300\">\u5c0f\u4e94\u7684\u8003\u984c\u9700\u8981\u9ad8\u5ea6\u95dc\u6ce8\u53e5\u5b50\u4e2d\u7684\u300c\u6642\u9593\u526f\u8a5e\u300d\u8207\u524d\u5f8c\u6587\u7684\u300c\u52d5\u8a5e\u6642\u614b\u300d\u5594\uff01<\/p>\n              <\/div>\n              <!-- Timer indicator -->\n              <div id=\"timer-box\" class=\"hidden absolute right-4 top-4 bg-rose-500\/20 border border-rose-500\/30 px-3 py-1 rounded-full text-xs font-black text-rose-300 flex items-center gap-1\">\n                \u23f1\ufe0f <span id=\"timer-sec\">25<\/span>s\n              <\/div>\n            <\/div>\n\n            <!-- Question sentence -->\n            <div class=\"bg-slate-950\/80 border border-slate-800 rounded-2xl p-8 text-center shadow-inner mb-6\">\n              <span class=\"text-[10px] font-black text-slate-500 block mb-1\">P5 GRAMMAR QUESTION <span id=\"quiz-q-num\">11<\/span> of 20<\/span>\n              <h3 id=\"quiz-question-text\" class=\"text-2xl md:text-3xl font-extrabold text-slate-100 tracking-wide font-mono leading-relaxed\">\n                Loading question sentence...\n              <\/h3>\n            <\/div>\n\n            <!-- Options (4 Options for P5) -->\n            <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\" id=\"quiz-options-container\">\n              <!-- JS generates buttons here -->\n            <\/div>\n          <\/div>\n\n          <!-- Explanation\/Hint Area -->\n          <div id=\"quiz-explanation-box\" class=\"hidden mt-6 p-4 rounded-2xl flex gap-3 animate-fadeIn border transition-all\">\n            <!-- Populated on click -->\n          <\/div>\n\n          <!-- Next Action buttons -->\n          <div class=\"flex justify-end pt-5 mt-6 border-t border-slate-800\">\n            <button id=\"btn-quiz-submit\" onclick=\"submitPracticeAnswer()\" disabled class=\"px-7 py-4 rounded-2xl font-black text-sm md:text-base transition-all flex items-center gap-1.5 bg-slate-800 text-slate-500 border border-slate-700 cursor-not-allowed\">\n              \u63d0\u4ea4\u7b54\u6848 \ud83d\udca1\n            <\/button>\n            <button id=\"btn-quiz-next\" onclick=\"nextPracticeQuestion()\" class=\"hidden px-7 py-4 rounded-2xl font-black text-sm md:text-base text-white bg-gradient-to-r from-indigo-500 to-purple-600 shadow-lg hover:brightness-110 active:scale-95 transition-all flex items-center gap-1.5\">\n              \u4e0b\u4e00\u984c \u2794\n            <\/button>\n          <\/div>\n\n        <\/div>\n\n      <\/div>\n    <\/div>\n\n    <!-- ========================================================= -->\n    <!-- ================= PRINT WORKSHEET MODE ================== -->\n    <!-- ========================================================= -->\n    <div id=\"print-container\" class=\"hidden space-y-6\">\n      \n      <!-- Control Panel (no-print) -->\n      <div class=\"no-print bg-slate-900 border border-slate-800 rounded-3xl p-6 shadow-xl flex flex-wrap items-center justify-between gap-4\">\n        <div class=\"space-y-1\">\n          <h3 class=\"font-black text-base text-slate-200\">\ud83d\udda8\ufe0f \u5217\u5370\u8207\u6392\u7248\u8a2d\u5b9a\u63a7\u5236\u53f0 (\u5c0f\u4e94 Unit 11-20)<\/h3>\n          <p class=\"text-xs text-slate-500\">\u81ea\u8a02\u8f38\u51fa\u5167\u5bb9\uff0c\u4e00\u9375\u7522\u51fa\u5b8c\u7f8e\u5be6\u9ad4\u5448\u5206\u8a66\u9ad8\u96e3\u5ea6\u7df4\u7fd2\u5377\u3002<\/p>\n        <\/div>\n        \n        <div class=\"flex flex-wrap items-center gap-4 text-xs font-bold\">\n          <!-- Toggle Answers -->\n          <label class=\"flex items-center gap-2 cursor-pointer bg-slate-850 px-3 py-2 rounded-xl border border-slate-750 hover:bg-slate-800 transition-all\">\n            <input type=\"checkbox\" id=\"chk-show-answers\" onchange=\"togglePrintDetails()\" checked class=\"w-4 h-4 text-indigo-600 rounded\">\n            <span>\u986f\u793a\u6b63\u78ba\u7b54\u6848 (\u52a0\u5e95\u7dda)<\/span>\n          <\/label>\n          \n          <!-- Toggle Hints -->\n          <label class=\"flex items-center gap-2 cursor-pointer bg-slate-850 px-3 py-2 rounded-xl border border-slate-750 hover:bg-slate-800 transition-all\">\n            <input type=\"checkbox\" id=\"chk-show-hints\" onchange=\"togglePrintDetails()\" checked class=\"w-4 h-4 text-indigo-600 rounded\">\n            <span>\u986f\u793a\u4e2d\u6587\u8003\u9ede\u89e3\u6790<\/span>\n          <\/label>\n\n          <!-- Print Button -->\n          <button onclick=\"window.print()\" class=\"bg-indigo-600 hover:bg-indigo-700 text-white px-5 py-2.5 rounded-xl transition-all shadow-md shadow-indigo-500\/10 flex items-center gap-1\">\n            <span>\ud83d\udda8\ufe0f \u958b\u59cb\u5217\u5370\u7d19\u672c\u8003\u5377<\/span>\n          <\/button>\n        <\/div>\n      <\/div>\n\n      <!-- Actual Printable Document Sheets -->\n      <div class=\"bg-white rounded-3xl p-6 md:p-12 border border-slate-100 shadow-lg text-slate-900\" id=\"print-document\">\n        \n        <!-- Printable Cover Header -->\n        <div class=\"border-b-4 border-slate-800 pb-4 mb-8 text-center relative\">\n          <h1 class=\"text-2xl md:text-3xl font-extrabold uppercase tracking-wide text-slate-950\">English Grammar Test for Primary 5<\/h1>\n          <p class=\"text-sm font-bold text-slate-500 mt-1\">Based on Essential Grammar in Use (Chapters 11-20) \u2014 200 Questions<\/p>\n          \n          <!-- Student Info fields -->\n          <div class=\"grid grid-cols-3 gap-4 max-w-lg mx-auto mt-6 text-xs font-bold text-slate-700\">\n            <div class=\"border-b border-slate-400 pb-1 text-left\">Class: _________________<\/div>\n            <div class=\"border-b border-slate-400 pb-1 text-left\">Name: _________________<\/div>\n            <div class=\"border-b border-slate-400 pb-1 text-left\">Score: ______ \/ 200<\/div>\n          <\/div>\n        <\/div>\n\n        <!-- Render chapters recursively here by JS -->\n        <div id=\"print-chapters-content\" class=\"space-y-12\">\n          <!-- Populated dynamically by JS -->\n        <\/div>\n\n      <\/div>\n    <\/div>\n\n  <\/main>\n\n  <!-- ==================== JS CONTROLLER & DATASET ==================== -->\n  <script>\n    \/\/ Audio Context Sound Engine\n    let soundOn = true;\n    function playSound(type) {\n      if (!soundOn) return;\n      try {\n        const AudioContext = window.AudioContext || window.webkitAudioContext;\n        if (!AudioContext) return;\n        const ctx = new AudioContext();\n        if (type === 'correct') {\n          const osc1 = ctx.createOscillator();\n          const osc2 = ctx.createOscillator();\n          const gain = ctx.createGain();\n          osc1.type = 'sine'; osc2.type = 'sine';\n          osc1.frequency.setValueAtTime(523.25, ctx.currentTime);\n          osc1.frequency.setValueAtTime(659.25, ctx.currentTime + 0.08);\n          osc2.frequency.setValueAtTime(1046.5, ctx.currentTime + 0.08);\n          gain.gain.setValueAtTime(0.06, ctx.currentTime);\n          gain.gain.exponentialRampToValueAtTime(0.005, ctx.currentTime + 0.3);\n          osc1.connect(gain); osc2.connect(gain); gain.connect(ctx.destination);\n          osc1.start(); osc2.start();\n          osc1.stop(ctx.currentTime + 0.3); osc2.stop(ctx.currentTime + 0.3);\n        } else if (type === 'incorrect') {\n          const osc = ctx.createOscillator();\n          const gain = ctx.createGain();\n          osc.type = 'triangle';\n          osc.frequency.setValueAtTime(160, ctx.currentTime);\n          osc.frequency.linearRampToValueAtTime(100, ctx.currentTime + 0.2);\n          gain.gain.setValueAtTime(0.1, ctx.currentTime);\n          gain.gain.exponentialRampToValueAtTime(0.005, ctx.currentTime + 0.25);\n          osc.connect(gain); gain.connect(ctx.destination);\n          osc.start(); osc.stop(ctx.currentTime + 0.25);\n        } else if (type === 'click') {\n          const osc = ctx.createOscillator();\n          const gain = ctx.createGain();\n          osc.type = 'sine';\n          osc.frequency.setValueAtTime(600, ctx.currentTime);\n          gain.gain.setValueAtTime(0.02, ctx.currentTime);\n          gain.gain.exponentialRampToValueAtTime(0.005, ctx.currentTime + 0.05);\n          osc.connect(gain); gain.connect(ctx.destination);\n          osc.start(); osc.stop(ctx.currentTime + 0.05);\n        }\n      } catch (e) { console.log('Web Audio unsupported'); }\n    }\n\n    function toggleSound() {\n      soundOn = !soundOn;\n      document.getElementById('btn-sound').innerText = soundOn ? \"\ud83d\udd0a\" : \"\ud83d\udd07\";\n    }\n\n    \/\/ Complete robust database of Chapters 11 to 20. Each chapter contains exactly 20 questions (4 choices each).\n    const db = [\n      {\n        id: 11,\n        title: \"Chapter 11: worked \/ got \/ went (Past Simple)\",\n        desc: \"\u904e\u53bb\u7c21\u55ae\u5f0f\u80af\u5b9a\u53e5 \u2014 \u7cbe\u901a\u898f\u5247\u52d5\u8a5e\u8207\u4e0d\u898f\u5247\u52d5\u8a5e\u7684\u904e\u53bb\u5f0f\u578b\u614b\u3002\",\n        questions: [\n          { q: \"Last winter, our family ___ to Hokkaido for a wonderful skiing holiday.\", options: [\"go\", \"went\", \"goes\", \"gone\"], ans: 1, help: \"\u300cLast winter\uff08\u53bb\u5e74\u51ac\u5929\uff09\u300d\u4ee3\u8868\u904e\u53bb\u6642\u9593\u9ede\uff0c\u52d5\u8a5e go \u7684\u4e0d\u898f\u5247\u904e\u53bb\u5f0f\u70ba went\u3002\" },\n          { q: \"My older sister ___ English diligently last night to prepare for her exam.\", options: [\"study\", \"studies\", \"studied\", \"studying\"], ans: 2, help: \"\u300clast night\uff08\u6628\u665a\uff09\u300d\u70ba\u904e\u53bb\u5f0f\u3002study \u53bb y \u52a0 ied \u8b8a\u6210 studied\u3002\" },\n          { q: \"The school bell ___ five minutes ago, and all students entered the hall.\", options: [\"ring\", \"rang\", \"rung\", \"rings\"], ans: 1, help: \"\u300cfive minutes ago\uff08\u4e94\u5206\u9418\u524d\uff09\u300d\u70ba\u904e\u53bb\u5f0f\u3002\u52d5\u8a5e ring \u7684\u904e\u53bb\u5f0f\u70ba\u4e0d\u898f\u5247\u8b8a\u5316\u7684 rang\u3002\" },\n          { q: \"Our class teacher ___ us some delicious chocolate cookies yesterday afternoon.\", options: [\"give\", \"gave\", \"given\", \"gives\"], ans: 1, help: \"\u300cyesterday afternoon\u300d\u6307\u793a\u904e\u53bb\u52d5\u4f5c\u3002give \u7684\u904e\u53bb\u5f0f\u70ba gave\u3002\" },\n          { q: \"Tom ___ his science project early, so he had time to play computer games.\", options: [\"finish\", \"finished\", \"finishes\", \"finishing\"], ans: 1, help: \"\u5f9e\u5f8c\u534a\u53e5\u300chad time\uff08\u6709\u6642\u9593\uff0c\u904e\u53bb\u5f0f\uff09\u300d\u53ef\u77e5\uff0c\u524d\u534a\u53e5\u4e5f\u9700\u7528\u904e\u53bb\u5f0f finished\u3002\" },\n          { q: \"My parents ___ a new apartment in Shatin three years ago.\", options: [\"buy\", \"bought\", \"buys\", \"buying\"], ans: 1, help: \"\u300cthree years ago\uff08\u4e09\u5e74\u524d\uff09\u300d\u70ba\u660e\u78ba\u904e\u53bb\u6642\u9593\u3002buy \u7684\u904e\u53bb\u5f0f\u70ba bought\u3002\" },\n          { q: \"I ___ a strange sound outside my bedroom window at midnight.\", options: [\"hear\", \"heard\", \"hears\", \"hearing\"], ans: 1, help: \"\u300cat midnight\uff08\u5728\u534a\u591c\uff09\u300d\u63cf\u8ff0\u767c\u751f\u904e\u7684\u4e8b\u4ef6\u3002hear \u7684\u904e\u53bb\u5f0f\u70ba heard\u3002\" },\n          { q: \"The strong wind ___ away the leaves on the ground this morning.\", options: [\"blow\", \"blew\", \"blown\", \"blows\"], ans: 1, help: \"\u300cthis morning\uff08\u4eca\u5929\u65e9\u4e0a\uff09\u300d\u5df2\u6210\u70ba\u904e\u53bb\u3002blow \u7684\u904e\u53bb\u5f0f\u70ba blew\u3002\" },\n          { q: \"The clever boy ___ the difficult math riddle in just two minutes.\", options: [\"solve\", \"solved\", \"solves\", \"solving\"], ans: 1, help: \"\u63cf\u8ff0\u5df2\u767c\u751f\u7684\u4e8b\u5be6\u3002\u898f\u5247\u52d5\u8a5e solve \u76f4\u63a5\u52a0 d \u8b8a\u6210 solved\u3002\" },\n          { q: \"We ___ all the fruit juice because we were extremely thirsty after the PE lesson.\", options: [\"drink\", \"drank\", \"drunk\", \"drinks\"], ans: 1, help: \"\u7531\u300cwere thirsty\uff08\u7576\u6642\u53e3\u6e34\uff0c\u904e\u53bb\u5f0f\uff09\u300d\u53ef\u77e5\u559d\u679c\u6c41\u52d5\u4f5c\u767c\u751f\u5728\u904e\u53bb\u3002drink \u7684\u904e\u53bb\u5f0f\u70ba drank\u3002\" },\n          { q: \"My grandmother ___ a sweet letter to me last week.\", options: [\"write\", \"wrote\", \"written\", \"writes\"], ans: 1, help: \"\u300clast week\uff08\u4e0a\u9031\uff09\u300d\u70ba\u904e\u53bb\u5f0f\u3002write \u7684\u904e\u53bb\u5f0f\u70ba wrote\u3002\" },\n          { q: \"Suddenly, the cute puppy ___ out of the bush and startled us.\", options: [\"jump\", \"jumped\", \"jumps\", \"jumping\"], ans: 1, help: \"\u300cSuddenly\uff08\u7a81\u7136\u5730\uff09\u300d\u63cf\u8ff0\u904e\u53bb\u77ac\u9593\u767c\u751f\u7684\u52d5\u4f5c\u3002jump \u7684\u904e\u53bb\u5f0f\u70ba jumped\u3002\" },\n          { q: \"The police officer ___ the thief near the MTR station yesterday.\", options: [\"catch\", \"caught\", \"catches\", \"catching\"], ans: 1, help: \"\u300cyesterday\u300d\u662f\u904e\u53bb\u6642\u9593\u3002catch \u7684\u4e0d\u898f\u5247\u904e\u53bb\u5f0f\u70ba caught\u3002\" },\n          { q: \"Last Sunday, I ___ my bedroom and organized all my storybooks.\", options: [\"tidy\", \"tidyed\", \"tidied\", \"tidies\"], ans: 2, help: \"\u300cLast Sunday\u300d\u70ba\u904e\u53bb\u5f0f\u3002tidy \u7d50\u5c3e\u70ba\u300c\u5b50\u97f3+y\u300d\uff0c\u53bb y \u52a0 ied \u8b8a\u6210 tidied\u3002\" },\n          { q: \"They ___ a very beautiful song in the music competition last Friday.\", options: [\"sing\", \"sang\", \"sung\", \"sings\"], ans: 1, help: \"\u300clast Friday\uff08\u4e0a\u9031\u4e94\uff09\u300d\u662f\u904e\u53bb\u6642\u9593\u3002sing \u7684\u904e\u53bb\u5f0f\u70ba sang\u3002\" },\n          { q: \"My father ___ his car keys on the dining table before leaving the flat.\", options: [\"leave\", \"left\", \"leaves\", \"leaving\"], ans: 1, help: \"\u300cbefore leaving\u300d\u63cf\u8ff0\u4e00\u9023\u4e32\u767c\u751f\u904e\u7684\u52d5\u4f5c\u3002leave \u7684\u904e\u53bb\u5f0f\u70ba left\u3002\" },\n          { q: \"We ___ very tired after hiking up the Lion Rock yesterday.\", options: [\"are\", \"was\", \"were\", \"been\"], ans: 2, help: \"\u4e3b\u8a5e\u662f\u8907\u6578\u7684 We\uff0c\u642d\u914d\u6628\u5929\u7684\u904e\u53bb\u5f0f be \u52d5\u8a5e\u70ba were\u3002\" },\n          { q: \"The students ___ hard and performed brilliantly in the drama show.\", options: [\"practice\", \"practiced\", \"practices\", \"practicing\"], ans: 1, help: \"\u5f8c\u534a\u53e5\u300cperformed\uff08\u6f14\u51fa\uff0c\u904e\u53bb\u5f0f\uff09\u300d\u986f\u793a\u4e8b\u4ef6\u767c\u751f\u5728\u904e\u53bb\u3002practice \u7684\u904e\u53bb\u5f0f\u70ba practiced\u3002\" },\n          { q: \"I ___ a big fish while fishing with my uncle last holiday.\", options: [\"catch\", \"catches\", \"caught\", \"catching\"], ans: 2, help: \"\u300clast holiday\uff08\u4e0a\u6b21\u5047\u671f\uff09\u300d\u70ba\u904e\u53bb\u5f0f\u3002catch \u7684\u904e\u53bb\u5f0f\u70ba caught\u3002\" },\n          { q: \"The rain ___ at noon, and the sun shone brightly again.\", options: [\"stop\", \"stopped\", \"stops\", \"stopping\"], ans: 1, help: \"\u52d5\u8a5e stop \u5c6c\u65bc\u300c\u55ae\u6bcd\u97f3+\u55ae\u5b50\u97f3\u300d\uff0c\u904e\u53bb\u5f0f\u9808\u91cd\u8907\u5b57\u5c3e p \u518d\u52a0 ed\uff0c\u5beb\u4f5c stopped\u3002\" }\n        ]\n      },\n      {\n        id: 12,\n        title: \"Chapter 12: I didn't... \/ Did you...? (Past Simple Questions)\",\n        desc: \"\u904e\u53bb\u7c21\u55ae\u5f0f\u5426\u5b9a\u53e5\u8207\u7591\u554f\u53e5 \u2014 \u719f\u7df4\u52a9\u52d5\u8a5e did\/didn't \u5f8c\u9762\u63a5\u300c\u539f\u5f62\u52d5\u8a5e\u300d\u7684\u9435\u5f8b\uff01\",\n        questions: [\n          { q: \"Did you ___ the email I sent you yesterday afternoon?\", options: [\"receive\", \"received\", \"receives\", \"receiving\"], ans: 0, help: \"\u52a9\u52d5\u8a5e Did \u958b\u982d\u7684\u904e\u53bb\u5f0f\u7591\u554f\u53e5\u4e2d\uff0c\u5f8c\u9762\u7684\u5be6\u7fa9\u52d5\u8a5e\u5fc5\u9808\u9084\u539f\u70ba\u300c\u539f\u5f62\u52d5\u8a5e\u300dreceive\u3002\" },\n          { q: \"I ___ watch the football match last night because I had to finish my project.\", options: [\"don't\", \"doesn't\", \"didn't\", \"haven't\"], ans: 2, help: \"\u300clast night\uff08\u6628\u665a\uff09\u300d\u70ba\u904e\u53bb\u5f0f\u5426\u5b9a\uff0c\u4e0d\u8ad6\u4e3b\u8a5e\u55ae\u8907\u6578\uff0c\u4e00\u5f8b\u4f7f\u7528\u52a9\u52d5\u8a5e didn't\u3002\" },\n          { q: \"___ they attend the school picnic last Saturday?\", options: [\"Do\", \"Does\", \"Did\", \"Were\"], ans: 2, help: \"\u300clast Saturday\uff08\u4e0a\u9031\u516d\uff09\u300d\u70ba\u904e\u53bb\u6642\u9593\uff0c\u554f\u53e5\u958b\u982d\u61c9\u7528\u904e\u53bb\u5f0f\u52a9\u52d5\u8a5e Did\u3002\" },\n          { q: \"She didn't ___ any vegetables for dinner yesterday.\", options: [\"bought\", \"buy\", \"buys\", \"buying\"], ans: 1, help: \"\u5426\u5b9a\u52a9\u52d5\u8a5e didn't \u5f8c\u9762\u5fc5\u9808\u642d\u914d\u300c\u539f\u5f62\u52d5\u8a5e\u300d\uff0c\u6545\u9078 buy\u3002\" },\n          { q: \"What did you ___ at the newly opened department store yesterday?\", options: [\"bought\", \"buy\", \"buys\", \"buying\"], ans: 1, help: \"What did you... \u7591\u554f\u53e5\u4e2d\u542b\u6709\u52a9\u52d5\u8a5e did\uff0c\u7a7a\u683c\u8655\u61c9\u586b\u5165\u300c\u539f\u5f62\u52d5\u8a5e\u300dbuy\u3002\" },\n          { q: \"They didn't ___ the museum because it was closed for renovation.\", options: [\"visit\", \"visited\", \"visits\", \"visiting\"], ans: 0, help: \"didn't \u5f8c\u9762\u4e00\u5b9a\u8981\u4f7f\u7528\u300c\u539f\u5f62\u52d5\u8a5e\u300dvisit\u3002\" },\n          { q: \"Did your parents ___ the teachers during the parents' night?\", options: [\"meet\", \"met\", \"meets\", \"meeting\"], ans: 0, help: \"Did \u958b\u982d\u7684\u554f\u53e5\u4e2d\uff0c\u5f8c\u65b9\u7684\u52d5\u8a5e\u61c9\u9084\u539f\u70ba\u539f\u5f62 meet\u3002\" },\n          { q: \"I am sorry, but I didn't ___ your telephone call just now.\", options: [\"hear\", \"heard\", \"hears\", \"hearing\"], ans: 0, help: \"\u300cjust now\uff08\u525b\u624d\uff09\u300d\u70ba\u904e\u53bb\u5f0f\u3002didn't \u5f8c\u9762\u63a5\u539f\u5f62\u52d5\u8a5e hear\u3002\" },\n          { q: \"Why did you ___ so early this morning?\", options: [\"woke up\", \"wake up\", \"wakes up\", \"waking up\"], ans: 1, help: \"\u554f\u53e5\u4e2d\u5df2\u6709\u52a9\u52d5\u8a5e did\uff0c\u5f8c\u65b9\u52d5\u8a5e\u7528\u539f\u5f62 wake up\u3002\" },\n          { q: \"The little girl ___ cry even though she fell down on the playground.\", options: [\"don't\", \"doesn't\", \"didn't\", \"wasn't\"], ans: 2, help: \"\u5f8c\u534a\u53e5\u300cfell down\uff08\u8dcc\u5012\uff0c\u904e\u53bb\u5f0f\uff09\u300d\u63d0\u793a\u4e8b\u4ef6\u70ba\u904e\u53bb\u3002\u904e\u53bb\u5f0f\u5426\u5b9a\u7528 didn't\u3002\" },\n          { q: \"___ you go to school by school bus yesterday?\", options: [\"Do\", \"Did\", \"Were\", \"Had\"], ans: 1, help: \"\u300cyesterday\u300d\u662f\u4e00\u822c\u904e\u53bb\u5f0f\u6642\u9593\u6307\u6a19\u3002\u4e00\u822c\u52d5\u8a5e go \u7684\u904e\u53bb\u554f\u53e5\u4f7f\u7528 Did \u958b\u982d\u3002\" },\n          { q: \"We didn't ___ any souvenirs during our trip to London last month.\", options: [\"bought\", \"buy\", \"buys\", \"buying\"], ans: 1, help: \"\u5426\u5b9a\u52a9\u52d5\u8a5e didn't \u5f8c\u9762\u63a5\u539f\u5f62\u52d5\u8a5e buy\u3002\" },\n          { q: \"Where did she ___ that beautiful dress last week?\", options: [\"get\", \"got\", \"gets\", \"getting\"], ans: 0, help: \"\u7279\u6b8a\u7591\u554f\u53e5 Where did she... \u5f8c\u61c9\u63a5\u539f\u5f62\u52d5\u8a5e get\u3002\" },\n          { q: \"I didn't ___ the homework sheet, so I asked my classmate for help.\", options: [\"have\", \"has\", \"had\", \"having\"], ans: 0, help: \"didn't \u5f8c\u63a5\u539f\u5f62\u52d5\u8a5e\u3002has\/had \u7684\u539f\u5f62\u7686\u70ba have\u3002\" },\n          { q: \"Did the principal ___ to the student representatives yesterday?\", options: [\"speak\", \"spoke\", \"spoken\", \"speaks\"], ans: 0, help: \"Did \u958b\u982d\u554f\u53e5\uff0c\u7a7a\u683c\u8655\u63a5\u539f\u5f62\u52d5\u8a5e speak\u3002\" },\n          { q: \"The weather was perfect, but they ___ play tennis.\", options: [\"don't\", \"doesn't\", \"didn't\", \"aren't\"], ans: 2, help: \"\u524d\u534a\u53e5\u300cwas perfect\uff08\u904e\u53bb\u5f0f\uff09\u300d\u900f\u9732\u6642\u9593\u8108\u7d61\uff0c\u904e\u53bb\u5f0f\u5426\u5b9a\u7528 didn't\u3002\" },\n          { q: \"Did you ___ a bath before going to bed last night?\", options: [\"took\", \"taken\", \"take\", \"takes\"], ans: 2, help: \"Did \u52a9\u52d5\u8a5e\u5f8c\u65b9\u63a5\u539f\u5f62\u52d5\u8a5e take\u3002\" },\n          { q: \"He ___ understand the question, so he raised his hand to ask.\", options: [\"doesn't\", \"didn't\", \"wasn't\", \"don't\"], ans: 1, help: \"\u5f8c\u534a\u53e5\u300craised\uff08\u8209\u624b\uff0c\u904e\u53bb\u5f0f\uff09\u300d\u986f\u793a\u4e8b\u60c5\u767c\u751f\u5728\u904e\u53bb\uff0c\u6545\u9078\u904e\u53bb\u5426\u5b9a didn't\u3002\" },\n          { q: \"Did she ___ to the library to return the books?\", options: [\"goes\", \"went\", \"go\", \"going\"], ans: 2, help: \"\u904e\u53bb\u5f0f\u52a9\u52d5\u8a5e Did \u5f8c\u9762\u63a5\u539f\u5f62\u52d5\u8a5e go\u3002\" },\n          { q: \"My classmates didn't ___ the answers to the difficult puzzle.\", options: [\"knew\", \"know\", \"knows\", \"knowing\"], ans: 1, help: \"didn't \u5f8c\u9762\u5fc5\u63a5\u539f\u5f62\u52d5\u8a5e know\u3002\" }\n        ]\n      },\n      {\n        id: 13,\n        title: \"Chapter 13: I was doing (Past Continuous)\",\n        desc: \"\u904e\u53bb\u9032\u884c\u5f0f \u2014 \u5b78\u6703\u7528 was \/ were + \u52d5\u8a5e-ing \u63cf\u7e6a\u904e\u53bb\u67d0\u7279\u5b9a\u6642\u523b\u6b63\u5728\u767c\u751f\u7684\u751f\u52d5\u60c5\u5883\u3002\",\n        questions: [\n          { q: \"At 8:30 last night, I ___ my homework in my study room.\", options: [\"am doing\", \"was doing\", \"were doing\", \"did\"], ans: 1, help: \"\u300cAt 8:30 last night\u300d\u70ba\u904e\u53bb\u7684\u7279\u5b9a\u6642\u9593\u9ede\uff0c\u4e3b\u8a5e I \u642d\u914d\u904e\u53bb\u9032\u884c\u5f0f was doing\u3002\" },\n          { q: \"What ___ you doing at 4 o'clock yesterday afternoon?\", options: [\"are\", \"was\", \"were\", \"did\"], ans: 2, help: \"\u4e3b\u8a5e\u662f you\uff0c\u904e\u53bb\u9032\u884c\u5f0f\u7591\u554f\u53e5\u61c9\u642d\u914d were\uff1aWhat were you doing...\uff1f\" },\n          { q: \"They ___ playing basketball when the sudden rainstorm started.\", options: [\"are\", \"was\", \"were\", \"did\"], ans: 2, help: \"\u4e3b\u8a5e They \u662f\u8907\u6578\uff0c\u8868\u793a\u7576\u6642\u300c\u6b63\u5728\u9032\u884c\u300d\u7684\u52d5\u4f5c\uff0c\u7528 were playing\u3002\" },\n          { q: \"While my mother was cooking dinner, my father ___ the flower pots.\", options: [\"is watering\", \"was watering\", \"were watering\", \"watered\"], ans: 1, help: \"\u63cf\u8ff0\u904e\u53bb\u540c\u4e00\u6642\u9593\u4e26\u884c\u767c\u751f\u7684\u5169\u4ef6\u9032\u884c\u4e2d\u52d5\u4f5c\uff0c\u4e3b\u8a5e father (\u55ae\u6578) \u642d\u914d was watering\u3002\" },\n          { q: \"The students ___ chatting loudly when the English teacher walked in.\", options: [\"are\", \"was\", \"were\", \"did\"], ans: 2, help: \"\u5b78\u751f\u5011 &quot;The students&quot; \u70ba\u8907\u6578\uff0c\u904e\u53bb\u9032\u884c\u5f0f\u642d\u914d were chatting\u3002\" },\n          { q: \"At this time yesterday, we ___ flying to London.\", options: [\"are\", \"was\", \"were\", \"did\"], ans: 2, help: \"\u300cAt this time yesterday\uff08\u6628\u5929\u7684\u9019\u500b\u6642\u5019\uff09\u300d\u662f\u904e\u53bb\u7279\u5b9a\u6642\u9593\u9ede\uff0cWe \u642d\u914d were flying\u3002\" },\n          { q: \"The wind ___ blowing strongly when we left the cinema.\", options: [\"is\", \"was\", \"were\", \"did\"], ans: 1, help: \"\u98a8 &quot;The wind&quot; \u662f\u55ae\u6578\uff0c\u8868\u793a\u7576\u6642\u6b63\u5728\u5439\uff0c\u7528 was blowing\u3002\" },\n          { q: \"Why ___ she crying in the corridor ten minutes ago?\", options: [\"is\", \"was\", \"were\", \"did\"], ans: 1, help: \"\u4e3b\u8a5e\u662f\u55ae\u6578\u7684 she\uff0c\u6642\u9593\u70ba\u300cten minutes ago\u300d\uff0c\u904e\u53bb\u9032\u884c\u5f0f\u7591\u554f\u7528 was\u3002\" },\n          { q: \"I ___ sleeping soundly when my alarm clock rang at seven.\", options: [\"am\", \"was\", \"were\", \"did\"], ans: 1, help: \"\u5728\u9b27\u9418\u97ff\u8d77\uff08rang\uff0c\u904e\u53bb\u5f0f\uff09\u7684\u90a3\u4e00\u523b\uff0c\u6211\u300c\u6b63\u5728\u7761\u89ba\u300d\uff0c\u4e3b\u8a5e I \u642d\u914d was sleeping\u3002\" },\n          { q: \"The passengers ___ waiting on the platform when the train arrived.\", options: [\"are\", \"was\", \"were\", \"did\"], ans: 2, help: \"\u65c5\u5ba2\u5011 &quot;The passengers&quot; \u662f\u8907\u6578\uff0c\u642d\u914d\u904e\u53bb\u9032\u884c\u5f0f were waiting\u3002\" },\n          { q: \"___ it raining heavily when you woke up this morning?\", options: [\"Is\", \"Was\", \"Were\", \"Did\"], ans: 1, help: \"\u4e3b\u8a5e\u662f\u55ae\u6578\u4ee3\u540d\u8a5e it\uff0c\u904e\u53bb\u9032\u884c\u5f0f\u7591\u554f\u53e5\u4f7f\u7528 Was \u958b\u982d\u3002\" },\n          { q: \"At midnight, the dogs ___ barking loudly outside the building.\", options: [\"are\", \"was\", \"were\", \"did\"], ans: 2, help: \"\u8907\u6578\u7684\u4e3b\u8a5e dogs \u642d\u914d\u904e\u53bb\u9032\u884c\u5f0f were barking\u3002\" },\n          { q: \"I ___ enjoying my delicious ice cream when a seagull snatched it.\", options: [\"am\", \"was\", \"were\", \"did\"], ans: 1, help: \"\u6211\u7576\u6642\u300c\u6b63\u4eab\u53d7\u8457\u300d\u51b0\u6dc7\u6dcb\uff0c\u4e3b\u8a5e I \u642d\u914d was enjoying\u3002\" },\n          { q: \"They ___ not paying attention when the guide explained the rules.\", options: [\"are\", \"was\", \"were\", \"did\"], ans: 2, help: \"\u8907\u6578\u4e3b\u8a5e They \u7684\u904e\u53bb\u9032\u884c\u5f0f\u5426\u5b9a\u7528 were not \/ weren't\u3002\" },\n          { q: \"What song ___ she singing when you entered the music room?\", options: [\"is\", \"was\", \"were\", \"did\"], ans: 1, help: \"\u4e3b\u8a5e\u662f\u55ae\u6578\u7684 she\uff0c\u904e\u53bb\u9032\u884c\u5f0f\u7591\u554f\u53e5\u52d5\u8a5e\u914d was\u3002\" },\n          { q: \"My sister ___ packing her schoolbag when I saw her.\", options: [\"is\", \"was\", \"were\", \"did\"], ans: 1, help: \"\u300cwhen I saw her\uff08\u7576\u6211\u770b\u898b\u5979\u6642\uff0c\u904e\u53bb\u5f0f\uff09\u300d\uff0c\u59d0\u59d0\u7576\u6642\u300c\u6b63\u5728\u6536\u62fe\u300d\uff0c\u7528 was packing\u3002\" },\n          { q: \"The little kittens ___ playing with a ball of wool on the rug.\", options: [\"are\", \"was\", \"were\", \"did\"], ans: 2, help: \"\u8907\u6578\u4e3b\u8a5e kittens \u642d\u914d\u904e\u53bb\u9032\u884c\u5f0f were playing\u3002\" },\n          { q: \"While you were out, I ___ preparing a surprise gift for you.\", options: [\"am\", \"was\", \"were\", \"did\"], ans: 1, help: \"\u300cWhile you were out\uff08\u7576\u4f60\u5916\u51fa\u6642\uff0c\u904e\u53bb\u5f0f\uff09\u300d\uff0c\u6211\u7576\u6642\u6b63\u5728\u6e96\u5099\uff0c\u4e3b\u8a5e I \u642d\u914d was preparing\u3002\" },\n          { q: \"___ they doing their science experiment when the power went out?\", options: [\"Are\", \"Was\", \"Were\", \"Did\"], ans: 2, help: \"\u4e3b\u8a5e\u662f\u8907\u6578\u7684 they\uff0c\u904e\u53bb\u9032\u884c\u5f0f\u7591\u554f\u53e5\u4ee5 Were \u958b\u982d\u3002\" },\n          { q: \"He ___ not riding his bicycle; he was walking his dog.\", options: [\"is\", \"was\", \"were\", \"did\"], ans: 1, help: \"\u7531\u5f8c\u534a\u53e5\u300che was walking\uff08\u904e\u53bb\u9032\u884c\u5f0f\uff09\u300d\u53ef\u77e5\u524d\u534a\u53e5\u4e5f\u70ba\u904e\u53bb\u5f0f\uff0che \u642d\u914d was not\u3002\" }\n        ]\n      },\n      {\n        id: 14,\n        title: \"Chapter 14: I was doing & I did\",\n        desc: \"\u6642\u614b\u96d9\u528d\u5408\u74a7\uff01\u638c\u63e1\u300c\u9577\u52d5\u4f5c\uff08\u9032\u884c\u4e2d \u2014 was\/were doing\uff09\u300d\u88ab\u300c\u77ed\u52d5\u4f5c\uff08\u7a81\u7136\u767c\u751f \u2014 did\uff09\u300d\u4e2d\u65b7\u7684\u7d50\u69cb (when \/ while)\u3002\",\n        questions: [\n          { q: \"While we ___ dinner, the electricity suddenly went out.\", options: [\"had\", \"were having\", \"are having\", \"was having\"], ans: 1, help: \"\u300cWhile\uff08\u7576...\u6642\uff09\u300d\u5e38\u63a5\u9032\u884c\u4e2d\u7684\u9577\u52d5\u4f5c\uff0c\u4e3b\u8a5e we \u642d\u914d past continuous: were having\u3002\" },\n          { q: \"The students were doing an exam when the principal ___ the classroom.\", options: [\"enters\", \"entered\", \"was entering\", \"entering\"], ans: 1, help: \"\u300cwhen\u300d\u63a5\u7a81\u7136\u767c\u751f\u7684\u77ed\u52d5\u4f5c\uff0c\u4e2d\u65b7\u4e86\u6b63\u5728\u9032\u884c\u7684\u8003\u5377\u3002\u7528\u904e\u53bb\u7c21\u55ae\u5f0f entered\u3002\" },\n          { q: \"I ___ my English homework when my mom called me for dinner.\", options: [\"did\", \"was doing\", \"am doing\", \"were doing\"], ans: 1, help: \"\u5abd\u5abd\u53eb\u6211\u5403\u98ef\uff08\u77ed\u52d5\u4f5c\uff09\u6642\uff0c\u6211\u300c\u6b63\u5728\u5beb\u300d\u529f\u8ab2\uff08\u9577\u52d5\u4f5c\uff09\uff0c\u7528 was doing\u3002\" },\n          { q: \"He hurt his ankle while he ___ in the park.\", options: [\"runs\", \"ran\", \"was running\", \"is running\"], ans: 2, help: \"\u300cwhile\u300d\u5f8c\u65b9\u63a5\u6b63\u5728\u9032\u884c\u7684\u9577\u52d5\u4f5c\uff0c\u63cf\u8ff0\u4ed6\u6b63\u5728\u8dd1\u6b65\u6642\uff08was running\uff09\u626d\u50b7\u8173\u8e1d\u3002\" },\n          { q: \"The telephone rang while she ___ a shower.\", options: [\"takes\", \"took\", \"was taking\", \"is taking\"], ans: 2, help: \"\u96fb\u8a71\u97ff\u8d77\u6642\uff0c\u5979\u300c\u6b63\u5728\u6d17\u6fa1\u300d\uff0c\u9577\u52d5\u4f5c\u8981\u7528\u904e\u53bb\u9032\u884c\u5f0f was taking\u3002\" },\n          { q: \"I ___ a cute squirrel while I was walking in the country park.\", options: [\"see\", \"saw\", \"was seeing\", \"seen\"], ans: 1, help: \"\u5728\u6563\u6b65\uff08\u9577\u52d5\u4f5c\uff09\u9014\u4e2d\uff0c\u300c\u7a81\u7136\u770b\u898b\u300d\u4e00\u96bb\u677e\u9f20\uff08\u77ed\u52d5\u4f5c\/\u77ac\u9593\u52d5\u8a5e\uff09\uff0c\u7528\u904e\u53bb\u7c21\u55ae\u5f0f saw\u3002\" },\n          { q: \"They were waiting for the school bus when it ___ to rain.\", options: [\"start\", \"started\", \"was starting\", \"starts\"], ans: 1, help: \"\u7b49\u516c\u8eca\uff08\u9577\u52d5\u4f5c\uff09\u6642\uff0c\u5929\u7a7a\u300c\u7a81\u7136\u958b\u59cb\u300d\u4e0b\u96e8\uff08\u77ed\u52d5\u4f5c\uff09\uff0c\u7528\u904e\u53bb\u7c21\u55ae\u5f0f started\u3002\" },\n          { q: \"While the teacher ___ on the blackboard, two boys started whispering.\", options: [\"writes\", \"wrote\", \"was writing\", \"is writing\"], ans: 2, help: \"\u300cWhile\u300d\u5f15\u5c0e\u8001\u5e2b\u6b63\u5728\u9ed1\u677f\u5beb\u5b57\uff08\u9577\u52d5\u4f5c\uff0c\u55ae\u6578\uff09\uff0c\u4f7f\u7528 was writing\u3002\" },\n          { q: \"When my father arrived home, we ___ a funny cartoon on TV.\", options: [\"watch\", \"watched\", \"were watching\", \"are watching\"], ans: 2, help: \"\u7238\u7238\u5230\u5bb6\u6642\uff0c\u6211\u5011\u300c\u6b63\u5728\u6536\u770b\u300d\u96fb\u8996\u7bc0\u76ee\uff0c\u9577\u52d5\u4f5c\u4f7f\u7528 were watching\u3002\" },\n          { q: \"She lost her wallet while she ___ souvenirs in Mong Kok.\", options: [\"buys\", \"bought\", \"was buying\", \"is buying\"], ans: 2, help: \"\u300cwhile\u300d\u5f8c\u63a5\u9577\u52d5\u4f5c\uff0c\u6307\u5979\u5728\u8cb7\u7d00\u5ff5\u54c1\u7684\u904e\u7a0b\u4e2d\uff08was buying\uff09\u5f04\u4e1f\u9322\u5305\u3002\" },\n          { q: \"I was sleeping soundly when a loud noise ___ me up.\", options: [\"wake\", \"woke\", \"was waking\", \"woken\"], ans: 1, help: \"\u7761\u5922\u4e2d\uff08\u9577\u52d5\u4f5c\uff09\u7a81\u7136\u88ab\u5de8\u97ff\u300c\u5435\u9192\u300d\uff08\u77ed\u52d5\u4f5c\uff09\uff0cwake \u7684\u904e\u53bb\u7c21\u55ae\u5f0f\u70ba woke\u3002\" },\n          { q: \"While the students ___ in the library, the fire alarm rang.\", options: [\"read\", \"were reading\", \"are reading\", \"was reading\"], ans: 1, help: \"\u300cWhile\u300d\u5f8c\u63a5\u9032\u884c\u4e2d\u7684\u9577\u52d5\u4f5c\u3002\u4e3b\u8a5e students \u70ba\u8907\u6578\uff0c\u7528 were reading\u3002\" },\n          { q: \"He broke his glasses while he ___ football on the school field.\", options: [\"plays\", \"played\", \"was playing\", \"is playing\"], ans: 2, help: \"\u5728\u8e22\u8db3\u7403\u7684\u904e\u7a0b\u4e2d\uff08\u9577\u52d5\u4f5c\uff09\uff0c\u5f04\u58de\u4e86\u773c\u93e1\uff0c\u7528\u904e\u53bb\u9032\u884c\u5f0f was playing\u3002\" },\n          { q: \"My sister ___ her finger while she was slicing some onions.\", options: [\"cut\", \"cuts\", \"was cutting\", \"cutting\"], ans: 0, help: \"\u300cwhile\u300d\u5f15\u5c0e\u5207\u6d0b\u8525\u7684\u9577\u52d5\u4f5c\uff0c\u4e2d\u9593\u7a81\u7136\u5207\u5230\u624b\u662f\u77ed\u52d5\u4f5c\uff08cut \u904e\u53bb\u5f0f\u4ecd\u70ba cut\uff09\u3002\" },\n          { q: \"When the postman knocked on the door, I ___ a bath.\", options: [\"take\", \"took\", \"was taking\", \"am taking\"], ans: 2, help: \"\u90f5\u5dee\u6572\u9580\u6642\uff0c\u6211\u300c\u6b63\u5728\u6d17\u6fa1\u300d\uff08\u9577\u52d5\u4f5c\uff09\uff0c\u4f7f\u7528 past continuous: was taking\u3002\" },\n          { q: \"They ___ a wallet on the floor while they were walking to the station.\", options: [\"find\", \"found\", \"were finding\", \"finds\"], ans: 1, help: \"\u5728\u8d70\u5411\u8eca\u7ad9\u7684\u8def\u4e0a\uff08\u9577\u52d5\u4f5c\uff09\uff0c\u300c\u7a81\u7136\u767c\u73fe\u300d\u4e00\u500b\u76ae\u593e\uff08\u77ed\u52d5\u4f5c\uff09\uff0c\u7528\u904e\u53bb\u7c21\u55ae\u5f0f found\u3002\" },\n          { q: \"The lights went out while we ___ a board game.\", options: [\"play\", \"played\", \"were playing\", \"are playing\"], ans: 2, help: \"\u5728\u73a9\u684c\u904a\uff08\u9577\u52d5\u4f5c\uff09\u7684\u904e\u7a0b\u4e2d\uff0c\u71c8\u7a81\u7136\u7184\u6ec5\uff0c\u7528\u8907\u6578\u904e\u53bb\u9032\u884c\u5f0f were playing\u3002\" },\n          { q: \"I ___ my English teacher while I was shopping in Causeway Bay.\", options: [\"meet\", \"met\", \"was meeting\", \"meeting\"], ans: 1, help: \"\u5728\u901b\u8857\uff08\u9577\u52d5\u4f5c\uff09\u6642\uff0c\u300c\u5de7\u9047\u300d\u82f1\u6587\u8001\u5e2b\uff08\u77ed\u52d5\u4f5c\/\u77ac\u9593\u52d5\u8a5e\uff09\uff0c\u7528\u904e\u53bb\u7c21\u55ae\u5f0f met\u3002\" },\n          { q: \"The dog barked loudly while the mailman ___ the letters.\", options: [\"delivers\", \"delivered\", \"was delivering\", \"is delivering\"], ans: 2, help: \"\u300cwhile\u300d\u5f15\u5c0e\u90f5\u5dee\u9001\u4fe1\u7684\u904e\u7a0b\uff08\u9577\u52d5\u4f5c\uff09\uff0c\u4e3b\u8a5e mailman (\u55ae\u6578) \u642d\u914d was delivering\u3002\" },\n          { q: \"We were having a great picnic when the sky suddenly ___ dark.\", options: [\"turn\", \"turned\", \"was turning\", \"turns\"], ans: 1, help: \"\u91ce\u9910\uff08\u9577\u52d5\u4f5c\uff09\u9032\u884c\u5230\u4e00\u534a\uff0c\u5929\u7a7a\u300c\u7a81\u7136\u8b8a\u6697\u300d\uff08\u77ed\u52d5\u4f5c\uff09\uff0c\u9078\u904e\u53bb\u7c21\u55ae\u5f0f turned\u3002\" }\n        ]\n      },\n      {\n        id: 15,\n        title: \"Chapter 15: I have done (Present Perfect 1)\",\n        desc: \"\u73fe\u5728\u5b8c\u6210\u5f0f\u57fa\u790e \u2014 \u638c\u63e1 have \/ has + \u904e\u53bb\u5206\u8a5e (p.p.) \u7684\u57fa\u672c\u516c\u5f0f\uff0c\u8868\u793a\u300c\u904e\u53bb\u767c\u751f\u4f46\u5c0d\u73fe\u5728\u6709\u5f71\u97ff\u300d\u7684\u4e8b\u3002\",\n        questions: [\n          { q: \"She ___ lost her house keys, so she cannot enter her flat now.\", options: [\"have\", \"has\", \"is\", \"was\"], ans: 1, help: \"\u73fe\u5728\u5b8c\u6210\u5f0f\u516c\u5f0f\uff1ahave\/has + p.p.\u3002\u4e3b\u8a5e\u662f\u55ae\u6578\u7684 She\uff0c\u61c9\u642d\u914d\u52a9\u52d5\u8a5e has\u3002\" },\n          { q: \"I have ___ my science homework; here is my book, Mr. Wong.\", options: [\"finish\", \"finished\", \"finishes\", \"finishing\"], ans: 1, help: \"have \u5f8c\u9762\u8981\u63a5\u52d5\u8a5e\u7684\u904e\u53bb\u5206\u8a5e p.p.\uff0c\u898f\u5247\u52d5\u8a5e finish \u7684 p.p. \u70ba finished\u3002\" },\n          { q: \"We ___ already cleaned our desks as the teacher requested.\", options: [\"have\", \"has\", \"are\", \"were\"], ans: 0, help: \"\u4e3b\u8a5e\u662f\u8907\u6578\u7684 We\uff0c\u73fe\u5728\u5b8c\u6210\u5f0f\u52a9\u52d5\u8a5e\u642d\u914d have\u3002\" },\n          { q: \"The children have ___ all the cookies on the dining table.\", options: [\"eat\", \"ate\", \"eats\", \"eaten\"], ans: 3, help: \"have \u5f8c\u9762\u642d\u914d\u904e\u53bb\u5206\u8a5e p.p.\u3002\u52d5\u8a5e eat \u7684\u4e09\u614b\u8b8a\u5316\u70ba eat - ate - eaten\uff0c\u6545\u9078 eaten\u3002\" },\n          { q: \"Our class teacher ___ chosen Lucy to be the new class monitor.\", options: [\"have\", \"has\", \"is\", \"was\"], ans: 1, help: \"\u73ed\u5c0e\u5e2b &quot;Our class teacher&quot; \u662f\u55ae\u6578\uff0c\u73fe\u5728\u5b8c\u6210\u5f0f\u52a9\u52d5\u8a5e\u642d\u914d has\u3002\" },\n          { q: \"I ___ not seen my primary school friends for almost a year.\", options: [\"am\", \"was\", \"have\", \"has\"], ans: 2, help: \"\u73fe\u5728\u5b8c\u6210\u5f0f\u5426\u5b9a\uff1ahave\/has + not + p.p.\u3002\u4e3b\u8a5e I \u642d\u914d have\u3002\" },\n          { q: \"The rain has ___ and the sky is clear now.\", options: [\"stop\", \"stopped\", \"stops\", \"stopping\"], ans: 1, help: \"has \u5f8c\u9762\u63a5\u904e\u53bb\u5206\u8a5e p.p.\uff0c\u898f\u5247\u52d5\u8a5e stop \u91cd\u8907\u5b57\u5c3e p \u52a0 ed \u8b8a\u6210 stopped\u3002\" },\n          { q: \"My parents have ___ a brand new red car.\", options: [\"buy\", \"bought\", \"buys\", \"buying\"], ans: 1, help: \"have \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\u3002buy \u7684\u904e\u53bb\u5f0f\u8207\u904e\u53bb\u5206\u8a5e\u7686\u70ba bought\u3002\" },\n          { q: \"She has ___ a beautiful picture of Hong Kong Harbour.\", options: [\"draw\", \"drew\", \"drawn\", \"draws\"], ans: 2, help: \"has \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\u3002draw \u7684\u4e09\u614b\u70ba draw - drew - drawn\uff0c\u6545\u9078 drawn\u3002\" },\n          { q: \"We ___ lived in this cozy flat since I was five years old.\", options: [\"have\", \"has\", \"are\", \"did\"], ans: 0, help: \"\u4e3b\u8a5e We \u642d\u914d\u73fe\u5728\u5b8c\u6210\u5f0f\u52a9\u52d5\u8a5e have\u3002\" },\n          { q: \"He has ___ his leg, so he cannot participate in the sports day.\", options: [\"break\", \"broke\", \"broken\", \"breaks\"], ans: 2, help: \"has \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\u3002break \u7684\u4e09\u614b\u70ba break - broke - broken\uff0c\u6545\u9078 broken\u3002\" },\n          { q: \"The principal ___ given an inspiring speech to all the graduates.\", options: [\"have\", \"has\", \"is\", \"was\"], ans: 1, help: \"\u6821\u9577 &quot;The principal&quot; \u662f\u55ae\u6578\uff0c\u73fe\u5728\u5b8c\u6210\u5f0f\u52a9\u52d5\u8a5e\u7528 has\u3002\" },\n          { q: \"I have ___ this famous storybook three times because I love it.\", options: [\"read\", \"red\", \"reads\", \"reading\"], ans: 0, help: \"have \u5f8c\u63a5 p.p.\u3002read \u7684\u4e09\u614b\u62fc\u6cd5\u7686\u76f8\u540c (read-read-read)\uff0c\u4f46\u767c\u97f3\u4e0d\u540c (\u767c\u97f3\u985e\u4f3c red)\u3002\" },\n          { q: \"The train has already ___ the station, so we missed it.\", options: [\"leave\", \"left\", \"leaves\", \"leaving\"], ans: 1, help: \"has \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\u3002leave \u7684\u904e\u53bb\u5206\u8a5e\u662f left\u3002\" },\n          { q: \"They ___ not received the exam results yet.\", options: [\"have\", \"has\", \"are\", \"did\"], ans: 0, help: \"\u4e3b\u8a5e They (\u8907\u6578) \u7684\u73fe\u5728\u5b8c\u6210\u5f0f\u5426\u5b9a\u7528 have not \/ haven't\u3002\" },\n          { q: \"My older brother has ___ a tall and handsome teenager.\", options: [\"become\", \"became\", \"becomes\", \"becoming\"], ans: 0, help: \"has \u5f8c\u63a5 p.p.\u3002become \u7684\u4e09\u614b\u8b8a\u5316\u70ba become - became - become\uff0c\u6545\u904e\u53bb\u5206\u8a5e\u4ecd\u70ba become\u3002\" },\n          { q: \"We have ___ a great deal of effort into this English project.\", options: [\"put\", \"putted\", \"puts\", \"putting\"], ans: 0, help: \"have \u5f8c\u63a5 p.p.\u3002put \u7684\u4e09\u614b\u4e0d\u8b8a\uff0c\u7686\u70ba put\u3002\" },\n          { q: \"Tom ___ forgotten to bring his pencil case to school today.\", options: [\"have\", \"has\", \"is\", \"was\"], ans: 1, help: \"Tom \u662f\u55ae\u6578\u4e3b\u8a5e\uff0c\u73fe\u5728\u5b8c\u6210\u5f0f\u52a9\u52d5\u8a5e\u7528 has\u3002\" },\n          { q: \"The birds have ___ away from the cold forest.\", options: [\"fly\", \"flew\", \"flown\", \"flying\"], ans: 2, help: \"have \u5f8c\u63a5 p.p.\u3002fly \u7684\u4e09\u614b\u8b8a\u5316\u70ba fly - flew - flown\uff0c\u6545\u9078 flown\u3002\" },\n          { q: \"I ___ already drunk two cups of water.\", options: [\"am\", \"was\", \"have\", \"has\"], ans: 2, help: \"\u4e3b\u8a5e I \u642d\u914d\u73fe\u5728\u5b8c\u6210\u5f0f\u52a9\u52d5\u8a5e have\u3002\u5f8c\u9762\u642d\u914d\u5df2\u8b8a\u70ba p.p. \u7684 drunk\u3002\" }\n        ]\n      },\n      {\n        id: 16,\n        title: \"Chapter 16: just, already, yet\",\n        desc: \"\u73fe\u5728\u5b8c\u6210\u5f0f\u526f\u8a5e\u5999\u7528 \u2014 \u638c\u63e1 just\uff08\u525b\u525b\uff09\u3001already\uff08\u5df2\u7d93\uff09\u3001yet\uff08\u9084\u6c92\/\u597d\u6c92\uff0c\u5e38\u653e\u5426\u5b9a\/\u7591\u554f\u53e5\u5c3e\uff09\u7684\u6587\u6cd5\u4f4d\u7f6e\u3002\",\n        questions: [\n          { q: \"I am not hungry because I have ___ eaten a very big lunch.\", options: [\"yet\", \"already\", \"still\", \"any\"], ans: 1, help: \"\u300calready\uff08\u5df2\u7d93\uff09\u300d\u5e38\u7528\u65bc\u80af\u5b9a\u53e5\uff0c\u653e\u5728 have\/has \u8207 p.p. \u4e4b\u9593\uff0c\u5f37\u8abf\u4e8b\u60c5\u5df2\u5b8c\u6210\u3002\" },\n          { q: \"Have you finished your English composition ___?\", options: [\"just\", \"already\", \"yet\", \"ever\"], ans: 2, help: \"\u300cyet\uff08\u5b8c\u6210\u4e86\u55ce\uff09\u300d\u5e38\u7528\u65bc\u300c\u7591\u554f\u53e5\u300d\u6216\u300c\u5426\u5b9a\u53e5\u300d\u7684\u300c\u53e5\u5c3e\u300d\uff0c\u6307\u4e8b\u60c5\u662f\u5426\u5b8c\u6210\u4e86\u3002\" },\n          { q: \"Quick! The school bus has ___ arrived; it is waiting outside.\", options: [\"yet\", \"just\", \"ever\", \"never\"], ans: 1, help: \"\u300cjust\uff08\u525b\u525b\uff09\u300d\u901a\u5e38\u653e\u5728 have\/has \u8207 p.p. \u4e4b\u9593\uff0c\u8868\u793a\u52d5\u4f5c\u525b\u525b\u624d\u767c\u751f\u3002\" },\n          { q: \"We haven't received the exam timetable ___.\", options: [\"just\", \"already\", \"yet\", \"never\"], ans: 2, help: \"\u5426\u5b9a\u53e5 &quot;We haven't...&quot; \u7684\u53e5\u5c3e\uff0c\u61c9\u642d\u914d\u6642\u9593\u526f\u8a5e &quot;yet&quot; \u8868\u793a\u300c\u5c1a\u672a\u300d\u3002\" },\n          { q: \"The cartoon has ___ started. Hurry up and sit down!\", options: [\"yet\", \"already\", \"ever\", \"any\"], ans: 1, help: \"\u80af\u5b9a\u53e5 have\/has \u4e4b\u5f8c\u3001\u52d5\u8a5e p.p. \u4e4b\u524d\uff0c\u7528 already \u8868\u793a\u300c\u5df2\u7d93\u300d\u958b\u59cb\u4e86\u3002\" },\n          { q: \"Has the teacher corrected our English homework ___?\", options: [\"yet\", \"already\", \"just\", \"since\"], ans: 0, help: \"\u9019\u662f\u4e00\u500b\u73fe\u5728\u5b8c\u6210\u5f0f\u7591\u554f\u53e5\uff0c\u53e5\u5c3e\u7528 yet \u4f86\u8a62\u554f\u300c\u6539\u597d\u4e86\u6c92\uff1f\u300d\" },\n          { q: \"I have ___ wiped the dining table; it is totally clean now.\", options: [\"yet\", \"just\", \"still\", \"ever\"], ans: 1, help: \"\u6839\u64da\u300c\u73fe\u5728\u975e\u5e38\u4e7e\u6de8\u300d\uff0c\u8868\u793a\u300c\u525b\u525b\u300d\u64e6\u904e\u4e86\uff0c\u7528 just \u6700\u5408\u9069\u3002\" },\n          { q: \"My sister hasn't tidied her room ___.\", options: [\"just\", \"already\", \"yet\", \"since\"], ans: 2, help: \"\u5426\u5b9a\u53e5 &quot;hasn't tidied...&quot; \u53e5\u5c3e\uff0c\u642d\u914d yet \u8868\u793a\u300c\u9084\u6c92\u300d\u6574\u7406\u3002\" },\n          { q: \"We have ___ bought the ingredients, so we can start baking now.\", options: [\"yet\", \"already\", \"ever\", \"never\"], ans: 1, help: \"\u8868\u793a\u300c\u5df2\u7d93\u300d\u8cb7\u597d\u98df\u6750\u4e86\uff0c\u653e\u5728 have \u5f8c\u9762\u7528 already\u3002\" },\n          { q: \"They have ___ returned from their holiday; they look tired.\", options: [\"yet\", \"just\", \"still\", \"any\"], ans: 1, help: \"\u300c\u525b\u525b\u300d\u5f9e\u5047\u671f\u56de\u4f86\uff0chave + just + p.p. \u7d50\u69cb\u3002\" },\n          { q: \"Is dinner ready ___? I am starving!\", options: [\"yet\", \"already\", \"just\", \"still\"], ans: 0, help: \"\u4e00\u822c\u7591\u554f\u53e5\u5c3e\u5e38\u4f7f\u7528 yet\uff0c\u8868\u793a\u300c\uff08\u665a\u98ef\uff09\u597d\u4e86\u6c92\uff1f\u300d\" },\n          { q: \"My father has ___ left the office, so he is on his way home.\", options: [\"yet\", \"just\", \"never\", \"ever\"], ans: 1, help: \"\u7238\u7238\u300c\u525b\u525b\u300d\u96e2\u958b\u8fa6\u516c\u5ba4\uff08has just left\uff09\uff0c\u6240\u4ee5\u6b63\u5728\u56de\u5bb6\u8def\u4e0a\u3002\" },\n          { q: \"She has ___ read that fantasy book twice. She loves it!\", options: [\"yet\", \"already\", \"since\", \"still\"], ans: 1, help: \"\u5979\u300c\u5df2\u7d93\u300d\u8b80\u904e\u5169\u6b21\u4e86\uff0c\u80af\u5b9a\u53e5 have\/has \u8207 p.p. \u4e4b\u9593\u586b already\u3002\" },\n          { q: \"The rain hasn't stopped ___.\", options: [\"already\", \"just\", \"yet\", \"since\"], ans: 2, help: \"\u5426\u5b9a\u53e5 &quot;hasn't stopped&quot; \u53e5\u5c3e\u7528 yet\uff0c\u4ee3\u8868\u96e8\u300c\u9084\u6c92\u300d\u505c\u3002\" },\n          { q: \"Don't enter the room! I have ___ washed the floor, and it is wet.\", options: [\"yet\", \"just\", \"already\", \"ever\"], ans: 1, help: \"\u300c\u5730\u677f\u9084\u662f\u6fd5\u7684\u300d\u8868\u793a\u300c\u525b\u525b\u300d\u62d6\u904e\u5730\uff0c\u7528 just\u3002\" },\n          { q: \"Has the plane landed ___?\", options: [\"yet\", \"already\", \"just\", \"ever\"], ans: 0, help: \"\u7591\u554f\u53e5\u5c3e\u7528 yet \u8868\u793a\u300c\uff08\u98db\u6a5f\uff09\u964d\u843d\u4e86\u55ce\uff1f\u300d\" },\n          { q: \"We don't need to buy bread. Mom has ___ bought some.\", options: [\"yet\", \"already\", \"ever\", \"never\"], ans: 1, help: \"\u4e0d\u9700\u518d\u8cb7\uff0c\u56e0\u70ba\u5abd\u5abd\u300c\u5df2\u7d93\u300d\u8cb7\u4e86\uff0c\u7528 already\u3002\" },\n          { q: \"I have ___ received a lovely birthday gift from my best friend.\", options: [\"yet\", \"just\", \"ever\", \"any\"], ans: 1, help: \"\u300c\u525b\u525b\u300d\u6536\u5230\u4e00\u4efd\u79ae\u7269\uff0chave + just + p.p. \u7d50\u69cb\u3002\" },\n          { q: \"She hasn't decided what to wear for the party ___.\", options: [\"already\", \"just\", \"yet\", \"still\"], ans: 2, help: \"\u5426\u5b9a\u53e5\u53e5\u5c3e\u586b yet\uff0c\u610f\u6307\u300c\u9084\u6c92\u300d\u6c7a\u5b9a\u597d\u3002\" },\n          { q: \"The postman has ___ delivered the mail; go and check the mailbox.\", options: [\"yet\", \"just\", \"ever\", \"never\"], ans: 1, help: \"\u300c\u53bb\u6aa2\u67e5\u4fe1\u7bb1\u300d\u662f\u56e0\u70ba\u90f5\u5dee\u300c\u525b\u525b\u300d\u9001\u5b8c\u4fe1\uff0c\u7528 just\u3002\" }\n        ]\n      },\n      {\n        id: 17,\n        title: \"Chapter 17: Have you ever...?\",\n        desc: \"\u73fe\u5728\u5b8c\u6210\u5f0f\u7d93\u9a57\u8ac7 \u2014 \u7cbe\u901a ever \/ never \u7684\u554f\u8207\u7b54\uff0c\u4e26\u641e\u61c2 been to (\u53bb\u904e\u5df2\u56de) \u8207 gone to (\u53bb\u4e86\u672a\u56de) \u7684\u91cd\u5927\u5dee\u5225\uff01\",\n        questions: [\n          { q: \"Have you ___ been to Ocean Park? It is a wonderful theme park.\", options: [\"never\", \"ever\", \"yet\", \"just\"], ans: 1, help: \"\u8a62\u554f\u4ed6\u4eba\u751f\u547d\u4e2d\u7684\u7d93\u9a57\u300c\u6709\u6c92\u6709\u66fe\u7d93...\uff1f\u300d\uff0c\u7591\u554f\u53e5\u4e2d\u7528 ever\u3002\" },\n          { q: \"My sister has ___ been to Japan, but she hopes to go there next year.\", options: [\"never\", \"ever\", \"yet\", \"already\"], ans: 0, help: \"\u6839\u64da\u8a9e\u610f\u300c\u5e0c\u671b\u660e\u5e74\u80fd\u53bb\u300d\uff0c\u4ee3\u8868\u5979\u300c\u5f9e\u672a\uff08never\uff09\u300d\u53bb\u904e\u65e5\u672c\u3002\" },\n          { q: \"Where is Lucy? She is not at home. She has ___ to the library.\", options: [\"been\", \"gone\", \"go\", \"went\"], ans: 1, help: \"\u4eba\u4e0d\u5728\u5bb6\uff0c\u4ee3\u8868\u300c\u53bb\u4e86\u9084\u6c92\u56de\u4f86\u300d\uff0c\u8981\u7528 has gone to\uff1b\u82e5\u4eba\u5df2\u56de\u4f86\u5247\u7528 has been to\u3002\" },\n          { q: \"I have ___ to Australia twice; the beaches there are amazing.\", options: [\"been\", \"gone\", \"went\", \"going\"], ans: 0, help: \"\u6211\u73fe\u5728\u80fd\u5206\u4eab\u6d77\u7058\u5f88\u68d2\uff0c\u8868\u793a\u6211\u300c\u53bb\u904e\u4e14\u5df2\u7d93\u56de\u4f86\u4e86\u300d\uff0c\u8981\u7528 have been to\u3002\" },\n          { q: \"Has he ever ___ a speech in front of the whole school?\", options: [\"give\", \"gave\", \"given\", \"gives\"], ans: 2, help: \"Has he ever... \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\uff0cgive \u7684 p.p. \u70ba given\u3002\" },\n          { q: \"My uncle has ___ to Paris; he is staying there for two weeks.\", options: [\"been\", \"gone\", \"went\", \"going\"], ans: 1, help: \"\u4ed6\u300c\u8981\u5728\u5df4\u9ece\u5f85\u5169\u9031\uff08\u4ecd\u5728\u90a3\u88e1\uff09\u300d\uff0c\u8868\u793a\u300c\u53bb\u4e86\u5c1a\u672a\u8fd4\u56de\u300d\uff0c\u7528 has gone to\u3002\" },\n          { q: \"I have ___ eaten sushi before, so I am excited to try it tonight.\", options: [\"never\", \"ever\", \"already\", \"just\"], ans: 0, help: \"\u4eca\u665a\u5f88\u8208\u596e\u8981\u5617\u8a66\uff0c\u610f\u5373\u904e\u53bb\u300c\u5f9e\u672a\u300d\u5403\u904e sushi\uff0c\u7528 never\u3002\" },\n          { q: \"Have they ever ___ an elephant in the wild?\", options: [\"see\", \"saw\", \"seen\", \"seeing\"], ans: 2, help: \"Have... ever \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\uff0csee \u7684 p.p. \u662f seen\u3002\" },\n          { q: \"Mr. Chan is not in the office. He has ___ to the bank to withdraw cash.\", options: [\"been\", \"gone\", \"go\", \"went\"], ans: 1, help: \"\u300c\u4eba\u4e0d\u5728\u8fa6\u516c\u5ba4\u300d\uff0c\u4ee3\u8868\u53bb\u4e86\u9280\u884c\u9084\u6c92\u56de\u4f86\uff0c\u4f7f\u7528 has gone to\u3002\" },\n          { q: \"Have you ever ___ a roller coaster? It is extremely exciting.\", options: [\"ride\", \"rode\", \"ridden\", \"riding\"], ans: 2, help: \"Have you ever \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\u3002ride \u7684 p.p. \u70ba ridden\u3002\" },\n          { q: \"We have ___ visited the Big Buddha, so we want to go there today.\", options: [\"ever\", \"never\", \"already\", \"just\"], ans: 1, help: \"\u300c\u6240\u4ee5\u6211\u5011\u4eca\u5929\u60f3\u53bb\u300d\uff0c\u4ee3\u8868\u4ee5\u524d\u300c\u5f9e\u672a\u300d\u53bb\u904e\uff0c\u9078 never\u3002\" },\n          { q: \"My parents have ___ to London several times; they know the city well.\", options: [\"been\", \"gone\", \"went\", \"going\"], ans: 0, help: \"\u300c\u4ed6\u5011\u5f88\u719f\u90a3\u5ea7\u57ce\u5e02\uff08\u73fe\u5728\u4eba\u5728\u9019\u88e1\u8b1b\u8a71\uff09\u300d\uff0c\u8868\u793a\u300c\u53bb\u904e\u4e26\u5df2\u56de\u4f86\u300d\uff0c\u7528 have been to\u3002\" },\n          { q: \"Has your friend ever ___ a horse?\", options: [\"ride\", \"rode\", \"ridden\", \"riding\"], ans: 2, help: \"\u904e\u53bb\u5206\u8a5e p.p.\u3002ride \u7684 p.p. \u70ba ridden\u3002\" },\n          { q: \"I have ___ heard such a beautiful piano piece before; who is playing?\", options: [\"ever\", \"never\", \"already\", \"just\"], ans: 1, help: \"\u300c\u4ee5\u524d\u5f9e\u672a\u807d\u904e\uff08never before\uff09\u300d\u5982\u6b64\u7f8e\u5999\u7684\u92fc\u7434\u66f2\u3002\" },\n          { q: \"They are on holiday. They have ___ to Canada.\", options: [\"been\", \"gone\", \"go\", \"went\"], ans: 1, help: \"\u300c\u4ed6\u5011\u6b63\u5728\u5ea6\u5047\u300d\uff0c\u4eba\u4ecd\u5728\u52a0\u62ff\u5927\uff0c\u53bb\u4e86\u672a\u56de\uff0c\u7528 have gone to\u3002\" },\n          { q: \"Have you ever ___ a famous person in real life?\", options: [\"meet\", \"met\", \"meets\", \"meeting\"], ans: 1, help: \"Have you ever \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\uff0cmeet \u7684 p.p. \u662f met\u3002\" },\n          { q: \"We can go to the classroom now. The rain has ___.\", options: [\"stop\", \"stopped\", \"stops\", \"stopping\"], ans: 1, help: \"\u73fe\u5728\u53ef\u4ee5\u53bb\uff0c\u56e0\u70ba\u96e8\u300c\u5df2\u7d93\u505c\u4e86\u300d\uff0c\u7528 stopped (has stopped)\u3002\" },\n          { q: \"Where are my scissors? I have ___ them on the desk, but now they are gone.\", options: [\"put\", \"putted\", \"putting\", \"puts\"], ans: 0, help: \"\u6211\u66fe\u7d93\u628a\u526a\u5200\u653e\u5728\u684c\u4e0a\u3002put \u7684 p.p. \u4f9d\u7136\u662f put\u3002\" },\n          { q: \"Has she ever ___ to Singapore?\", options: [\"been\", \"gone\", \"go\", \"went\"], ans: 0, help: \"\u8a62\u554f\u7d93\u9a57\u300c\u5979\u6709\u6c92\u6709\u53bb\u904e\u65b0\u52a0\u5761\uff08\u4e26\u56de\u4f86\uff09\uff1f\u300d\uff0c\u7528 Has she ever been to...\uff1f\" },\n          { q: \"I have ___ flown in a helicopter, but I hope to try it someday.\", options: [\"ever\", \"never\", \"already\", \"just\"], ans: 1, help: \"\u5e0c\u671b\u6709\u671d\u4e00\u65e5\u80fd\u5617\u8a66\uff0c\u4ee3\u8868\u4ee5\u524d\u300c\u5f9e\u672a\u300d\u642d\u4e58\u904e\uff0c\u7528 never\u3002\" }\n        ]\n      },\n      {\n        id: 18,\n        title: \"Chapter 18: How long have you...?\",\n        desc: \"\u73fe\u5728\u5b8c\u6210\u5f0f\u6301\u7e8c\u6642\u9593 \u2014 \u5b78\u7fd2\u5982\u4f55\u4f7f\u7528\u300c\u5b8c\u6210\u5f0f\u300d\u4f86\u8a62\u554f\u4e26\u8868\u9054\u5f9e\u904e\u53bb\u4e00\u76f4\u6301\u7e8c\u5230\u73fe\u5728\u7684\u52d5\u4f5c\u6216\u72c0\u614b\u3002\",\n        questions: [\n          { q: \"How long ___ you known your best friend?\", options: [\"do\", \"did\", \"have\", \"are\"], ans: 2, help: \"\u554f\u5f9e\u904e\u53bb\u8a8d\u8b58\u4e00\u76f4\u6301\u7e8c\u5230\u73fe\u5728\u7684\u6642\u9593\u9577\u5ea6\uff0c\u7528\u73fe\u5728\u5b8c\u6210\u5f0f How long have you + p.p.\u3002\" },\n          { q: \"My parents ___ married for twenty years, and they are celebrating today.\", options: [\"are\", \"were\", \"have been\", \"has been\"], ans: 2, help: \"\u300c\u6301\u7e8c\u4e8c\u5341\u5e74\uff08for twenty years\uff09\u300d\u81f3\u73fe\u5728\u3002\u4e3b\u8a5e parents \u70ba\u8907\u6578\uff0c\u642d\u914d have been\u3002\" },\n          { q: \"How long has she ___ in Hong Kong?\", options: [\"live\", \"lived\", \"lives\", \"living\"], ans: 1, help: \"How long has she... \u7d50\u69cb\uff0c\u7a7a\u683c\u8655\u586b\u5165\u904e\u53bb\u5206\u8a5e p.p.\uff0c\u9078 lived\u3002\" },\n          { q: \"We have ___ this cute pet dog for three years.\", options: [\"have\", \"had\", \"has\", \"having\"], ans: 1, help: \"have \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\uff0c\u8868\u793a\u64c1\u6709\u6b64\u72d7\u4e09\u5e74\u4e86\uff0chave \u7684 p.p. \u7232 had\u3002\" },\n          { q: \"How long ___ your father had his red car?\", options: [\"do\", \"did\", \"has\", \"have\"], ans: 2, help: \"\u4e3b\u8a5e your father \u662f\u55ae\u6578\uff0c\u73fe\u5728\u5b8c\u6210\u5f0f\u52a9\u52d5\u8a5e\u7528 has\u3002\" },\n          { q: \"They have ___ English at this primary school since 2021.\", options: [\"study\", \"studies\", \"studied\", \"studying\"], ans: 2, help: \"have \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\u3002study \u7684 p.p. \u7232 studied\u3002\" },\n          { q: \"How long ___ the baby been asleep?\", options: [\"is\", \"was\", \"has\", \"have\"], ans: 2, help: \"\u4e3b\u8a5e the baby \u662f\u55ae\u6578\uff0c\u73fe\u5728\u5b8c\u6210\u5f0f\u554f\u53e5\u4f7f\u7528\u52a9\u52d5\u8a5e has\u3002\" },\n          { q: \"I ___ been a member of the school choir for two years.\", options: [\"am\", \"was\", \"have\", \"has\"], ans: 2, help: \"\u4e3b\u8a5e I \u642d\u914d\u73fe\u5728\u5b8c\u6210\u5f0f\u52a9\u52d5\u8a5e have\u3002\" },\n          { q: \"How long have they ___ in that tall building?\", options: [\"stay\", \"stayed\", \"stays\", \"staying\"], ans: 1, help: \"How long have they... \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\uff0c\u9078 stayed\u3002\" },\n          { q: \"My uncle has ___ a professional chef for over ten years.\", options: [\"is\", \"was\", \"be\", \"been\"], ans: 3, help: \"has \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\uff0cbe \u52d5\u8a5e\u7684 p.p. \u70ba been\u3002\" },\n          { q: \"How long has your brother ___ a fever?\", options: [\"has\", \"have\", \"had\", \"having\"], ans: 2, help: \"has your brother... \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\uff0c\u9078 had\u3002\" },\n          { q: \"We have ___ each other since we were in kindergarten.\", options: [\"know\", \"knew\", \"known\", \"knowing\"], ans: 2, help: \"have \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\u3002know \u7684\u4e09\u614b\u70ba know - knew - known\uff0c\u6545\u9078 known\u3002\" },\n          { q: \"How long ___ they been best friends?\", options: [\"are\", \"were\", \"have\", \"has\"], ans: 2, help: \"\u4e3b\u8a5e\u662f\u8907\u6578\u7684 they\uff0c\u554f\u53e5\u52a9\u52d5\u8a5e\u7528 have\u3002\" },\n          { q: \"She ___ had her new smartphone for just a week.\", options: [\"have\", \"has\", \"is\", \"was\"], ans: 1, help: \"\u4e3b\u8a5e\u662f\u55ae\u6578\u7684 she\uff0c\u73fe\u5728\u5b8c\u6210\u5f0f\u52a9\u52d5\u8a5e\u7528 has\u3002\" },\n          { q: \"How long have you ___ this beautiful piano?\", options: [\"own\", \"owned\", \"owns\", \"owning\"], ans: 1, help: \"How long have you... \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\uff0c\u898f\u5247\u52d5\u8a5e own \u52a0 ed \u8b8a\u6210 owned\u3002\" },\n          { q: \"Mr. Wong ___ our school principal since last September.\", options: [\"is\", \"was\", \"has been\", \"have been\"], ans: 2, help: \"\u8868\u793a\u5f9e\u53bb\u5e74\u4e5d\u6708\u6301\u7e8c\u5230\u73fe\u5728\u7684\u72c0\u614b\uff0c\u4e3b\u8a5e Mr. Wong \u662f\u55ae\u6578\uff0c\u642d\u914d has been\u3002\" },\n          { q: \"How long ___ she had her pet cat?\", options: [\"do\", \"did\", \"has\", \"have\"], ans: 2, help: \"\u4e3b\u8a5e she \u662f\u55ae\u6578\uff0c\u554f\u53e5\u52a9\u52d5\u8a5e\u7528 has\u3002\" },\n          { q: \"The museum ___ open for fifty years.\", options: [\"is\", \"was\", \"has been\", \"have been\"], ans: 2, help: \"\u535a\u7269\u9928 &quot;The museum&quot; \u70ba\u55ae\u6578\uff0c\u73fe\u5728\u5b8c\u6210\u5f0f\u642d\u914d has been\u3002\" },\n          { q: \"How long have we ___ for the school bus?\", options: [\"wait\", \"waited\", \"waits\", \"waiting\"], ans: 1, help: \"How long have we... \u5f8c\u63a5\u904e\u53bb\u5206\u8a5e p.p.\uff0c\u9078 waited\u3002\" },\n          { q: \"They ___ lived in New York since they left Hong Kong.\", options: [\"have\", \"has\", \"are\", \"were\"], ans: 0, help: \"\u4e3b\u8a5e they \u642d\u914d\u73fe\u5728\u5b8c\u6210\u5f0f\u52a9\u52d5\u8a5e have\u3002\" }\n        ]\n      },\n      {\n        id: 19,\n        title: \"Chapter 19: for \/ since \/ ago\",\n        desc: \"\u6642\u9593\u6307\u6a19\u5927\u4f5c\u6230 \u2014 \u91d0\u6e05 for\uff08\u63a5\u6642\u9593\u9577\u5ea6\uff09\u3001since\uff08\u63a5\u904e\u53bb\u6642\u9593\u8d77\u9ede\uff09\u3001\u8207 ago\uff08\u7528\u65bc\u904e\u53bb\u5f0f\uff0c\u610f\u6307...\u4ee5\u524d\uff09\u3002\",\n        questions: [\n          { q: \"I have been waiting for my friend ___ thirty minutes.\", options: [\"since\", \"for\", \"ago\", \"before\"], ans: 1, help: \"\u300cthirty minutes\u300d\u662f\u4e00\u6bb5\u300c\u6642\u9593\u9577\u5ea6\u300d\uff0c\u56e0\u6b64\u642d\u914d\u6642\u9593\u4ecb\u4fc2\u8a5e for\u3002\" },\n          { q: \"We have lived in this housing estate ___ 2018.\", options: [\"since\", \"for\", \"ago\", \"during\"], ans: 0, help: \"\u300c2018\u300d\u662f\u904e\u53bb\u7684\u300c\u6642\u9593\u8d77\u9ede\u300d\uff0c\u73fe\u5728\u5b8c\u6210\u5f0f\u4e2d\u61c9\u642d\u914d since\u3002\" },\n          { q: \"The school concert finished two hours ___.\", options: [\"since\", \"for\", \"ago\", \"yet\"], ans: 2, help: \"\u300ctwo hours ago\uff08\u5169\u5c0f\u6642\u524d\uff09\u300d\u7528\u65bc\u300c\u904e\u53bb\u7c21\u55ae\u5f0f\u300d\uff08finished\uff09\uff0c\u8868\u793a\u904e\u53bb\u7684\u4e8b\u3002\" },\n          { q: \"She has been sick ___ last Monday.\", options: [\"for\", \"since\", \"ago\", \"during\"], ans: 1, help: \"\u300clast Monday\uff08\u4e0a\u9031\u4e00\uff09\u300d\u662f\u904e\u53bb\u7279\u5b9a\u6642\u9593\u8d77\u9ede\uff0c\u642d\u914d since \u610f\u6307\u300c\u81ea\u4e0a\u9031\u4e00\u4ee5\u4f86\u300d\u3002\" },\n          { q: \"They have been married ___ twenty years.\", options: [\"since\", \"for\", \"ago\", \"before\"], ans: 1, help: \"\u300ctwenty years\uff08\u4e8c\u5341\u5e74\uff09\u300d\u662f\u4e00\u6bb5\u6642\u9593\u9577\u5ea6\uff0c\u642d\u914d for\u3002\" },\n          { q: \"Our family moved to Hong Kong ten years ___.\", options: [\"since\", \"for\", \"ago\", \"yet\"], ans: 2, help: \"\u53e5\u5b50\u52d5\u8a5e &quot;moved&quot; \u662f\u4e00\u822c\u904e\u53bb\u5f0f\uff0c\u5f8c\u9762\u63a5\u6642\u9593\u6bb5 + ago \u8868\u793a\u300c\u5341\u5e74\u524d\u300d\u3002\" },\n          { q: \"I haven't seen my English teacher ___ yesterday.\", options: [\"for\", \"since\", \"ago\", \"already\"], ans: 1, help: \"\u300cyesterday\uff08\u6628\u5929\uff09\u300d\u662f\u6642\u9593\u8d77\u9ede\uff0c\u73fe\u5728\u5b8c\u6210\u5f0f\u5426\u5b9a\u53e5\u4e2d\u642d\u914d since\u3002\" },\n          { q: \"He has played the violin ___ three years.\", options: [\"since\", \"for\", \"ago\", \"before\"], ans: 1, help: \"\u300cthree years\uff08\u4e09\u5e74\uff09\u300d\u662f\u6642\u9593\u9577\u5ea6\uff0c\u642d\u914d for\u3002\" },\n          { q: \"The train arrived at the station five minutes ___.\", options: [\"since\", \"for\", \"ago\", \"yet\"], ans: 2, help: \"\u4e00\u822c\u904e\u53bb\u5f0f\u52d5\u8a5e &quot;arrived&quot; \u642d\u914d\u6642\u9593 + ago \u8868\u793a\u300c\u4e94\u5206\u9418\u524d\u300d\u3002\" },\n          { q: \"I have known Lucy ___ we were in kindergarten.\", options: [\"for\", \"since\", \"ago\", \"during\"], ans: 1, help: \"since \u5f8c\u9762\u53ef\u63a5\u300c\u904e\u53bb\u7c21\u55ae\u5f0f\u7684\u5b50\u53e5\uff08we were...\uff09\u300d\u4f5c\u70ba\u6642\u9593\u8d77\u9ede\u3002\" },\n          { q: \"She has had her new schoolbag ___ a week.\", options: [\"since\", \"for\", \"ago\", \"before\"], ans: 1, help: \"\u300ca week\uff08\u4e00\u661f\u671f\uff09\u300d\u662f\u6642\u9593\u9577\u5ea6\uff0c\u642d\u914d for\u3002\" },\n          { q: \"Our lesson started fifteen minutes ___.\", options: [\"since\", \"for\", \"ago\", \"already\"], ans: 2, help: \"\u4e00\u822c\u904e\u53bb\u5f0f\u52d5\u8a5e &quot;started&quot; \u642d\u914d ago \u8868\u793a\u300c\u5341\u4e94\u5206\u9418\u524d\u300d\u3002\" },\n          { q: \"They haven't eaten any chocolate ___ last month.\", options: [\"for\", \"since\", \"ago\", \"already\"], ans: 1, help: \"\u300clast month\uff08\u4e0a\u500b\u6708\uff09\u300d\u662f\u6642\u9593\u8d77\u9ede\uff0c\u73fe\u5728\u5b8c\u6210\u5f0f\u5426\u5b9a\u53e5\u4e2d\u642d\u914d since\u3002\" },\n          { q: \"My father has worked in Central ___ fifteen years.\", options: [\"since\", \"for\", \"ago\", \"during\"], ans: 1, help: \"\u300cfifteen years\uff08\u5341\u4e94\u5e74\uff09\u300d\u662f\u6642\u9593\u9577\u5ea6\uff0c\u642d\u914d for\u3002\" },\n          { q: \"The postman delivered the letter an hour ___.\", options: [\"since\", \"for\", \"ago\", \"yet\"], ans: 2, help: \"\u4e00\u822c\u904e\u53bb\u5f0f &quot;delivered&quot; \u642d\u914d ago \u8868\u793a\u300c\u4e00\u5c0f\u6642\u524d\u300d\u3002\" },\n          { q: \"We have been classmates ___ last September.\", options: [\"for\", \"since\", \"ago\", \"before\"], ans: 1, help: \"\u300clast September\uff08\u53bb\u5e74\u4e5d\u6708\uff09\u300d\u662f\u660e\u78ba\u7684\u6642\u9593\u8d77\u9ede\uff0c\u642d\u914d since\u3002\" },\n          { q: \"My elder brother graduated from university two years ___.\", options: [\"since\", \"for\", \"ago\", \"yet\"], ans: 2, help: \"\u4e00\u822c\u904e\u53bb\u5f0f &quot;graduated&quot; \u642d\u914d ago \u8868\u793a\u300c\u5169\u5e74\u524d\u76ee\u6a19\u300d\u3002\" },\n          { q: \"I have had this computer ___ five months.\", options: [\"since\", \"for\", \"ago\", \"during\"], ans: 1, help: \"\u300cfive months\uff08\u4e94\u500b\u6708\uff09\u300d\u662f\u6642\u9593\u9577\u5ea6\uff0c\u642d\u914d for\u3002\" },\n          { q: \"They have been best friends ___ they joined the club.\", options: [\"for\", \"since\", \"ago\", \"already\"], ans: 1, help: \"since \u63a5\u904e\u53bb\u7c21\u55ae\u5f0f\u5b50\u53e5\u300c\u81ea\u5f9e\u4ed6\u5011\u52a0\u5165\u793e\u5718\u4ee5\u4f86\u300d\u4f5c\u70ba\u8d77\u9ede\u3002\" },\n          { q: \"The rain stopped an hour ___.\", options: [\"since\", \"for\", \"ago\", \"yet\"], ans: 2, help: \"\u904e\u53bb\u5f0f\u52d5\u8a5e &quot;stopped&quot; \u642d\u914d ago\uff0c\u8868\u793a\u300c\u4e00\u5c0f\u6642\u524d\u300d\u3002\" }\n        ]\n      },\n      {\n        id: 20,\n        title: \"Chapter 20: I have done & I did\",\n        desc: \"\u6642\u614b\u7d42\u6975\u5c0d\u6c7a\uff01\u5224\u65b7\u6642\u9593\u662f\u300c\u5df2\u6210\u904e\u53bb\u3001\u4e0d\u53ef\u66f4\u6539\uff08\u4f7f\u7528\u904e\u53bb\u7c21\u55ae\u5f0f\uff09\u300d\u9084\u662f\u300c\u8207\u73fe\u5728\u76f8\u9023\u3001\u7d93\u9a57\u7d2f\u7a4d\uff08\u4f7f\u7528\u73fe\u5728\u5b8c\u6210\u5f0f\uff09\u300d\u3002\",\n        questions: [\n          { q: \"Shakespeare ___ many famous plays, including Hamlet, before he died.\", options: [\"has written\", \"wrote\", \"writes\", \"is writing\"], ans: 1, help: \"\u838e\u58eb\u6bd4\u4e9e\u662f\u6b77\u53f2\u4eba\u7269\u4e14\u5df2\u53bb\u4e16\uff0c\u4ed6\u7684\u5275\u4f5c\u751f\u6daf\u5b8c\u5168\u5c6c\u65bc\u904e\u53bb\uff08\u4e0d\u80fd\u518d\u5beb\u65b0\u4f5c\u54c1\uff09\uff0c\u5fc5\u9808\u7528\u904e\u53bb\u7c21\u55ae\u5f0f wrote\u3002\" },\n          { q: \"I ___ to Singapore twice this year, and I want to visit it again.\", options: [\"have been\", \"went\", \"go\", \"was going\"], ans: 0, help: \"\u300cthis year\uff08\u4eca\u5e74\uff09\u300d\u5c1a\u672a\u7d50\u675f\uff0c\u4e14\u8868\u793a\u622a\u81f3\u76ee\u524d\u7684\u7d2f\u7a4d\u7d93\u9a57\uff0c\u4f7f\u7528\u73fe\u5728\u5b8c\u6210\u5f0f have been\u3002\" },\n          { q: \"My parents ___ to Taiwan last year for their anniversary.\", options: [\"have gone\", \"went\", \"have been\", \"go\"], ans: 1, help: \"\u300clast year\uff08\u53bb\u5e74\uff09\u300d\u662f\u5b8c\u5168\u904e\u53bb\u3001\u8207\u73fe\u5728\u5207\u65b7\u7684\u6642\u9593\u9ede\uff0c\u5fc5\u9808\u7528\u904e\u53bb\u7c21\u55ae\u5f0f went\u3002\" },\n          { q: \"JK Rowling ___ a new fantasy book recently.\", options: [\"writes\", \"wrote\", \"has written\", \"is writing\"], ans: 2, help: \"\u300crecently\uff08\u6700\u8fd1\uff09\u300d\u5e38\u8207\u73fe\u5728\u5b8c\u6210\u5f0f\u9023\u7528\uff0c\u4e14\u4f5c\u8005\u4f9d\u7136\u5728\u4e16\u3001\u53ef\u80fd\u7e7c\u7e8c\u5275\u4f5c\uff0c\u7528 has written\u3002\" },\n          { q: \"___ you see the solar eclipse yesterday afternoon?\", options: [\"Have\", \"Did\", \"Do\", \"Were\"], ans: 1, help: \"\u300cyesterday afternoon\u300d\u662f\u904e\u53bb\u6642\u9593\uff0c\u4e00\u822c\u52d5\u8a5e\u554f\u53e5\u7528\u904e\u53bb\u52a9\u52d5\u8a5e Did \u958b\u982d\u3002\" },\n          { q: \"I ___ my smartphone keys this morning, and I still cannot find them.\", options: [\"lost\", \"have lost\", \"lose\", \"am losing\"], ans: 1, help: \"\u96d6\u7136\u4e1f\u5931\u5728\u4eca\u5929\u65e9\u4e0a\uff0c\u4f46\u56e0\u70ba\u300c\u73fe\u5728\u4f9d\u7136\u627e\u4e0d\u5230\uff08\u5c0d\u73fe\u5728\u6709\u91cd\u8981\u5f71\u97ff\uff09\u300d\uff0c\u8981\u7528\u73fe\u5728\u5b8c\u6210\u5f0f have lost\u3002\" },\n          { q: \"The school ___ in 1995, and it is very famous now.\", options: [\"has opened\", \"opened\", \"opens\", \"was opening\"], ans: 1, help: \"\u300cin 1995\u300d\u662f\u904e\u53bb\u660e\u78ba\u7684\u5e74\u4efd\uff0c\u8868\u793a\u5728\u904e\u53bb\u67d0\u500b\u6642\u9593\u9ede\u5275\u6821\uff0c\u4f7f\u7528\u904e\u53bb\u7c21\u55ae\u5f0f opened\u3002\" },\n          { q: \"Oh no! I ___ my tea on the table; look at the big stain!\", options: [\"spilled\", \"have spilled\", \"spill\", \"am spilling\"], ans: 1, help: \"\u300c\u770b\u9019\u500b\u5927\u6c61\u6f2c\uff01\u300d\u8868\u793a\u904e\u53bb\u52d5\u4f5c\u5c0d\u73fe\u5728\u9020\u6210\u4e86\u660e\u986f\u7684\u5f8c\u679c\u8207\u5f71\u97ff\uff0c\u4f7f\u7528\u73fe\u5728\u5b8c\u6210\u5f0f have spilled\u3002\" },\n          { q: \"Where ___ you spend your summer holidays last year?\", options: [\"have\", \"did\", \"do\", \"were\"], ans: 1, help: \"\u300clast year\uff08\u53bb\u5e74\uff09\u300d\u662f\u904e\u53bb\u6642\u9593\uff0c\u4e00\u822c\u52d5\u8a5e spend \u7684\u904e\u53bb\u554f\u53e5\u642d\u914d Did\u3002\" },\n          { q: \"My uncle ___ three different countries so far in his life.\", options: [\"visited\", \"has visited\", \"visits\", \"is visiting\"], ans: 1, help: \"\u300cso far\uff08\u5230\u76ee\u524d\u70ba\u6b62\uff09\u300d\u662f\u73fe\u5728\u5b8c\u6210\u5f0f\u7684\u95dc\u9375\u5b57\uff0c\u8868\u793a\u4eba\u751f\u7684\u7d2f\u7a4d\u7d93\u9a57\uff0c\u7528 has visited\u3002\" },\n          { q: \"I ___ a delicious dinner for my family yesterday.\", options: [\"have cooked\", \"cooked\", \"cook\", \"cooking\"], ans: 1, help: \"\u300cyesterday\u300d\u662f\u660e\u78ba\u904e\u53bb\u6642\u9593\uff0c\u4f7f\u7528\u904e\u53bb\u7c21\u55ae\u5f0f cooked\u3002\" },\n          { q: \"We ___ all our exams, so we are celebrating happily now.\", options: [\"passed\", \"have passed\", \"pass\", \"passing\"], ans: 1, help: \"\u300c\u6211\u5011\u73fe\u5728\u5f88\u958b\u5fc3\u5730\u5728\u6176\u795d\u300d\uff0c\u8868\u793a\u8003\u8a66\u901a\u904e\uff08\u904e\u53bb\u767c\u751f\uff09\u5c0d\u73fe\u5728\u7522\u751f\u7684\u597d\u5f71\u97ff\uff0c\u7528 have passed\u3002\" },\n          { q: \"My grandfather ___ five kilometers every morning when he was young.\", options: [\"has run\", \"ran\", \"runs\", \"running\"], ans: 1, help: \"\u300cwhen he was young\uff08\u7576\u4ed6\u5e74\u8f15\u6642\uff09\u300d\u662f\u904e\u53bb\u6642\u9593\uff0c\u63cf\u8ff0\u904e\u53bb\u7684\u7fd2\u6163\uff0c\u4f7f\u7528\u904e\u53bb\u7c21\u55ae\u5f0f ran\u3002\" },\n          { q: \"___ they arrived at the cinema yet?\", options: [\"Did\", \"Do\", \"Have\", \"Were\"], ans: 2, help: \"\u53e5\u5c3e\u6709 &quot;yet&quot; \u4e14\u52d5\u8a5e\u70ba p.p. \u5f62\u5f0f\u7684 arrived\uff0c\u9019\u662f\u73fe\u5728\u5b8c\u6210\u5f0f\u554f\u53e5\uff0c\u642d\u914d Have \u958b\u982d\u3002\" },\n          { q: \"I ___ my science project last night.\", options: [\"have finished\", \"finished\", \"finish\", \"finishing\"], ans: 1, help: \"\u300clast night\u300d\u662f\u660e\u78ba\u904e\u53bb\u6642\u9593\uff0c\u7528\u904e\u53bb\u7c21\u55ae\u5f0f finished\u3002\" },\n          { q: \"She ___ to London in 2022 to study music.\", options: [\"has gone\", \"went\", \"has been\", \"go\"], ans: 1, help: \"\u300cin 2022\u300d\u662f\u904e\u53bb\u6642\u9593\u5e74\u4efd\uff0c\u4f7f\u7528\u904e\u53bb\u7c21\u55ae\u5f0f went\u3002\" },\n          { q: \"My English teacher ___ here for five years, and she still teaches us.\", options: [\"taught\", \"has taught\", \"teaches\", \"is teaching\"], ans: 1, help: \"\u300c\u5979\u73fe\u5728\u4f9d\u7136\u5728\u6559\u6211\u5011\u300d\uff0c\u8868\u793a\u52d5\u4f5c\u5f9e\u904e\u53bb\u4e00\u76f4\u6301\u7e8c\u5230\u73fe\u5728\uff0c\u7528\u73fe\u5728\u5b8c\u6210\u5f0f has taught\u3002\" },\n          { q: \"Did you ___ a good film last Sunday?\", options: [\"see\", \"saw\", \"seen\", \"seeing\"], ans: 0, help: \"Did \u958b\u982d\u7684\u904e\u53bb\u5f0f\u554f\u53e5\uff0c\u5f8c\u65b9\u52d5\u8a5e\u9084\u539f\u70ba\u539f\u5f62 see\u3002\" },\n          { q: \"I am full. I ___ three large slices of pizza already.\", options: [\"ate\", \"have eaten\", \"eat\", \"eating\"], ans: 1, help: \"\u300c\u6211\u73fe\u5728\u5f88\u98fd\uff08\u73fe\u5728\u72c0\u614b\uff09\u300d\uff0c\u662f\u56e0\u70ba\u6211\u5df2\u7d93\u5403\u4e86\u62ab\u85a9\uff08\u5c0d\u73fe\u5728\u7684\u5f71\u97ff\uff09\uff0c\u7528 have eaten\u3002\" },\n          { q: \"The ancient Egyptians ___ the great pyramids thousands of years ago.\", options: [\"have built\", \"built\", \"build\", \"building\"], ans: 1, help: \"\u53e4\u57c3\u53ca\u4eba\u9020\u91d1\u5b57\u5854\u5b8c\u5168\u5c6c\u65bc\u904e\u53bb\u6b77\u53f2\u4e8b\u4ef6\uff08\u6578\u5343\u5e74\u524d\uff09\uff0c\u4f7f\u7528\u904e\u53bb\u7c21\u55ae\u5f0f built\u3002\" }\n        ]\n      }\n    ];\n\n    \/\/ --- State Variables ---\n    let currentMode = 'practice'; \/\/ 'practice' or 'print'\n    let currentChapterIdx = 0;\n    let currentQIdx = 0;\n    let practiceSelectedOption = null;\n    let practiceIsAnswered = false;\n    let practiceScores = Array(db.length).fill(0); \/\/ tracks scores per chapter\n    let practiceHistory = db.map(chap => Array(chap.questions.length).fill(null)); \/\/ null, true, false\n\n    \/\/ Timer features\n    let timerEnabled = false;\n    let timerSec = 25;\n    let timerInterval = null;\n\n    \/\/ --- Initialization ---\n    window.onload = function() {\n      \/\/ Setup practice mode\n      renderPracticeSidebar();\n      loadPracticeQuestion();\n      \n      \/\/ Pre-render print view\n      renderPrintWorksheet();\n    }\n\n    \/\/ --- Switch UI Modes ---\n    function switchMode(mode) {\n      playSound('click');\n      currentMode = mode;\n      \n      const practiceBtn = document.getElementById('btn-practice-mode');\n      const printBtn = document.getElementById('btn-print-mode');\n      const practiceCont = document.getElementById('practice-container');\n      const printCont = document.getElementById('print-container');\n\n      if (mode === 'practice') {\n        practiceBtn.className = \"px-3 py-1.5 rounded-lg bg-indigo-600 text-white shadow-sm transition-all flex items-center gap-1\";\n        printBtn.className = \"px-3 py-1.5 rounded-lg text-slate-400 hover:text-slate-200 transition-all flex items-center gap-1\";\n        practiceCont.classList.remove('hidden');\n        printCont.classList.add('hidden');\n        \/\/ Restart timer if enabled\n        startTimer();\n      } else {\n        printBtn.className = \"px-3 py-1.5 rounded-lg bg-indigo-600 text-white shadow-sm transition-all flex items-center gap-1\";\n        practiceBtn.className = \"px-3 py-1.5 rounded-lg text-slate-400 hover:text-slate-200 transition-all flex items-center gap-1\";\n        printCont.classList.remove('hidden');\n        practiceCont.classList.add('hidden');\n        stopTimer();\n      }\n    }\n\n    \/\/ =========================================================\n    \/\/ ================= PRACTICE CONTROLLERS ==================\n    \/\/ =========================================================\n\n    function renderPracticeSidebar() {\n      const listContainer = document.getElementById('practice-chapter-list');\n      listContainer.innerHTML = '';\n\n      db.forEach((chap, idx) => {\n        const isActive = idx === currentChapterIdx;\n        const scoreVal = practiceScores[idx];\n        const isStarted = practiceHistory[idx].some(v => v !== null);\n\n        const btn = document.createElement('button');\n        btn.onclick = () => selectPracticeChapter(idx);\n        btn.className = `w-full text-left p-4 rounded-2xl border-2 transition-all duration-200 flex items-center gap-3 relative overflow-hidden ${\n          isActive \n            ? 'border-indigo-500 bg-indigo-950\/40 text-indigo-200 ring-2 ring-indigo-500\/15' \n            : 'border-slate-800 hover:border-slate-700 bg-slate-900\/60 hover:bg-slate-850\/50 text-slate-300'\n        }`;\n\n        btn.innerHTML = `\n          <div class=\"flex-shrink-0 w-8 h-8 rounded-lg bg-slate-800 text-slate-300 font-extrabold text-xs flex items-center justify-center ${isActive ? 'bg-indigo-600 text-white border border-indigo-500\/30' : ''}\">\n            ${chap.id}\n          <\/div>\n          <div class=\"flex-grow min-w-0\">\n            <h4 class=\"font-extrabold text-xs truncate leading-none mb-1 text-slate-100\">${chap.title}<\/h4>\n            <span class=\"text-[9px] font-bold text-slate-400\">\n              ${isStarted ? `\u6700\u9ad8\u7d00\u9304: ${scoreVal} \/ 20 \u984c` : '\u5c1a\u672a\u6311\u6230 \ud83d\uddfa\ufe0f'}\n            <\/span>\n          <\/div>\n          ${scoreVal === 20 ? '<span class=\"text-sm absolute right-3 top-3.5\">\ud83d\udc51<\/span>' : ''}\n        `;\n        listContainer.appendChild(btn);\n      });\n    }\n\n    function selectPracticeChapter(idx) {\n      playSound('click');\n      currentChapterIdx = idx;\n      currentQIdx = 0;\n      practiceSelectedOption = null;\n      practiceIsAnswered = false;\n      renderPracticeSidebar();\n      loadPracticeQuestion();\n    }\n\n    function toggleTimerOption() {\n      playSound('click');\n      timerEnabled = !timerEnabled;\n      const btn = document.getElementById('btn-timer-toggle');\n      if (timerEnabled) {\n        btn.innerText = \"\u23f1\ufe0f \u8a08\u6642\u6a21\u5f0f: \u958b\u555f (25s)\";\n        btn.className = \"bg-indigo-600 text-white border border-indigo-500 px-3 py-1.5 rounded-xl text-xs font-black transition-all flex items-center gap-1\";\n        document.getElementById('timer-box').classList.remove('hidden');\n        startTimer();\n      } else {\n        btn.innerText = \"\u23f1\ufe0f \u8a08\u6642\u6a21\u5f0f: \u95dc\u9589\";\n        btn.className = \"bg-slate-800 hover:bg-slate-700 border border-slate-700 text-amber-400 px-3 py-1.5 rounded-xl text-xs font-black transition-all flex items-center gap-1\";\n        document.getElementById('timer-box').classList.add('hidden');\n        stopTimer();\n      }\n    }\n\n    function startTimer() {\n      if (!timerEnabled || currentMode !== 'practice') return;\n      stopTimer();\n      timerSec = 25;\n      document.getElementById('timer-sec').innerText = timerSec;\n      \n      timerInterval = setInterval(() => {\n        timerSec--;\n        document.getElementById('timer-sec').innerText = timerSec;\n        if (timerSec <= 0) {\n          stopTimer();\n          handleTimeout();\n        }\n      }, 1000);\n    }\n\n    function stopTimer() {\n      if (timerInterval) {\n        clearInterval(timerInterval);\n        timerInterval = null;\n      }\n    }\n\n    function handleTimeout() {\n      practiceIsAnswered = true;\n      practiceSelectedOption = -1; \/\/ special value for timeout\n      practiceHistory[currentChapterIdx][currentQIdx] = false;\n      playSound('incorrect');\n\n      \/\/ Highlight options\n      const chap = db[currentChapterIdx];\n      const q = chap.questions[currentQIdx];\n      const optContainer = document.getElementById('quiz-options-container');\n      Array.from(optContainer.children).forEach((btn, bidx) => {\n        btn.disabled = true;\n        if (bidx === q.ans) {\n          btn.className = \"p-5 md:p-6 rounded-2xl border-2 border-emerald-500 bg-emerald-950\/40 text-emerald-300 text-left font-bold transition-all flex items-center justify-between gap-4\";\n          btn.children[0].className = \"w-9 h-9 rounded-xl bg-emerald-500 text-white font-black text-sm md:text-base flex items-center justify-center shrink-0\";\n          \n          const label = document.createElement('span');\n          label.className = \"text-emerald-500 font-black text-base shrink-0\";\n          label.innerText = \"\u2713 \u6b63\u78ba\u7b54\u6848\";\n          btn.appendChild(label);\n        } else {\n          btn.className = \"p-5 md:p-6 rounded-2xl border-2 border-slate-800\/40 bg-slate-950\/20 text-slate-600 opacity-50 text-left font-bold flex items-center gap-4\";\n          btn.children[0].className = \"w-9 h-9 rounded-xl bg-slate-800 text-slate-700 font-black text-sm md:text-base flex items-center justify-center shrink-0\";\n        }\n      });\n\n      \/\/ Show timeout tip\n      const explBox = document.getElementById('quiz-explanation-box');\n      explBox.innerHTML = `\n        <span class=\"text-3xl\">\u23f1\ufe0f<\/span>\n        <div>\n          <h5 class=\"text-xs md:text-sm font-black uppercase tracking-wider mb-1 text-rose-400\">\u6642\u9593\u5230\u56c9\uff01<\/h5>\n          <p class=\"text-sm md:text-base font-bold leading-relaxed text-slate-300\">${q.help}<\/p>\n        <\/div>\n      `;\n      explBox.className = \"mt-6 p-5 rounded-2xl flex gap-3 animate-fadeIn border bg-rose-950\/40 border-rose-500\/20 text-rose-300\";\n      explBox.classList.remove('hidden');\n\n      \/\/ Update submit\/next buttons\n      document.getElementById('btn-quiz-submit').classList.add('hidden');\n      document.getElementById('btn-quiz-next').classList.remove('hidden');\n      renderPracticeSidebar();\n    }\n\n    function loadPracticeQuestion() {\n      const chap = db[currentChapterIdx];\n      const q = chap.questions[currentQIdx];\n\n      \/\/ Update text\n      document.getElementById('quiz-chapter-num').innerText = `UNIT ${chap.id}`;\n      document.getElementById('quiz-chapter-title').innerText = chap.title;\n      document.getElementById('quiz-chapter-desc').innerText = chap.desc;\n      document.getElementById('quiz-score').innerText = `${practiceScores[currentChapterIdx]} \/ 20`;\n      document.getElementById('quiz-q-num').innerText = currentQIdx + 1;\n      document.getElementById('quiz-question-text').innerText = q.q.replace(\"___\", \" ______ \");\n\n      \/\/ Action buttons reset\n      document.getElementById('btn-quiz-submit').classList.remove('hidden');\n      document.getElementById('btn-quiz-submit').disabled = true;\n      document.getElementById('btn-quiz-submit').className = \"px-7 py-4 rounded-2xl font-black text-sm md:text-base transition-all flex items-center gap-1.5 bg-slate-800 text-slate-500 border border-slate-700 cursor-not-allowed\";\n      \n      document.getElementById('btn-quiz-next').classList.add('hidden');\n      document.getElementById('quiz-explanation-box').classList.add('hidden');\n\n      practiceSelectedOption = null;\n      practiceIsAnswered = false;\n\n      \/\/ Draw options (Bigger sizing & 4 Options)\n      const optContainer = document.getElementById('quiz-options-container');\n      optContainer.innerHTML = '';\n      q.options.forEach((opt, idx) => {\n        const btn = document.createElement('button');\n        btn.onclick = () => selectPracticeOption(idx);\n        btn.className = \"p-5 md:p-6 rounded-2xl border-2 border-slate-800 bg-slate-950\/40 text-left font-bold transition-all duration-200 flex items-center gap-4 hover:border-slate-700 hover:bg-slate-900\/60\";\n        btn.innerHTML = `\n          <span class=\"w-9 h-9 rounded-xl bg-slate-800 text-slate-400 font-black text-sm md:text-base flex items-center justify-center select-none shrink-0 border border-slate-750\">\n            ${String.fromCharCode(65 + idx)}\n          <\/span>\n          <span class=\"text-slate-200 text-lg md:text-xl font-bold\">${opt}<\/span>\n        `;\n        optContainer.appendChild(btn);\n      });\n\n      \/\/ Update step steps bar\n      const stepBar = document.getElementById('practice-progress-steps');\n      stepBar.innerHTML = '';\n      for (let i = 0; i < 20; i++) {\n        const step = document.createElement('div');\n        step.className = \"h-full flex-grow border-r border-slate-950 last:border-0 transition-all\";\n        const status = practiceHistory[currentChapterIdx][i];\n        if (i < currentQIdx) {\n          step.classList.add(status ? 'bg-emerald-500' : 'bg-rose-500');\n        } else if (i === currentQIdx) {\n          step.classList.add('bg-indigo-500', 'animate-pulse');\n        } else {\n          step.classList.add('bg-slate-850');\n        }\n        stepBar.appendChild(step);\n      }\n\n      \/\/ Start\/Restart Timer if enabled\n      startTimer();\n    }\n\n    function selectPracticeOption(idx) {\n      if (practiceIsAnswered) return;\n      practiceSelectedOption = idx;\n\n      \/\/ Update highlight style of options\n      const optContainer = document.getElementById('quiz-options-container');\n      Array.from(optContainer.children).forEach((btn, bidx) => {\n        if (bidx === idx) {\n          btn.className = \"p-5 md:p-6 rounded-2xl border-2 border-indigo-500 bg-indigo-950\/40 text-indigo-300 ring-2 ring-indigo-500\/25 text-left font-bold transition-all duration-200 flex items-center gap-4\";\n          btn.children[0].className = \"w-9 h-9 rounded-xl bg-indigo-500 text-white font-black text-sm md:text-base flex items-center justify-center shrink-0 border border-indigo-400\/30\";\n        } else {\n          btn.className = \"p-5 md:p-6 rounded-2xl border-2 border-slate-800 bg-slate-950\/40 text-left font-bold transition-all duration-200 flex items-center gap-4 hover:border-slate-700 hover:bg-slate-900\/60\";\n          btn.children[0].className = \"w-9 h-9 rounded-xl bg-slate-800 text-slate-400 font-black text-sm md:text-base flex items-center justify-center shrink-0 border border-slate-750\";\n        }\n      });\n\n      \/\/ Enable submit button\n      const submitBtn = document.getElementById('btn-quiz-submit');\n      submitBtn.disabled = false;\n      submitBtn.className = \"px-7 py-4 rounded-2xl font-black text-sm md:text-base text-white bg-indigo-600 shadow-md hover:brightness-110 active:scale-95 transition-all flex items-center gap-1.5 border border-indigo-500\/30\";\n    }\n\n    function submitPracticeAnswer() {\n      if (practiceSelectedOption === null || practiceIsAnswered) return;\n      practiceIsAnswered = true;\n      stopTimer();\n\n      const chap = db[currentChapterIdx];\n      const q = chap.questions[currentQIdx];\n      const isCorrect = practiceSelectedOption === q.ans;\n\n      \/\/ update history state\n      practiceHistory[currentChapterIdx][currentQIdx] = isCorrect;\n      if (isCorrect) {\n        practiceScores[currentChapterIdx]++;\n        playSound('correct');\n      } else {\n        playSound('incorrect');\n      }\n\n      \/\/ highlight options correctly (Larger indicators & 4 Options)\n      const optContainer = document.getElementById('quiz-options-container');\n      Array.from(optContainer.children).forEach((btn, bidx) => {\n        btn.disabled = true;\n        if (bidx === q.ans) {\n          \/\/ correct one\n          btn.className = \"p-5 md:p-6 rounded-2xl border-2 border-emerald-500 bg-emerald-950\/40 text-emerald-300 text-left font-bold transition-all flex items-center justify-between gap-4\";\n          btn.children[0].className = \"w-9 h-9 rounded-xl bg-emerald-500 text-white font-black text-sm md:text-base flex items-center justify-center shrink-0 border border-emerald-400\/30\";\n          \n          const label = document.createElement('span');\n          label.className = \"text-emerald-400 font-black text-base shrink-0\";\n          label.innerText = \"\u2713 \u6b63\u78ba\";\n          btn.appendChild(label);\n        } else if (bidx === practiceSelectedOption) {\n          \/\/ wrong chosen one\n          btn.className = \"p-5 md:p-6 rounded-2xl border-2 border-rose-500 bg-rose-950\/40 text-rose-300 text-left font-bold transition-all flex items-center justify-between gap-4\";\n          btn.children[0].className = \"w-9 h-9 rounded-xl bg-rose-500 text-white font-black text-sm md:text-base flex items-center justify-center shrink-0 border border-rose-400\/30\";\n          \n          const label = document.createElement('span');\n          label.className = \"text-rose-500 font-black text-base shrink-0\";\n          label.innerText = \"\u2717 \u7b54\u932f\";\n          btn.appendChild(label);\n        } else {\n          btn.className = \"p-5 md:p-6 rounded-2xl border-2 border-slate-800\/40 bg-slate-950\/20 text-slate-600 opacity-50 text-left font-bold flex items-center gap-4\";\n          btn.children[0].className = \"w-9 h-9 rounded-xl bg-slate-800 text-slate-700 font-black text-sm md:text-base flex items-center justify-center shrink-0 border border-slate-750\";\n        }\n      });\n\n      \/\/ Show explanation hint panel (Larger font size)\n      const explBox = document.getElementById('quiz-explanation-box');\n      explBox.innerHTML = '';\n      explBox.className = `mt-6 p-5 rounded-2xl flex gap-3 animate-fadeIn border ${\n        isCorrect ? 'bg-emerald-950\/30 border-emerald-500\/20 text-emerald-300' : 'bg-amber-950\/30 border-amber-500\/20 text-amber-300'\n      }`;\n      explBox.innerHTML = `\n        <span class=\"text-3xl\">${isCorrect ? '\ud83c\udf89' : '\ud83d\udca1'}<\/span>\n        <div>\n          <h5 class=\"text-xs md:text-sm font-black uppercase tracking-wider mb-1\">${isCorrect ? '\u592a\u68d2\u4e86\uff01\u5b8c\u5168\u6b63\u78ba\uff01' : '\u89e3\u984c\u95dc\u9375\u8207\u6587\u6cd5\u89e3\u6790\uff1a'}<\/h5>\n          <p class=\"text-sm md:text-base font-bold leading-relaxed\">${q.help}<\/p>\n        <\/div>\n      `;\n      explBox.classList.remove('hidden');\n\n      \/\/ Swap Action Button\n      document.getElementById('btn-quiz-submit').classList.add('hidden');\n      document.getElementById('btn-quiz-next').classList.remove('hidden');\n\n      \/\/ Update scores in sidebar\n      renderPracticeSidebar();\n      document.getElementById('quiz-score').innerText = `${practiceScores[currentChapterIdx]} \/ 20`;\n    }\n\n    function nextPracticeQuestion() {\n      if (currentQIdx < 19) {\n        currentQIdx++;\n        loadPracticeQuestion();\n      } else {\n        \/\/ Finished the 20 questions!\n        playSound('correct');\n        showChapterFinishedModal();\n      }\n    }\n\n    function showChapterFinishedModal() {\n      const finalScore = practiceScores[currentChapterIdx];\n      \/\/ Quick overlay-based congratulation popup using pure vanilla JS\n      const modal = document.createElement('div');\n      modal.className = \"fixed inset-0 z-[100] flex items-center justify-center bg-slate-950\/70 p-4 no-print backdrop-blur-sm\";\n      modal.innerHTML = `\n        <div class=\"bg-slate-900 border border-slate-800 text-slate-100 rounded-3xl p-6 md:p-8 max-w-sm w-full text-center shadow-2xl animate-fadeIn\">\n          <span class=\"text-5xl block mb-3\">\ud83c\udfc6<\/span>\n          <h3 class=\"text-xl font-black text-slate-100\">\u7279\u8a13\u5cf6\u95dc\u5361\u9806\u5229\u904e\u95dc\uff01<\/h3>\n          <p class=\"text-xs text-slate-400 font-bold mt-1 uppercase tracking-widest\">${db[currentChapterIdx].title}<\/p>\n          \n          <div class=\"my-6 py-4 bg-slate-950 rounded-2xl border border-slate-800 shadow-inner\">\n            <span class=\"text-4xl font-black text-indigo-400\">${finalScore}<\/span>\n            <span class=\"text-xs font-bold text-slate-400 block mt-1\">\/ 20 \u984c\u7b54\u5c0d\u7387 ${finalScore * 5}%<\/span>\n          <\/div>\n\n          <p class=\"text-xs md:text-sm font-extrabold text-slate-300 leading-relaxed mb-6\">\n            ${finalScore === 20 ? '\ud83d\udc51 \u592a\u9a5a\u4eba\u4e86\uff01\u5168\u5c0d\u6eff\u5206\uff01\u4f60\u5c0d P5 \u6838\u5fc3\u9ad8\u968e\u6642\u614b\u5df2\u7d93\u77ad\u5982\u6307\u638c\uff01' :\n              finalScore >= 16 ? '\ud83c\udf1f \u975e\u5e38\u512a\u79c0\uff01\u9019\u4ee3\u8868\u4f60\u7684\u82f1\u8a9e\u601d\u7dad\u975e\u5e38\u56b4\u8b39\uff01' :\n              finalScore >= 12 ? '\ud83d\udc4d \u8868\u73fe\u5f97\u5f88\u597d\uff01\u591a\u52a0\u8907\u7fd2\u5c31\u80fd\u9806\u5229\u62ff\u5230\u5b8c\u7f8e\u7684 20 \u5206\u5594\uff01' :\n              '\ud83d\udcd6 \u8de8\u51fa\u4e86\u624e\u5be6\u7684\u4e00\u6b65\uff01\u770b\u6e05\u8003\u9ede\u8207\u6642\u9593\u526f\u8a5e\uff0c\u518d\u6230\u4e00\u6b21\u5427\uff01'}\n          <\/p>\n\n          <button id=\"btn-modal-close\" class=\"w-full py-3 rounded-2xl bg-indigo-600 hover:bg-indigo-700 font-black text-xs uppercase tracking-wider text-white shadow-md transition-all border border-indigo-500\/30\">\n            \u78ba\u8a8d\u4e26\u95dc\u9589\n          <\/button>\n        <\/div>\n      `;\n      document.body.appendChild(modal);\n\n      document.getElementById('btn-modal-close').onclick = () => {\n        playSound('click');\n        modal.remove();\n        currentQIdx = 0;\n        loadPracticeQuestion();\n      };\n    }\n\n    \/\/ =========================================================\n    \/\/ ================== PRINTABLE WORKSHEET ==================\n    \/\/ =========================================================\n\n    function renderPrintWorksheet() {\n      const printContainer = document.getElementById('print-chapters-content');\n      printContainer.innerHTML = '';\n\n      db.forEach((chap) => {\n        const chapDiv = document.createElement('div');\n        \/\/ add print classes for cleaner margins\n        chapDiv.className = \"print-page-break space-y-6 pb-6 border-b border-slate-200 last:border-0\";\n        \n        let questionsHTML = '';\n        chap.questions.forEach((q, qidx) => {\n          \n          \/\/ Build Options with optional correct underlined answer (Bigger typography, 4 options)\n          let optionsHTML = '';\n          q.options.forEach((opt, oidx) => {\n            const isAnswer = oidx === q.ans;\n            optionsHTML += `\n              <div class=\"option\" style=\"display:inline-block; width:23%; font-size:12pt; color: #1e293b; margin-bottom: 6px;\">\n                <span style=\"font-weight:bold; font-family:'Fredoka';\">[ &nbsp; ] (${String.fromCharCode(65 + oidx)})<\/span> \n                <span class=\"${isAnswer ? 'print-answer underline font-bold decoration-2 decoration-indigo-600' : ''}\">${opt}<\/span>\n              <\/div>\n            `;\n          });\n\n          questionsHTML += `\n            <div style=\"margin-bottom: 16pt; page-break-inside: avoid;\">\n              <p style=\"font-size: 13pt; font-weight: bold; margin-bottom: 6px; line-height: 1.4; color: #0f172a;\">\n                ${qidx + 1}. ${q.q.replace(\"___\", \"________\")}\n              <\/p>\n              <div style=\"padding-left: 15px; margin-top: 4px;\">\n                ${optionsHTML}\n              <\/div>\n              <p class=\"print-hint\" style=\"font-size: 10pt; color: #7c2d12; font-weight: bold; margin-top: 5px; padding-left: 15px;\">\n                \ud83d\udca1 \u8003\u9ede\u89e3\u6790\uff1a${q.help}\n              <\/p>\n            <\/div>\n          `;\n        });\n\n        chapDiv.innerHTML = `\n          <div style=\"border-left: 4px solid #6366f1; padding-left: 12px; margin-bottom: 14pt; page-break-inside: avoid;\">\n            <h2 style=\"font-size: 15pt; font-weight: 900; color: #1e3a8a; margin: 0;\">${chap.title}<\/h2>\n            <p style=\"font-size: 10.5pt; color: #475569; font-weight: bold; margin: 4px 0 0 0; line-height: 1.3;\">\u7279\u8a13\u7126\u9ede: ${chap.desc}<\/p>\n          <\/div>\n          \n          <div style=\"padding-left: 5px;\">\n            ${questionsHTML}\n          <\/div>\n        `;\n        \n        printContainer.appendChild(chapDiv);\n      });\n\n      \/\/ Synchronize visibility details on initial draw\n      togglePrintDetails();\n    }\n\n    function togglePrintDetails() {\n      const showAnswers = document.getElementById('chk-show-answers').checked;\n      const showHints = document.getElementById('chk-show-hints').checked;\n\n      \/\/ Handle answer underlines\n      const answers = document.querySelectorAll('.print-answer');\n      answers.forEach(el => {\n        if (showAnswers) {\n          el.classList.add('underline', 'font-bold', 'decoration-2', 'decoration-indigo-600', 'text-indigo-800');\n        } else {\n          el.classList.remove('underline', 'font-bold', 'decoration-2', 'decoration-indigo-600', 'text-indigo-800');\n        }\n      });\n\n      \/\/ Handle hints line\n      const hints = document.querySelectorAll('.print-hint');\n      hints.forEach(el => {\n        if (showHints) {\n          el.style.display = 'block';\n        } else {\n          el.style.display = 'none';\n        }\n      });\n    }\n\n  <\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Senior Grammar Explorer: Chapters 11-20 Quiz &#038; Worksheet (Bigger Font) \ud83c\udf92 Senior Grammar Explorer (Chapters 11-20) \u5c0f\u4e94\u82f1\u6587\u6587\u6cd5\u7279\u8a13\u4e92\u52d5\u7df4\u7fd2\u8207\u5217\u5370\u7cfb\u7d71 (\u5b57\u578b\u653e\u5927\u7248) \u23f1\ufe0f \u8a08\u6642\u6a21\u5f0f: \u95dc\u9589 \ud83c\udfaf \u4e92\u52d5\u7df4\u7fd2 \ud83d\udda8\ufe0f \u5217\u5370\u8003\u5377 \ud83d\udd0a \ud83d\uddfa\ufe0f \u9078\u64c7\u7279\u8a13\u6587\u6cd5\u5cf6\u5dbc UNIT 11 Loading Chapter&#8230; Loading description&#8230; 0 \/ 20 Score \ud83e\udd89 \u8a9e\u5883\u601d\u7dad\u63d0\u793a\uff1a \u5c0f\u4e94\u7684\u8003\u984c\u9700\u8981\u9ad8\u5ea6\u95dc\u6ce8\u53e5\u5b50\u4e2d\u7684\u300c\u6642\u9593\u526f\u8a5e\u300d\u8207\u524d\u5f8c\u6587\u7684\u300c\u52d5\u8a5e\u6642\u614b\u300d\u5594\uff01 \u23f1\ufe0f 25s P5 GRAMMAR QUESTION 11 of 20 Loading question sentence&#8230; \u63d0\u4ea4\u7b54\u6848 \ud83d\udca1 \u4e0b\u4e00\u984c &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/wmea.charity\/index.php\/elementary-grammar-in-use-ch-11-20\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Elementary Grammar In Use Ch 11-20&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"postBodyCss":"","postBodyMargin":[],"postBodyPadding":[],"postBodyBackground":{"backgroundType":"classic","gradient":""},"footnotes":""},"class_list":["post-2024","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/wmea.charity\/index.php\/wp-json\/wp\/v2\/pages\/2024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wmea.charity\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wmea.charity\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wmea.charity\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wmea.charity\/index.php\/wp-json\/wp\/v2\/comments?post=2024"}],"version-history":[{"count":4,"href":"https:\/\/wmea.charity\/index.php\/wp-json\/wp\/v2\/pages\/2024\/revisions"}],"predecessor-version":[{"id":2028,"href":"https:\/\/wmea.charity\/index.php\/wp-json\/wp\/v2\/pages\/2024\/revisions\/2028"}],"wp:attachment":[{"href":"https:\/\/wmea.charity\/index.php\/wp-json\/wp\/v2\/media?parent=2024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}