13. Angka dan matematika

Angka Python datang dalam dua jenis utama, mendukung aritmetika biasa, dan terhubung ke modul standar untuk lebih banyak fungsi pembantu. Bab ini mencakup apa yang kamu butuhkan untuk logika game: pembulatan, angka acak, matematika dasar.

Integer dan float

Python punya dua tipe angka yang umum:

  • int. Bilangan bulat tanpa bagian desimal: 0, 7, -42.
  • float. Bilangan dengan titik desimal: 3.14, 0.5, -1.0.

Sebagian besar waktu kamu tidak perlu peduli mana yang mana. 7 adalah int, 7.0 adalah float. Ketika kamu mencampurnya dalam aritmetika, hasilnya adalah float.

type(x).__name__ memberi tahu kamu mana yang kamu miliki:

print(type(7).__name__)     # int
print(type(7.0).__name__)   # float
print(type(3.14).__name__)  # float

Aritmetika

Operator yang sudah familiar semuanya ada di sini, ditambah dua yang kurang umum dalam matematika sehari-hari:

Operator Nama Contoh Hasil
+ penjumlahan 3 + 2 5
- pengurangan 7 - 4 3
* perkalian 6 * 7 42
/ pembagian float 7 / 2 3.5
// pembagian integer 7 // 2 3
% modulo (sisa) 7 % 3 1
** pangkat 2 ** 8 256

Tiga di antaranya perlu perhatian lebih:

Pembagian float / selalu menghasilkan float di Python, bahkan ketika hasilnya adalah bilangan bulat. 6 / 3 adalah 2.0, bukan 2. Ini berbeda dari beberapa bahasa lain di mana membagi dua integer menghasilkan integer.

Pembagian integer // membuang semua bagian setelah titik desimal. 7 // 2 adalah 3. -7 // 2 adalah -4, karena pembulatannya menuju tak hingga negatif, bukan menuju nol.

Modulo % adalah sisa setelah pembagian integer. 7 % 3 adalah 1 karena 7 = 2 * 3 + 1. Ini adalah cara standar untuk bertanya "apakah angka ini genap?" — n % 2 adalah 0 untuk genap dan 1 untuk ganjil.

print(7 / 2)    # 3.5
print(7 // 2)   # 3
print(7 % 2)    # 1
print(2 ** 8)   # 256

Buka exercises/13/01-arithmetic.py. Prediksi setiap hasil yang dicetak sebelum menjalankannya, lalu jalankan dan periksa.

Modul math

Modul math Python punya fungsi pembantu yang paling sering kamu butuhkan. Tambahkan import math di bagian atas file untuk menggunakannya:

import math
Fungsi Fungsinya
math.floor(x) Integer terbesar yang tidak lebih besar dari x. floor(3.7) -> 3.
math.ceil(x) Integer terkecil yang tidak lebih kecil dari x. ceil(3.2) -> 4.
abs(x) Nilai absolut. abs(-5) -> 5. Built-in, tidak perlu import.
math.sqrt(x) Akar kuadrat.
min(a, b) Yang lebih kecil dari dua angka. Built-in, tidak perlu import.
max(a, b) Yang lebih besar dari dua angka. Built-in, tidak perlu import.
math.pi Konstanta 3.1415... (sebuah nilai, bukan fungsi).

Panggil seperti fungsi lainnya:

import math

print(math.floor(3.7))    # 3
print(math.ceil(3.2))     # 4
print(math.sqrt(16))      # 4.0
print(min(7, 3))          # 3
print(math.pi)            # 3.141592653589793

abs(), min(), dan max() sudah built-in di Python dan selalu tersedia. math.floor, math.ceil, math.sqrt, dan math.pi membutuhkan import math di bagian atas file.

Angka acak

Angka acak berada di modul random. Import di bagian atas:

import random
  • random.random() mengembalikan float antara 0.0 dan 1.0.
  • random.randint(a, b) mengembalikan bilangan bulat dari a sampai b, kedua ujung termasuk. random.randint(1, 6) adalah dadu enam sisi.
import random

print(random.random())          # e.g. 0.6238...
print(random.randint(1, 6))     # e.g. 4
print(random.randint(1, 100))   # e.g. 73

random.randint(a, b) menyertakan baik a maupun b dalam kemungkinan hasilnya. Ini sesuai dengan perilaku yang diharapkan untuk lemparan dadu dan penggunaan serupa.

Mengubah teks menjadi angka

Ketika sebuah nilai datang sebagai string tapi kamu perlu melakukan matematika dengannya, gunakan int() untuk bilangan bulat atau float() untuk desimal:

text = "42"
n = int(text)
print(n + 1)            # 43

decimal_text = "3.14"
x = float(decimal_text)
print(x * 2)            # 6.28

Jika teksnya tidak bisa menjadi angka, Python memunculkan ValueError:

int("hello")   # ValueError: invalid literal for int()

Kamu akan banyak menggunakan konversi ini di bab berikutnya, di mana program membaca input keyboard. Apapun yang diketik pengguna datang sebagai string, bahkan jika mereka mengetik digit.

Pekerjaan Rumah

Soal 1 — Luas persegi panjang

Buka exercises/13/homework/01-rectangle-area.py. Dua variable menyimpan width dan height sebuah persegi panjang. Hitung luasnya dan cetak dengan label, misalnya Area: 24.

Soal 2 — Floor dan ceil

Buka exercises/13/homework/02-floor-and-ceil.py. Sebuah variable menyimpan float 3.7. Cetak apa adanya, setelah math.floor, dan setelah math.ceil. Tambahkan satu baris komentar yang menjelaskan perbedaan antara floor dan ceil.

Soal 3 — Lempar dua dadu

Buka exercises/13/homework/03-roll-two-dice.py. "Lempar" dua dadu enam sisi dan cetak hasilnya seperti ini:

Die 1: 4
Die 2: 6
Total: 10

Gunakan random.randint untuk lemparan. Lempar setiap dadu secara terpisah agar dua nilainya independen.

Tantangan — Hipotenusa

Buka exercises/13/homework/04-hypotenuse.py. Dua variable menyimpan dua sisi pendek sebuah segitiga siku-siku (a dan b). Hitung dan cetak hipotenusa c menggunakan teorema Pythagoras:

c = sqrt(a**2 + b**2)

Cetak ketiga nilai dengan label. Bulatkan hipotenusa ke dua tempat desimal dengan f-string dan spesifikasi format :.2f dari bab 12.

Buntu atau sudah selesai? Buka halaman solusi pekerjaan rumah.