Skip to content

Instantly share code, notes, and snippets.

@g-79211081-ops
Created September 2, 2025 06:30
Show Gist options
  • Save g-79211081-ops/b214de347d2a694eaea4d1233afff18f to your computer and use it in GitHub Desktop.
Save g-79211081-ops/b214de347d2a694eaea4d1233afff18f to your computer and use it in GitHub Desktop.
from docx import Document
# Buat dokumen Word baru
doc = Document()
# =======================
# Muka Depan
# =======================
doc.add_heading('SEKOLAH MENENGAH KEBANGSAAN ____________', 0)
doc.add_paragraph('PEPERIKSAAN AKHIR TAHUN 2025\n')
doc.add_heading('ASAS SAINS KOMPUTER', level=1)
doc.add_paragraph('TINGKATAN 2\nMasa: 1 jam 30 minit\nMarkah: 70\n')
doc.add_heading('Arahan Kepada Calon', level=2)
doc.add_paragraph(
"1. Tuliskan nama dan kelas pada ruangan yang disediakan.\n"
"2. Kertas ini mengandungi 3 Bahagian: A, B dan C.\n"
"3. Jawab SEMUA soalan.\n"
"4. Tulis jawapan anda pada kertas jawapan yang disediakan.\n"
"5. Serahkan kertas soalan ini bersama kertas jawapan anda selepas tamat peperiksaan."
)
doc.add_paragraph("\nNama: ________________________\nKelas: ________________________")
doc.add_page_break()
# =======================
# Bahagian A
# =======================
doc.add_heading('BAHAGIAN A (10 markah)', level=1)
doc.add_paragraph("Jawab semua soalan. Pilih jawapan yang paling tepat.\n")
soalan_A = [
("Apakah maksud perkakasan komputer?",
["Arahan yang dijalankan komputer", "Komponen fizikal komputer",
"Data yang diproses komputer", "Bahasa pengaturcaraan"]),
("Contoh perisian aplikasi ialah:",
["Windows", "Microsoft Word", "BIOS", "CPU"]),
("Simbol rombik dalam carta alir mewakili:",
["Proses", "Input/Output", "Keputusan", "Terminal"]),
("Tujuan carta alir digunakan ialah untuk:",
["Menulis kod terus", "Menganalisis masalah", "Melakar penyelesaian grafik", "Menyimpan data"]),
("Antara berikut, yang manakah pemboleh ubah sah?",
["2nama", "Nama_Pelajar", "nama-pelajar", "nama pelajar"]),
("Nyatakan jenis data bagi '85.6'.",
["String", "Integer", "Real", "Boolean"]),
("Apakah istilah bagi proses mengumpul dan menyusun data?",
["Analisis data", "Pemprosesan data", "Penyimpanan data", "Pengurusan data"]),
("Data yang belum diproses dikenali sebagai:",
["Maklumat", "Arahan", "Input", "Output"]),
("Contoh amalan keselamatan ICT ialah:",
["Berkongsi kata laluan", "Menggunakan antivirus", "Membuka lampiran e-mel tanpa periksa", "Mengakses laman palsu"]),
("Apakah fungsi pemboleh ubah dalam pengaturcaraan?",
["Menghasilkan output grafik", "Menyimpan data sementara", "Mengesan ralat sintaks", "Menentukan jenis perisian"]),
]
for i, (q, pilihan) in enumerate(soalan_A, start=1):
doc.add_paragraph(f"{i}. {q}")
for j, pilihan_jawapan in zip("ABCD", pilihan):
doc.add_paragraph(f" {j}. {pilihan_jawapan}", style="List Bullet")
doc.add_paragraph("[1 markah]")
doc.add_page_break()
# =======================
# Bahagian B
# =======================
doc.add_heading('BAHAGIAN B (40 markah)', level=1)
doc.add_paragraph("Jawab semua soalan.\n")
# Q11: Padanan
doc.add_paragraph("11. Padankan simbol carta alir dengan fungsi yang betul. [3 markah]")
table = doc.add_table(rows=5, cols=2)
table.style = "Table Grid"
hdr_cells = table.rows[0].cells
hdr_cells[0].text = "Simbol"
hdr_cells[1].text = "Fungsi"
rows = [
("Terminal", ""),
("Proses", ""),
("Input/Output", ""),
("Keputusan", "")
]
for i, (simbol, fungsi) in enumerate(rows, start=1):
row_cells = table.rows[i].cells
row_cells[0].text = simbol
row_cells[1].text = fungsi
doc.add_paragraph("\n")
# Q12
doc.add_paragraph("12. Isikan tempat kosong: __________ digunakan untuk menyimpan lebih daripada satu nilai dengan jenis data yang sama. [3 markah]")
# Q13
doc.add_paragraph("13. Susun atur arahan berikut mengikut urutan yang betul: [3 markah]\n"
"i. Papar jumlah\n ii. Jumlah = X + Y\n iii. Input X, Y\n iv. Mula\n v. Tamat")
# Q14: Benar/Salah
doc.add_paragraph("14. Tandakan (✔) untuk pernyataan Benar atau Salah: [3 markah]")
table = doc.add_table(rows=4, cols=2)
table.style = "Table Grid"
table.rows[0].cells[0].text = "Pernyataan"
table.rows[0].cells[1].text = "Jawapan (Benar/Salah)"
statements = [
"Boolean hanya mempunyai dua nilai: True dan False.",
"Integer digunakan untuk nilai perpuluhan.",
"String menyimpan nombor sahaja."
]
for i, st in enumerate(statements, start=1):
table.rows[i].cells[0].text = st
table.rows[i].cells[1].text = ""
doc.add_paragraph("\n")
# Q15
doc.add_paragraph("15. Lengkapkan kod berikut: [3 markah]\nfor i in range(1, ___):\n print('ASK Tingkatan 2')")
# Q16: Jadual data suhu
doc.add_paragraph("16. Lengkapkan jadual dengan menukar data mentah kepada maklumat: [3 markah]")
table = doc.add_table(rows=2, cols=5)
table.style = "Table Grid"
table.rows[0].cells[0].text = "Data Suhu (°C)"
table.rows[1].cells[0].text = "Maklumat"
suhu = ["34", "36", "38", "40"]
for j, s in enumerate(suhu, start=1):
table.rows[0].cells[j].text = s
table.rows[1].cells[j].text = ""
doc.add_paragraph("\n")
# Q17
doc.add_paragraph("17. Pilih struktur kawalan yang sesuai: Jika nombor genap papar 'Even', jika nombor ganjil papar 'Odd'. [3 markah]")
# Q18
doc.add_paragraph("18. Padankan kod dengan output: [3 markah]\na. print(5+3)\nb. print('5+3')\nc. print(10//3)\nOutput: i. 5+3, ii. 8, iii. 3")
# Q19
doc.add_paragraph("19. Susun pseudokod berikut supaya betul: [3 markah]\nMula\nJika markah >= 50\nPapar 'Lulus'\nJika tidak\nPapar 'Gagal'\nTamat")
# Q20
doc.add_paragraph("20. Betulkan kod berikut: [3 markah]\nif nombor = 10:\n print('Betul')\nelse\n print('Salah')")
doc.add_page_break()
# =======================
# Bahagian C
# =======================
doc.add_heading('BAHAGIAN C (20 markah)', level=1)
doc.add_paragraph("Jawab semua soalan.\n")
doc.add_paragraph("21. Tulis satu atur cara Python untuk membaca 3 nombor dan memaparkan jumlah serta purata. [10 markah]")
doc.add_paragraph("\n")
doc.add_paragraph("22. Analisis pseudokod berikut dan nyatakan output jika input N = 5: [10 markah]\n"
"Mula\nSum = 0\nUntuk i = 1 hingga N\n Sum = Sum + i\nPapar Sum\nTamat")
doc.add_page_break()
# =======================
# Skema Jawapan
# =======================
doc.add_heading('SKEMA JAWAPAN', level=1)
skema = {
"Bahagian A": ["1. B", "2. B", "3. C", "4. C", "5. B",
"6. C", "7. B", "8. C", "9. B", "10. B"],
"Bahagian B": [
"11. Terminal – Mula/Tamat, Proses – Arahan, Input/Output – Data, Keputusan – Soalan Bersyarat",
"12. Array / Senarai",
"13. iv, iii, ii, i, v",
"14. a ✔, b ✘, c ✘",
"15. 6",
"16. 34=Normal, 36=Normal, 38=Demam, 40=Demam Tinggi",
"17. B",
"18. a–ii, b–i, c–iii",
"19. Mula → Jika markah ≥ 50 → Papar 'Lulus' → Jika tidak → Papar 'Gagal' → Tamat",
"20. if nombor == 10: … else:"
],
"Bahagian C": [
"21. Kod Python untuk baca 3 nombor, papar jumlah & purata",
"22. Output = 15"
]
}
for bahagian, jawapan in skema.items():
doc.add_heading(bahagian, level=2)
for j in jawapan:
doc.add_paragraph(j)
# Simpan fail
doc.save("Kertas_Peperiksaan_ASK_T2.docx")
print("Fail Word berjaya dijana: Kertas_Peperiksaan_ASK_T2.docx")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment