Skip to main content

Latihan: Tebak Angka

Pada materi ini kita akan menggabungkan beberapa konsep Python yang telah dipelajari sebelumnya untuk membuat sebuah game tebak angka interaktif.

Project sederhana ini akan menggunakan module random, sys, input(), perulangan, conditional statement, serta error handling.

Tujuan Pembelajaran​

Setelah menyelesaikan project ini, kita diharapkan dapat memahami cara menggabungkan beberapa konsep Python dalam sebuah program sederhana.

Konsep yang digunakan meliputi:

  • Menggunakan module random untuk menghasilkan angka secara acak.
  • Menggunakan input() untuk menerima input dari pengguna.
  • Menggunakan sys.argv untuk menerima argument dari command line.
  • Menggunakan while True untuk membuat perulangan permainan.
  • Menggunakan if dan else untuk menentukan kondisi permainan.
  • Menggunakan break untuk menghentikan permainan ketika tebakan benar.
  • Menggunakan continue untuk melanjutkan permainan setelah input tidak valid.
  • Menggunakan try dan except untuk menangani ValueError.

Gambaran Program​

Program akan meminta pengguna menentukan rentang angka melalui command line.

Contohnya:

python randomgame.py 1 10

Artinya:

Angka minimum = 1
Angka maksimum = 10

Program kemudian memilih satu angka secara acak di antara 1 sampai 10.

Pengguna harus menebak angka tersebut sampai mendapatkan jawaban yang benar.

Alur sederhananya:

Command Line
↓
Menentukan rentang angka
↓
Menghasilkan angka acak
↓
Meminta tebakan pengguna
↓
Validasi input
↓
Apakah berada dalam rentang?
↓
Apakah tebakan benar?
↙ ↘
Tidak Ya
↓ ↓
Coba lagi Game selesai

Mengambil Rentang Angka dari Command Line​

Program menggunakan module sys untuk mengambil argument dari command line.

Contoh:

python randomgame.py 1 10

Argument tersebut dapat diakses melalui:

sys.argv

Nilai yang diterima oleh sys.argv berupa string sehingga perlu dikonversi menjadi integer.

start = int(sys.argv[1])
end = int(sys.argv[2])

Setelah proses tersebut:

start = 1
end = 10

Menghasilkan Angka Acak​

Setelah mendapatkan batas angka, program menggunakan randint() dari module random.

from random import randint

Kemudian:

answer = randint(start, end)

Jika:

start = 1
end = 10

maka answer akan menjadi salah satu angka dari:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Angka tersebut menjadi jawaban yang harus ditebak pengguna.

Membuat Perulangan Game​

Game harus terus meminta tebakan selama pengguna belum menemukan jawaban yang benar.

Untuk kebutuhan tersebut digunakan:

while True:

Contohnya:

while True:
# proses permainan

Perulangan akan terus berjalan sampai terdapat instruksi yang menghentikannya.

Dalam project ini, permainan akan dihentikan menggunakan:

break

ketika tebakan pengguna benar.

Mengambil Input Pengguna​

Input pengguna dilakukan menggunakan:

input()

Karena input dari input() berupa string, hasilnya dikonversi menjadi integer menggunakan int().

guess = int(input(f"Tebak angka antara {start} sampai {end}: "))

Contohnya pengguna menjalankan:

python randomgame.py 1 10

Kemudian program menampilkan:

Tebak angka antara 1 sampai 10:

Pengguna kemudian memasukkan tebakan.

Validasi Input dengan try dan except​

Pengguna tidak selalu memasukkan angka.

Misalnya program meminta angka:

Tebak angka antara 1 sampai 10:

tetapi pengguna memasukkan:

abc

Ketika program melakukan:

int("abc")

Python akan menghasilkan:

ValueError

Agar program tidak berhenti secara tiba-tiba, proses tersebut ditempatkan di dalam try.

try:
guess = int(input(f"Tebak angka antara {start} sampai {end}: "))

except ValueError:
print("Harap masukkan angka yang valid!")

Dengan demikian, jika pengguna memasukkan teks yang tidak dapat dikonversi menjadi integer, program memberikan pesan dan permainan tetap berjalan.

Validasi Rentang Angka​

Selain memastikan input berupa angka, program juga harus memastikan angka tersebut berada dalam rentang yang telah ditentukan.

Misalnya rentangnya:

1 sampai 10

Kemudian pengguna memasukkan:

20

Input tersebut merupakan angka yang valid, tetapi berada di luar rentang permainan.

Python mendukung penulisan perbandingan seperti:

start <= guess <= end

Contohnya:

if start <= guess <= end:
...
else:
print(f"Hei! Masukkan angka antara {start} dan {end} saja.")

Perbandingan tersebut berarti:

start <= guess
dan
guess <= end

Memeriksa Jawaban​

Jika angka yang dimasukkan berada dalam rentang, program kemudian membandingkannya dengan jawaban.

if guess == answer:
print("Selamat! Kamu seorang jenius!")
break

Jika:

guess == answer

maka pengguna berhasil menebak angka.

Instruksi:

break

digunakan untuk keluar dari while True.

Ketika Tebakan Salah​

Jika angka masih berada dalam rentang tetapi tidak sama dengan jawaban:

else:
print("Salah, coba lagi!")

Program tidak menjalankan break.

Akibatnya, while True akan melakukan iterasi berikutnya dan meminta tebakan kembali.

Alurnya:

Tebakan salah
↓
"Salah, coba lagi!"
↓
Kembali meminta input

Ketika Input Berada di Luar Rentang​

Jika pengguna memasukkan angka yang berada di luar rentang:

