J. Manopo
J. Manopo

Reputation: 15

Why does my code generate different results each time i run it? (Python)

here is my code

daftar = ["K","H","S"]
kiri = daftar
kanan = []
petani = []

def kirikekanan():
    global daftar, kiri, kanan, petani, naonweh
    petani = list(next(naonweh))
    kiri_sementara = list(set(kiri).difference(petani)) #mengurangkan isi himpunan yang ada di kiri dengan yg dibawa petani
    if set(kiri_sementara) == {"K","H"} or set(kiri_sementara) == {"K","S"}:
        kirikekanan()
    else:
        kiri = kiri_sementara
        kanan = list(set(daftar).difference(kiri))
        print("yang dibawa petani = {}, sehingga kiri = {}, kanan = {}y".format(petani, kiri, kanan))

def kanankekiri():
    global daftar, kiri, kanan, petani, naonweh2
    if set(kanan) == {"K","H"} or set(kanan) == {"K","S"}:
        petani = list(next(naonweh2))
        kanan = list(set(kanan).difference(petani))
        kiri = list(set(daftar).difference(kanan))
        print("yang dibawa petani = {}, sehingga kiri = {}, kanan = {}g".format(petani, kiri, kanan))
    else:
        petani = []
        print("yang dibawa petani = {}, sehingga kiri = {}, kanan = {}g".format(petani, kiri, kanan))

while set(kanan) != set(daftar):
    naonweh = iter(kiri)
    naonweh2 = iter(kanan)
    kirikekanan()
    kanankekiri()

this is the result i want to produce:

the result i want to produce

but i get a different result if i run this on the second, or third times. It leads to an infinite looping, just like this:

the result i don't want to produce

Upvotes: 1

Views: 247

Answers (1)

Ali Hassan
Ali Hassan

Reputation: 966

remove set in your if set(kanan) == {"K","H"} or set(kanan) == {"K","S"}:.

if kanan == {"K","H"} or kanan == {"K","S"}:
    petani = list(next(naonweh2))
    kanan = list(set(kanan).difference(petani))
    kiri = list(set(daftar).difference(kanan))
    print("yang dibawa petani = {}, sehingga kiri = {}, kanan = {}g".format(petani, kiri, kanan))

Output is here

Upvotes: 1

Related Questions