SALAM GURU HEBAT
# Retry with safer string concatenation to avoid % operator issues.
import json, zipfile, textwrap
from pathlib import Path
OUT_DIR = Path("/mnt/data/quiz_export")
OUT_DIR.mkdir(exist_ok=True)
# QUESTIONS already defined earlier in this session; recreate for safety:
QUESTIONS = [
{"id":1,"q":"Fungsi utama mata adalah untuk….","opts":["Mendengar","Melihat","Membau","Meraba"],"a":1},
{"id":2,"q":"Bagian mata yang berfungsi mengatur banyaknya cahaya yang masuk adalah….","opts":["Retina","Kornea","Iris","Lensa"],"a":2},
{"id":3,"q":"Gendang telinga berfungsi untuk….","opts":["Mengolah cahaya","Menangkap getaran suara","Menyeimbangkan tubuh","Menghasilkan suara"],"a":1},
{"id":4,"q":"Hidung berfungsi sebagai alat….","opts":["Penciuman","Penglihatan","Pendengaran","Peraba"],"a":0},
{"id":5,"q":"Rabun jauh termasuk kelainan pada….","opts":["Telinga","Mata","Hidung","Kulit"],"a":1},
{"id":6,"q":"Penyakit pada telinga yang disebabkan infeksi disebut….","opts":["Sinusitis","Otitis media","Konjungtivitis","Miopia"],"a":1},
{"id":7,"q":"Cara menjaga kesehatan mata adalah….","opts":["Membaca dalam gelap","Menonton terlalu dekat","Menggunakan cahaya cukup saat membaca","Mengucek mata dengan tangan kotor"],"a":2},
{"id":8,"q":"Cara merawat kesehatan hidung adalah….","opts":["Menghirup udara berdebu","Menggunakan masker di lingkungan kotor","Menyentuh hidung terus menerus","Mengorek hidung dengan benda tajam"],"a":1},
{"id":9,"q":"Poster tentang cara kerja telinga sebaiknya berisi….","opts":["Warna acak","Gambar tanpa tulisan","Penjelasan alur masuknya suara","Cerita fiksi"],"a":2},
{"id":10,"q":"Model sederhana pancaindra bisa dibuat dari….","opts":["Tanah liat","Bahan bekas","Kayu besar","Batu"],"a":1},
{"id":11,"q":"Tahapan hidup kupu-kupu yang benar adalah….","opts":["Telur–pupa–ulat–imago","Telur–larva–pupa–imago","Pupa–telur–larva–imago","Imago–telur–larva–pupa"],"a":1},
{"id":12,"q":"Hewan yang mengalami metamorfosis sempurna adalah….","opts":["Ayam","Kucing","Nyamuk","Sapi"],"a":2},
{"id":13,"q":"Siklus hidup manusia berubah paling cepat pada tahap….","opts":["Bayi","Dewasa","Lanjut usia","Remaja"],"a":0},
{"id":14,"q":"Hubungan siklus hidup dengan ekosistem adalah….","opts":["Tidak saling memengaruhi","Siklus hidup menjaga keseimbangan populasi","Ekosistem hanya dipengaruhi cuaca","Siklus hidup menyebabkan kerusakan alam"],"a":1},
{"id":15,"q":"Hewan yang harus dilindungi di Indonesia adalah….","opts":["Ayam kampung","Gajah Sumatra","Kambing","Ikan lele"],"a":1},
{"id":16,"q":"Upaya pelestarian makhluk hidup berikut yang benar adalah….","opts":["Menebang pohon sembarangan","Mengurung hewan liar","Menanam kembali pohon yang ditebang","Membuang sampah sembarangan"],"a":2},
{"id":17,"q":"Metamorfosis tidak sempurna terjadi pada….","opts":["Kupu-kupu","Katak","Belalang","Nyamuk"],"a":2},
{"id":18,"q":"Contoh kampanye pelestarian adalah….","opts":["Poster ajakan menjaga lingkungan","Coretan tembok","Membakar sampah plastik","Membuang sampah ke sungai"],"a":0},
{"id":19,"q":"Alat bantu siklus hidup dapat dibuat dari….","opts":["Plastik bekas","Benda tajam","Pasir","Batu besar"],"a":0},
{"id":20,"q":"Yang termasuk faktor yang mengganggu kelangsungan siklus hidup makhluk hidup adalah….","opts":["Reboisasi","Perburuan liar","Penghijauan","Konservasi"],"a":1},
{"id":21,"q":"Komponen pada peta mencakup….","opts":["Lirik lagu","Judul, skala, legenda","Foto hewan","Cerita rakyat"],"a":1},
{"id":22,"q":"Letak Provinsi Riau berada di Pulau….","opts":["Jawa","Kalimantan","Sumatra","Sulawesi"],"a":2},
{"id":23,"q":"Batas timur Provinsi Riau adalah….","opts":["Sumatra Barat","Laut Natuna","Jambi","Sumatra Utara"],"a":2},
{"id":24,"q":"Koordinat digunakan pada peta untuk….","opts":["Membuat gambar kartun","Menentukan lokasi","Menghias peta","Mempercepat menggambar"],"a":1},
{"id":25,"q":"Menjiplak peta bertujuan agar….","opts":["Peta menjadi rusak","Dapat meniru bentuk wilayah secara tepat","Menjadi lebih kecil","Tidak perlu membuat skala"],"a":1},
{"id":26,"q":"Karya peta yang baik harus memiliki….","opts":["Coretan acak","Legenda dan arah mata angin","Warna yang tidak jelas","Ukuran tidak sesuai skala"],"a":1},
{"id":27,"q":"Provinsi yang berbatasan dengan Riau di sebelah selatan adalah….","opts":["Sumatra Barat","Kepulauan Riau","Jambi","Sumatra Utara"],"a":2},
{"id":28,"q":"Peta digital dapat diakses melalui….","opts":["Buku cerita","Aplikasi ponsel","Bola dunia","Kalender"],"a":1},
{"id":29,"q":"Legenda pada peta berfungsi untuk….","opts":["Menjelaskan arti simbol","Memperindah peta","Menunjukkan judul","Menentukan arah angin"],"a":0},
{"id":30,"q":"Arah mata angin pada peta menunjukkan….","opts":["Waktu","Penunjuk arah utara, selatan, dll.","Tinggi gunung","Nama provinsi"],"a":1},
{"id":31,"q":"Yang termasuk bentang alam adalah….","opts":["Gunung","Perpustakaan","Sekolah","Pasar"],"a":0},
{"id":32,"q":"Riau memiliki banyak sumber daya alam berupa….","opts":["Minyak bumi dan gas","Salju","Gunung es","Belerang"],"a":0},
{"id":33,"q":"Masyarakat di daerah pesisir umumnya bekerja sebagai….","opts":["Nelayan","Peternak sapi","Penambang batu","Petani teh"],"a":0},
{"id":34,"q":"Kondisi geografis rawa memengaruhi budaya seperti….","opts":["Tarian yang dilakukan di salju","Rumah panggung","Upacara di gurun","Baju berbahan bulu tebal"],"a":1},
{"id":35,"q":"Bentang alam pegunungan cocok untuk pekerjaan….","opts":["Nelayan","Petani sayur","Penangkap ikan hiu","Pembuat kapal"],"a":1},
{"id":36,"q":"Upaya melestarikan bentang alam adalah….","opts":["Membuang sampah di sungai","Merusak hutan","Menjaga kebersihan lingkungan","Membangun gedung di kawasan lindung"],"a":2},
{"id":37,"q":"Budaya lokal yang dipengaruhi sungai misalnya….","opts":["Perahu tradisional","Rumah es","Tari salju","Pesta gurun"],"a":0},
{"id":38,"q":"Masyarakat dataran rendah biasanya bekerja sebagai….","opts":["Petani padi","Pendaki gunung profesional","Pemburu rusa","Penambang salju"],"a":0},
{"id":39,"q":"Penyebab kerusakan bentang alam adalah….","opts":["Penanaman pohon","Reboisasi","Pembakaran hutan","Konservasi"],"a":2},
{"id":40,"q":"Salah satu kekayaan hayati di Riau adalah….","opts":["Badak Jawa","Harimau Sumatra","Panda","Penguin"],"a":1},
{"id":41,"q":"Alat peraga pancaindra akan lebih menarik jika….","opts":["Tidak diberi warna","Diberi label yang jelas","Tanpa penjelasan","Sangat kecil"],"a":1},
{"id":42,"q":"Siklus hidup tumbuhan dimulai dari….","opts":["Biji","Buah","Batang","Daun"],"a":0},
{"id":43,"q":"Ekosistem dapat terganggu jika….","opts":["Lingkungan bersih","Hewan berkembang biak dengan baik","Terjadi perburuan liar","Hutan dilestarikan"],"a":2},
{"id":44,"q":"Peta Riau akan lebih akurat jika….","opts":["Dibuat tanpa skala","Menggunakan garis koordinat","Tidak diberi warna","Tanpa legenda"],"a":1},
{"id":45,"q":"Contoh profesi yang dipengaruhi dataran tinggi adalah….","opts":["Penambang gas","Petani sayuran","Nelayan","Penjual ikan"],"a":1},
{"id":46,"q":"Cara merawat telinga adalah….","opts":["Membersihkan dengan cotton bud terlalu dalam","Menghindari suara terlalu keras","Menyentuh telinga terus menerus","Mengorek telinga dengan benda tajam"],"a":1},
{"id":47,"q":"Siklus hidup katak diawali dengan….","opts":["Katak dewasa","Kecebong","Telur","Pupa"],"a":2},
{"id":48,"q":"Hewan yang tidak mengalami metamorfosis adalah….","opts":["Kuda","Kupu-kupu","Katak","Nyamuk"],"a":0},
{"id":49,"q":"Poster pelestarian alam sebaiknya berisi….","opts":["Gambar hewan fantasi","Ajakan menjaga alam","Cerita tidak terkait lingkungan","Harga barang"],"a":1},
{"id":50,"q":"Upaya menjaga budaya yang berkaitan dengan bentang alam adalah….","opts":["Melestarikan rumah adat","Merusak situs budaya","Mengubah adat seenaknya","Menghapus tradisi lokal"],"a":0}
]
# create files
gs_template = "function createQuizForm() {\n var data = %s;\n var form = FormApp.create('Quiz Pancaindra, Siklus Hidup & Riau');\n form.setIsQuiz(true);\n for (var i=0;i
Quiz Offline
"""
offline_html = offline_html_prefix + json.dumps(QUESTIONS, ensure_ascii=False) + offline_html_suffix
readme = textwrap.dedent(f"""
# Paket Ekspor — Quiz Pancaindra, Siklus Hidup & Riau
Di dalam paket ini:
- `create_form.gs` — Google Apps Script (skeleton) untuk membuat Google Form quiz secara otomatis.
- `offline_quiz.html` — Versi offline (single-file) dari kuis; buka langsung di browser (double-click) dan dapat digunakan tanpa koneksi.
- `README.md` — instruksi singkat.
## 1) Mengimpor ke Google Forms (menggunakan Apps Script)
1. Buka Google Drive -> New -> More -> Google Apps Script.
2. Ganti isi file `Code.gs` dengan isi file `create_form.gs` dari paket.
3. Simpan, lalu jalankan fungsi `createQuizForm` (untuk pertama kali, Anda perlu memberikan izin).
4. Apps Script akan membuat Form dan menampilkan URL editor di `Logger.log`.
Catatan: API Forms dan Apps Script memiliki batasan; jika script tidak secara otomatis mengatur kunci jawaban/point, buka Form Editor dan atur "Quiz" serta kunci jawaban manual.
## 2) Versi offline HTML
- File `offline_quiz.html` adalah aplikasi lengkap yang berjalan di browser.
- Fitur: simpan jawaban di LocalStorage, tinjau jawaban, unduh hasil JSON.
- Cara pakai: buka file di browser (Chrome/Firefox). Untuk instalasi di Android: buka halaman -> pilih "Add to Home screen".
## 3) Mengepak menjadi APK (ringkasan)
- Gunakan Capacitor (recommended) atau PWABuilder:
- Salin `offline_quiz.html` ke folder `www/index.html` di proyek Capacitor.
- Ikuti langkah Capacitor: `npx cap init`, `npx cap add android`, `npx cap open android`, lalu build APK lewat Android Studio.
- PWABuilder menyediakan pilihan build otomatis (APK) dari manifest PWA atau URL.
""")
# write files
Path("/mnt/data/quiz_export/create_form.gs").write_text(gs_template, encoding="utf-8")
Path("/mnt/data/quiz_export/offline_quiz.html").write_text(offline_html, encoding="utf-8")
Path("/mnt/data/quiz_export/README.md").write_text(readme, encoding="utf-8")
# Zip files
zip_path = Path("/mnt/data/quiz_package.zip")
with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zf:
for fname in ["create_form.gs","offline_quiz.html","README.md"]:
zf.write(Path("/mnt/data/quiz_export")/fname, arcname=fname)
str(zip_path)
Langganan:
Posting Komentar
(
Atom
)
Tidak ada komentar
"Saya sangat senang dengan layanan yang diberikan. Semoga ke depannya semakin baik."