Menu
CoddyTech

Iterator Tak Terbatas

Pelajaran 6 dari 13 dalam kursus Iterator Python di Coddy.

Iterator tak terbatas adalah tipe iterator khusus di Python yang dapat menghasilkan urutan nilai tanpa akhir. Berbeda dengan iterator terbatas yang pada akhirnya memunculkan exception StopIteration, iterator tak terbatas terus menghasilkan nilai tanpa batas.

Karakteristik Iterator Tak Terbatas

  • Iterator ini tidak pernah memunculkan exception StopIteration.
  • Iterator ini dapat berguna untuk menghasilkan urutan berkelanjutan atau menyimulasikan aliran data tanpa akhir.
  • Kamu harus berhati-hati agar tidak membuat perulangan tanpa akhir saat menggunakannya.

Membuat Iterator Tak Terbatas

Berikut contoh sederhana iterator tak terbatas yang menghasilkan urutan bilangan bulat tanpa akhir:

class InfiniteCounter:
    def __init__(self, start=0):
        self.count = start

    def __iter__(self):
        return self

    def __next__(self):
        current = self.count
        self.count += 1
        return current

# Penggunaan
counter = InfiniteCounter()
for i in counter:
    print(i)
    if i >= 5:
        break  # Cegah perulangan tanpa henti

Dalam contoh ini, class InfiniteCounter akan terus menghasilkan angka tanpa batas. Kita menggunakan pernyataan break untuk menghentikan iterasi setelah kondisi tertentu terpenuhi.

Iterator Tak Terbatas Bawaan

Module itertools Python menyediakan beberapa iterator tak terbatas yang berguna:

  • itertools.count(start, step): Menghitung naik tanpa batas dari nilai awal
  • itertools.cycle(iterable): Mengulang iterable tanpa batas
  • itertools.repeat(elem, [n]): Mengulang sebuah elemen tanpa batas atau sebanyak n kali

Contoh menggunakan itertools.count():

from itertools import count

for i in count(10):
    print(i)
    if i >= 15:
        break
# output: 10, 11, 12, 13, 14, 15

Peringatan dan Praktik Terbaik

  • Selalu sediakan cara untuk keluar dari perulangan yang melibatkan iterator tak terbatas agar program tidak macet.
  • Gunakan iterator tak terbatas dengan bijak dan hanya saat diperlukan.
  • Pertimbangkan untuk menggunakan fungsi generator demi menghasilkan urutan tak terbatas yang lebih hemat memori.

Iterator tak terbatas menyediakan alat yang ampuh untuk skenario yang memerlukan pembuatan atau pemrosesan data berkelanjutan, tetapi gunakan dengan hati-hati agar programmu berperilaku sesuai harapan.

quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

challenge icon

Tantangan

Mudah

Buat class iterator tak terbatas bernama CyclicCounter yang berulang kali melewati rentang angka tertentu tanpa batas. Iterator harus dimulai dari angka yang ditentukan dan kembali ke angka tersebut setelah mencapai akhir rentang.

Kamu diberikan:

  • Dua bilangan bulat sebagai input: start dan end (inklusif)

Class CyclicCounter-mu harus:

  • Mengimplementasikan method __iter__() dan __next__()
  • Menghasilkan angka dari start hingga end (inklusif)
  • Setelah mencapai end, kembali ke start dan terus berjalan tanpa batas

Setelah mengimplementasikan class CyclicCounter, buat instance-nya menggunakan nilai input. Lalu, gunakan perulangan untuk mencetak 10 angka pertama yang dihasilkan iterator, masing-masing pada baris baru.

Input akan diberikan sebagai dua bilangan bulat yang dipisahkan oleh spasi, yang mewakili start dan end.

Coba sendiri

# Baca input
start, end = map(int, input().split())

class CyclicCounter:
    def __init__(self, start, end):
        self.start = start
        self.end = end
        self.current = start

    def __iter__(self):
        return self

    # TODO: Implementasikan method __next__()

# Buat instance dari CyclicCounter
counter = CyclicCounter(start, end)

# TODO: Gunakan perulangan untuk mencetak 10 angka pertama yang dihasilkan iterator

# Ingat, cetak setiap angka pada baris baru

Semua pelajaran di Iterator Python

Latihan sendiri: Compiler Python online