if start <= guess <= end:
...
else:
print(f"Hei! Masukkan angka antara {start} dan {end} saja.")

Program memberikan peringatan dan kembali meminta tebakan.

Contohnya:

Tebak angka antara 1 sampai 10: 20
Hei! Masukkan angka antara 1 dan 10 saja.

Penggunaan continue​

Ketika terjadi ValueError, kita dapat menggunakan continue untuk melanjutkan ke iterasi berikutnya.

Contohnya:

except ValueError:
print("Harap masukkan angka yang valid!")
continue

continue membuat program kembali ke awal iterasi while.

Secara sederhana:

Input tidak valid
↓
ValueError
↓
Tampilkan pesan
↓
continue
↓
Iterasi berikutnya
↓
Minta input kembali

Kode Program Lengkap​

Berikut implementasi lengkap game tebak angka:

import sys
from random import randint

# Mengambil rentang angka dari argument command line
# Contoh:
# python randomgame.py 1 10

start = int(sys.argv[1])
end = int(sys.argv[2])

# Menghasilkan angka acak
answer = randint(start, end)

# Perulangan game
while True:
try:
# Mengambil input dari user
guess = int(input(f"Tebak angka antara {start} sampai {end}: "))

# Memastikan angka berada dalam rentang
if start <= guess <= end:

# Memeriksa apakah tebakan benar
if guess == answer:
print("Selamat! Kamu seorang jenius!")
break

else:
print("Salah, coba lagi!")

else:
print(f"Hei! Masukkan angka antara {start} dan {end} saja.")

except ValueError:
print("Harap masukkan angka yang valid!")
continue

Menjalankan Program​

Misalnya file disimpan dengan nama:

randomgame.py

Jalankan melalui terminal:

python randomgame.py 1 10

Program akan menentukan angka acak antara:

1 sampai 10

Kemudian program meminta pengguna memasukkan tebakan.

Contoh interaksi:

Tebak angka antara 1 sampai 10: 5
Salah, coba lagi!

Tebak angka antara 1 sampai 10: 8
Salah, coba lagi!

Tebak angka antara 1 sampai 10: 3
Selamat! Kamu seorang jenius!

Konsep yang Digunakan​

Project ini menggabungkan beberapa materi Python yang telah dipelajari.

Module​

Menggunakan:

import sys
from random import randint

Command-Line Arguments​

Menggunakan:

sys.argv

untuk menerima batas angka dari terminal.

Random Number​

Menggunakan:

randint()

untuk menghasilkan angka secara acak.

Input​

Menggunakan:

input()

untuk menerima tebakan pengguna.

Loop​

Menggunakan:

while True:

untuk menjalankan permainan berulang kali.

Conditional Statement​

Menggunakan:

if

dan:

else

untuk memeriksa kondisi permainan.

break​

Digunakan untuk menghentikan permainan ketika pengguna berhasil menebak jawaban.

break

continue​

Digunakan untuk melanjutkan permainan ketika input tidak valid.

continue

Error Handling​

Menggunakan:

try:

dan:

except ValueError:

untuk menangani input yang tidak dapat dikonversi menjadi integer.

Catatan Refactoring​

Ada beberapa hal penting yang perlu diperhatikan ketika menulis program seperti ini.

input() Harus Berada di Dalam Loop​

Input harus berada di dalam:

while True:

agar pengguna dapat memberikan tebakan baru pada setiap iterasi.

Jika input() berada di luar loop, pengguna hanya akan memberikan satu tebakan.

int(input()) Berada di Dalam try​

Bagian:

int(input(...))

berpotensi menghasilkan ValueError.

Karena itu, bagian tersebut diletakkan di dalam:

try:

agar input yang tidak valid dapat ditangani.

Gunakan Perbandingan Berantai​

Python memungkinkan penulisan:

start <= guess <= end

daripada:

guess >= start and guess <= end

Keduanya memiliki maksud yang sama, tetapi bentuk pertama lebih ringkas dan idiomatis dalam Python.

Tantangan Pengembangan​

Setelah memahami program dasar ini, coba kembangkan game dengan beberapa fitur tambahan.

Contohnya:

  1. Berikan petunjuk apakah tebakan terlalu tinggi atau terlalu rendah.
  2. Hitung jumlah percobaan pengguna.
  3. Berikan batas maksimal percobaan.
  4. Tampilkan skor pengguna.
  5. Tambahkan pilihan untuk bermain kembali.
  6. Validasi argument command line sebelum program dimulai.
  7. Pisahkan logic permainan ke dalam beberapa function.
  8. Buat versi program menggunakan class.

Contoh petunjuk:

Tebakan terlalu tinggi!

atau:

Tebakan terlalu rendah!

Dengan demikian, project sederhana ini dapat dikembangkan menjadi latihan yang lebih kompleks.

Kesimpulan​

Game tebak angka merupakan mini project yang menggabungkan berbagai konsep Python yang telah dipelajari.

Alur utamanya:

Argument Command Line
↓
Menentukan rentang angka
↓
Generate angka acak
↓
while True
↓
Minta tebakan
↓
Validasi input
↓
Validasi rentang
↓
Bandingkan dengan jawaban
↙ ↘
Salah Benar
↓ ↓
Coba lagi break

Melalui project ini, beberapa konsep seperti module, sys.argv, random, input, loop, conditional statement, break, continue, dan error handling digunakan secara bersamaan dalam sebuah program yang nyata.

Project seperti ini penting karena membantu mengubah konsep-konsep Python yang sebelumnya dipelajari secara terpisah menjadi sebuah aplikasi kecil yang dapat dijalankan dan digunakan.