Bir cümlelik özet
Python'un random modülünü kullanarak zar atan ve taş-kağıt-makas oynayan küçük programlar yazmayı, oyunlarda rastgeleliğin nasıl adil bir sürpriz yarattığını öğreniyoruz.
Neden önemli?
Sevdiğin oyunların çoğunda tahmin edemediğin şeyler olur. Zar hangi sayıya gelecek, karttaki hangi ödül çıkacak, düşman hangi yönden gelecek? Bu belirsizlik oyunları eğlenceli kılar. Eğer her şey önceden belliyse oyun kısa sürede sıkıcı olur.
Bilgisayarlar aslında çok düzenlidir: aynı komutu verince hep aynı sonucu üretirler. Peki o zaman sürpriz nereden gelir? İşte burada rastgelelik devreye girer. Rastgelelik, önceden kesin olarak bilemeyeceğimiz bir sonuç üretmektir.
Python'da bu iş için hazır bir araç vardır: random modülü. Bu derste onu kullanarak gerçek bir zar ve gerçek bir taş-kağıt-makas turu yazacağız. Aynı zamanda "adil rastgelelik" fikrini, yani her sonucun eşit şansa sahip olması gerektiğini konuşacağız.
random modülünü tanıyalım
Python'da bazı hazır araçlar ayrı kutularda durur. Bu kutulara modül denir. Rastgele sayılarla çalışan kutunun adı random. Onu kullanmadan önce programın en üstünde bir kez çağırmamız gerekir.
import random
import kelimesi "bu modülü programıma getir" demektir. Bir kez yazman yeterlidir; o dosyanın her yerinde random araçlarını kullanabilirsin.
randint: belirli aralıkta tam sayı
randint (random integer, yani rastgele tam sayı) iki sınır arasından rastgele bir tam sayı seçer. İki sınır da seçime dahildir.
import random
sayi = random.randint(1, 6)
print(sayi)
Bu program 1 ile 6 arasında (1 ve 6 dahil) rastgele bir sayı yazar. Çalıştırdığın her seferde farklı bir sonuç görebilirsin. Tıpkı bir zar gibi.
choice: bir listeden rastgele seçim
Bazen sayı değil, hazır seçeneklerden biri lazım olur. choice bir listeye bakar ve içinden rastgele bir eleman seçer.
import random
renkler = ["kırmızı", "yeşil", "mavi"]
secim = random.choice(renkler)
print("Seçilen renk:", secim)
Burada program üç renkten birini rastgele seçer. Listeye istediğin kadar seçenek ekleyebilirsin.
Kısa tanım:randint(a, b)a ile b arasında rastgele bir tam sayı verir;choice(liste)bir listeden rastgele bir eleman verir.
Örnek 1: Zar atma programı
Şimdi randint ile küçük bir zar programı yazalım. Kullanıcı Enter'a bastıkça zar atsın.
import random
print("Zar atmak için Enter'a bas.")
input()
zar = random.randint(1, 6)
print("Zar", zar, "geldi.")
Programı çalıştır ve birkaç kez dene. Her seferinde 1 ile 6 arasında bir sayı görürsün ve hangisinin geleceğini önceden bilemezsin.
İki zar birden
Çoğu oyun tek zar yerine iki zar kullanır. İki ayrı çağrı yapıp toplamlarını yazdıralım.
import random
zar1 = random.randint(1, 6)
zar2 = random.randint(1, 6)
toplam = zar1 + zar2
print("Birinci zar:", zar1)
print("İkinci zar:", zar2)
print("Toplam:", toplam)
İki zarın toplamı 2 ile 12 arasında olur. En sık çıkan toplam 7'dir, çünkü 7'yi veren çok sayıda kombinasyon vardır. Rastgelelik burada da adildir: her zar tek başına eşit şanslıdır.
Örnek 2: Taş-kağıt-makas turu
Şimdi choice kullanarak kullanıcının bilgisayara karşı oynadığı bir tur yazalım. Önce bilgisayarın seçimini rastgele belirleyeceğiz.
Girinti hatırlatması
Python'da if, elif ve else bloklarının altındaki satırlar 4 boşluk içeride yazılır. Bu girinti, hangi satırın hangi koşula ait olduğunu Python'a gösterir. Girintiyi unutursan program hata verir.
Bilgisayarın seçimi
import random
secenekler = ["taş", "kağıt", "makas"]
bilgisayar = random.choice(secenekler)
kullanici = input("Seçimin (taş/kağıt/makas): ")
input kullanıcının yazdığı metni alır. Bilgisayarın seçimini ise kullanıcı göremez; bu da oyunu adil tutar.
Kazananı bulma
Şimdi kuralları if/elif/else ile yazalım. Aynı seçim beraberliktir; geri kalan durumları tek tek kontrol ederiz.
if kullanici == bilgisayar:
sonuc = "Berabere!"
elif kullanici == "taş" and bilgisayar == "makas":
sonuc = "Kazandın!"
elif kullanici == "kağıt" and bilgisayar == "taş":
sonuc = "Kazandın!"
elif kullanici == "makas" and bilgisayar == "kağıt":
sonuc = "Kazandın!"
else:
sonuc = "Kaybettin!"
print("Bilgisayar:", bilgisayar)
print(sonuc)
and iki koşulun aynı anda doğru olmasını ister. Örneğin taş, yalnızca makası yener. Kullanıcı bu üç kazanma durumundan hiçbirine uymuyorsa (else), sonuç kaybetmektir.
Adil rastgelelik fikri
random.choice her seçeneği eşit şansla seçer: taş, kağıt ve makasın her biri üçte bir olasılığa sahiptir. İşte adil rastgelelik budur. Hiçbir seçenek diğerinden avantajlı değildir.
Bir oyunu adil tutmak için:
- Bilgisayarın seçimi, kullanıcının seçiminden sonra ona bakılarak yapılmamalıdır. Yoksa bilgisayar hep kazanır ve bu hile olur.
- Her seçenek listede eşit sayıda bulunmalıdır. Listeye
["taş", "taş", "kağıt", "makas"]yazarsan taş daha sık çıkar ve oyun adil olmaz.
Adil rastgelelik, oyunun hem eğlenceli hem de güvenilir olmasını sağlar.
Mini uygulama
Zar oyununu küçük bir yarışa çevir. Kullanıcı ile bilgisayar birer zar atsın; büyük sayıyı atan kazansın.
import random
sen = random.randint(1, 6)
bilgisayar = random.randint(1, 6)
print("Senin zarın:", sen)
print("Bilgisayarın zarı:", bilgisayar)
if sen > bilgisayar:
print("Kazandın!")
elif sen < bilgisayar:
print("Kaybettin!")
else:
print("Berabere!")
Denemeler:
- Programı 5 kez çalıştır ve kaç kez kazandığını say.
- Zarı
randint(1, 12)yaparak on iki yüzlü bir zara çevir. - Taş-kağıt-makas turunu bir
whiledöngüsüne alarak kullanıcı "çıkış" yazana kadar oynat.
Uygulama laboratuvarı: Rastgelelik ve Basit Oyun Mantığı
Rastgelelik ve Basit Oyun Mantığı konusunu kalıcı hâle getirmenin en iyi yolu, kavramı küçük ve ölçülebilir bir göreve dönüştürmektir. Bu çalışmada random modülünü tanıyalım ile choice: bir listeden rastgele seçim arasındaki ilişkiyi kullanarak çalışan kısa bir Python 3 programı, örnek girdiler ve beklenen çıktılar hazırlayacaksın. Amaç yalnız sonucun çalışması değil; hangi kararı neden verdiğini, neyi test ettiğini ve hangi durumda tasarımı değiştireceğini açıklayabilmektir.
Görev senaryosu
Şu senaryoyu ele al: antrenman sonuçlarından toplam ve ortalama hesaplayan program. Dersin ana hedefi “random modülüyle rastgelelik üretip zar ve taş-kağıt-makas gibi basit oyun mantıkları kurmayı öğren” olduğuna göre önce problemi tek cümleyle tanımla. Ardından sistemin alacağı girdiyi, uygulayacağı işlemi ve üreteceği çıktıyı ayrı ayrı yaz. Bilmediğin bir ayrıntı varsa onu varsayım olarak işaretle; varsayımı gerçek bilgi gibi kullanma.
- Planla: Başlangıç durumunu, beklenen sonucu ve kullanacağın kavramları yaz.
- En küçük sürümü kur: Yalnız temel davranışı çalıştır; süsleme ve ek özellikleri sonraya bırak.
- Üç test hazırla: Normal bir durum, sınırda bir durum ve hatalı ya da beklenmeyen bir durum seç.
- Sonucu kaydet: Beklenen ile gerçekleşeni yan yana yaz; fark varsa olası nedeni belirt.
- Tek değişiklik yap: Aynı anda birçok şeyi değiştirmek yerine bir kararı düzeltip testi yeniden çalıştır.
Başarı ölçütleri
- Kod Python 3 sözdizimiyle çalışıyor mu?
- Değişken ve fonksiyon adları amacı açıklıyor mu?
- Boş, yanlış türde ve sınırdaki girdiler denendi mi?
- Hata mesajı kullanıcıya neyi düzeltmesi gerektiğini söylüyor mu?
- Aynı kod gereksiz tekrar olmadan yeniden kullanılabiliyor mu?
“Rastgelelik ve Basit Oyun Mantığı” çalışmasını bitirdiğinde ürünü bir arkadaşına yalnız bölüm başlıklarıyla anlat. Arkadaşın antrenman sonuçlarından toplam ve ortalama hesaplayan program senaryosundaki adımları ve karar nedenlerini takip edebiliyorsa anlatım yeterince açıktır. Anlaşılmayan noktayı daha fazla terim ekleyerek değil, random modülünü tanıyalım ve choice: bir listeden rastgele seçim ilişkisini daha küçük adımlara bölerek düzelt.
Sık yapılan hatalar
import satırını unutmak
random kullanmadan önce import random yazmazsan Python "random tanımlı değil" hatası verir. Bu satır dosyanın en üstünde bir kez bulunmalıdır.
randint sınırlarını yanlış anlamak
random.randint(1, 6) hem 1'i hem 6'yı sonuca dahil eder. Bazı öğrenciler 6'nın çıkmayacağını sanır; oysa altı yüzlü zar için bu tam olarak doğrusudur.
Girintiyi karıştırmak
if bloğunun altındaki satırları girintilemezsen ya da farklı boşluk kullanırsan program IndentationError verir. Her blok için 4 boşluk kullan.
Karşılaştırmada tek eşittir kullanmak
Eşitliği kontrol ederken == kullanılır. Tek = atama içindir. if kullanici = bilgisayar: yazarsan hata alırsın; doğrusu if kullanici == bilgisayar: şeklindedir.
Güvenlik notu
Bu dersteki programların hepsi kendi bilgisayarında çalışan zararsız oyunlardır. Yine de genel bir alışkanlık olarak yalnızca kendi yazdığın veya güvendiğin kodları çalıştır. Oyunlarda gerçek adını, adresini veya şifreni isteyen bir kod yazma ve kişisel bilgilerini programlara girme.
Ders özeti
randommodülü Python'a rastgelelik yeteneği katar veimport randomile getirilir.randint(a, b)a ile b arasında (ikisi dahil) rastgele tam sayı verir; zar atmak için idealdir.choice(liste)bir listeden rastgele bir eleman seçer; taş-kağıt-makas için kullanılır.- Oyun mantığında kazananı
if/elif/elseile karar kurallarına dönüştürürüz. - Adil rastgelelikte her seçenek eşit şansa sahiptir ve bilgisayar kullanıcının seçimine bakarak hile yapmaz.
Kontrol soruları
randommodülünü kullanmadan önce programın en üstüne hangi satırı yazmalıyız?random.randint(1, 6)en küçük ve en büyük hangi sayıları üretebilir?- Bir listeden rastgele bir eleman seçmek için hangi fonksiyonu kullanırız?
- Taş-kağıt-makasta beraberlik hangi durumda olur?
["taş", "taş", "kağıt", "makas"]listesiylechoicekullanırsak oyun neden adil olmaz?
Cevaplar
import randomsatırını yazmalıyız.- En küçük 1, en büyük 6 sayısını üretebilir; iki sınır da seçime dahildir.
random.choicefonksiyonunu kullanırız.- Kullanıcı ile bilgisayarın seçimi aynı olduğunda beraberlik olur.
- Taş listede iki kez bulunduğu için daha sık seçilir; seçenekler eşit şansa sahip olmadığından rastgelelik adil değildir.
Kaynak ve doğrulama notu
“Rastgelelik ve Basit Oyun Mantığı” dersi için doğrulama odağı random modülünü tanıyalım ile choice: bir listeden rastgele seçim arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Kod örnekleri Python 3 sözdizimi esas alınarak hazırlanmıştır. Çalıştırma ortamına göre küçük farklar görülebileceği için örnekler önce güvenli bir çevrim içi editörde veya yerel geliştirme ortamında denenmelidir.
Sonraki ders
Modüller ve Kütüphaneler: Hazır modülleri kendi programlarımıza nasıl getirdiğimizi ve Python'un standart kütüphanesinin bize neler sunduğunu keşfediyoruz.