18. Loop

Cara lain untuk menghindari pengulangan diri sendiri adalah loop: sebuah blok kode yang berjalan berulang-ulang. Python memiliki dua bentuk loop utama — while dan for — ditambah break untuk berhenti lebih awal. Semua dibahas di sini.

while — ulangi selama kondisi benar

while adalah loop yang paling umum. Ia memeriksa sebuah kondisi, menjalankan blok jika benar, lalu memeriksa lagi — berulang sampai kondisinya salah.

count = 10
while count > 0:
    print(count)
    count = count - 1
print("Blast off!")

Urutan eksekusi:

  1. Periksa count > 0. Nilainya 10, jadi True.
  2. Cetak 10, setel count ke 9.
  3. Kembali ke langkah 1. count adalah 9, masih True. Cetak, kurangi.
  4. Ulangi sampai count adalah 0. Kondisi gagal, loop keluar, dan print("Blast off!") berjalan sekali.

Di dalam isi loop, ubah nilai yang bergantung pada kondisi, atau loop tidak akan pernah berakhir. Infinite loop mengunci terminal. Hentikan dengan Ctrl + C.

for — ulangi sejumlah kali yang diketahui

Loop for adalah alat yang tepat ketika kamu tahu berapa kali harus mengulang, atau ketika kamu ingin melangkah melalui sebuah urutan. Bentuknya menggunakan range():

for i in range(1, 6):
    print(i)

Output:

1
2
3
4
5

range(start, stop) menghasilkan angka dari start sampai — tapi tidak termasukstop. Jadi range(1, 6) memberikan 1, 2, 3, 4, 5. Ini adalah salah satu kejutan pertama dalam Python: nilai akhir tidak termasuk.

Untuk loop dari 1 sampai 10, tulis range(1, 11).

Sebuah langkah

Argumen ketiga ke range() adalah langkah — seberapa banyak counter berubah setiap putaran. Defaultnya adalah 1; ubah untuk melewati atau menghitung mundur:

for i in range(0, 101, 10):    # 0, 10, 20, ... 100
    print(i, end=" ")
print()                        # a blank line at the end

for i in range(10, 0, -1):     # 10, 9, 8, ... 1
    print(i, end=" ")
print()

Langkah membutuhkan tanda yang tepat — positif ke atas, negatif ke bawah. Langkah 0 menimbulkan ValueError.

print(i, end=" ") memberitahu Python untuk mencetak spasi setelah setiap nilai daripada baris baru. print() biasa di akhir memulai baris baru.

Buka exercises/18/01-for-table.py. Program ini mencetak tabel perkalian 7, dari 7 * 1 sampai 7 * 10. Ubah untuk mencetak tabel angka lain.

while True: dengan break

Loop apa pun bisa dipotong lebih awal dengan break, yang langsung melompat ke apa pun yang datang setelah loop. Loop while True: tidak memiliki jalan keluar bawaan; satu-satunya jalan keluar adalah break:

n = 1
while True:
    if n * n > 100:
        break
    n = n + 1
print("First number whose square is over 100 is", n)

Gunakan while True: ketika pengujian keluar terlalu rumit untuk satu perbandingan di bagian atas.

Berjalan setidaknya sekali dengan while True:

Terkadang kamu perlu isi loop berjalan setidaknya sekali sebelum memeriksa kondisi. Gunakan while True: dan break di akhir:

# runs at least once, stops when count > 5
count = 1
while True:
    print(count)
    count = count + 1
    if count > 5:
        break

break di bagian bawah keluar segera setelah kondisi terpenuhi.

Pekerjaan Rumah

Soal 1 — Hitung sampai 20

Buka exercises/18/homework/01-count-to-20.py. Gunakan loop while untuk mencetak 1 sampai 20, masing-masing di baris tersendiri.

Soal 2 — Tabel perkalian 7

Buka exercises/18/homework/02-mult-table-7.py. Gunakan loop for dengan range() untuk mencetak tabel perkalian 7, dari 7 * 1 sampai 7 * 12, dalam bentuk ini:

7 * 1 = 7
7 * 2 = 14
...
7 * 12 = 84

Soal 3 — Berhenti di ambang batas

Buka exercises/18/homework/03-stop-at-threshold.py. Loop dari 1, tambahkan setiap angka ke total yang berjalan. Berhenti setelah total melebihi 100, lalu cetak total dan nilai counter saat itu.

Tantangan — Jumlah 1..N

Buka exercises/18/homework/04-sum-1-to-n.py. Minta bilangan bulat positif n. Hitung 1 + 2 + 3 + ... + n dengan loop for dan total berjalan. Cetak:

Sum from 1 to N is S

Lalu cetak rumus n * (n + 1) // 2 di baris berikutnya — jawaban bentuk tertutup. Keduanya harus sama.

Buntu atau sudah selesai? Buka halaman solusi pekerjaan rumah.