Ana Sayfa · Akademi · Robotik ve Kodlama · Python Temelleri · Proje: Sayı Tahmin Oyunu

Proje: Sayı Tahmin Oyunu

random, while, if ve input’u birleştirerek çalışan bir sayı tahmin oyunu yaz.

PROJE PUSULASI

Bu sayfayı ne için kullanacaksın?

Ana fikir

Bilgisayarın tuttuğu gizli bir sayıyı random , while , if ve input kullanarak tahmin ettiren, baştan sona çalışan küçük bir oyun yazıyoruz.

Üretilecek kanıt

Çalışan oyunun üzerine kendi geliştirmelerini ekle. Kolaydan zora birkaç fikir: Deneme hakkı sınırı: while True yerine while deneme < 7 kullan; hak biterse gizli sayıyı ekrana yazdır. Aralığı değiştir: random.randint(1, 500) yaparak oyunu zorlaştır. "Çok yakınsın" ipucu: Tahmin ile gizli sayının farkı 5'ten küçükse ek bir mesaj yazdır. Tekrar oyna: Oyun…

Kontrol tuzağı

İlk yazdığımda if yerine iki tane bağımsız if kullandığım bir sürüm denedim: if tahmin < gizli_sayi: print("Daha büyük bir sayı dene.") if tahmin > gizli_sayi: # burada elif olmalıydı print("Daha küçük bir sayı dene.") else: print("Tebrikler!") Sorun şuydu: ikinci if ile bağlı else , yalnızca "büyük değilse" durumunu…

Sonraki bağlantı

Proje: Ders Programı Kontrolü: Bir liste ve döngü kullanarak, günün derslerine göre çantada hangi kitapların olması gerektiğini kontrol eden bir program.

Modül kaynakları: Python Tutorial · Arduino Learn

SeviyeBaşlangıç
Yaş10–16
Süre45–75 dk
Ön koşulModüller ve Kütüphaneler
İçerikProje rehberi · 1.610 kelime
Son güncelleme

Bir cümlelik özet

Bilgisayarın tuttuğu gizli bir sayıyı random, while, if ve input kullanarak tahmin ettiren, baştan sona çalışan küçük bir oyun yazıyoruz.

Neden önemli?

Şimdiye kadar döngüleri, koşulları ve kütüphaneleri ayrı ayrı öğrendik. Gerçek bir program ise bu parçaları bir araya getirir. Sayı tahmin oyunu bunun için çok iyi bir başlangıç projesidir: kısa ama içinde bir programın tüm temel iskeleti vardır.

Bu projede şunları bir arada kullanacağız:

Kısacası bu ders, "komutları biliyorum" ile "bir programı ben yazdım" arasındaki köprüdür.

Oyunun planı

Kod yazmadan önce oyunu günlük dille, adım adım düşünelim. Buna önceki modüllerde sözde kod demiştik.

Başla
Bilgisayar 1 ile 100 arasında gizli bir sayı tut
Deneme sayısını 0 yap
Tekrarla:
  Kullanıcıdan bir tahmin al
  Deneme sayısını 1 artır
  Eğer tahmin gizli sayıdan küçükse
    "Daha büyük dene" yaz
  Eğer tahmin gizli sayıdan büyükse
    "Daha küçük dene" yaz
  Değilse (tahmin doğruysa)
    "Tebrikler" yaz ve döngüyü bitir
Bitir

Bu plan, oyunun tamamını üç yapı üzerine kuruyor: bir gizli sayı, bir tekrar (döngü) ve her turda verilen bir karar. Şimdi bu parçaları teker teker Python'a çevirelim.

Yapı taşlarını tanıyalım

random ile gizli sayı

random, Python ile birlikte gelen standart bir kütüphanedir; rastgele sayı üretmek için kullanılır. Kullanmadan önce import ile programa dahil ederiz.

import random

gizli_sayi = random.randint(1, 100)
print(gizli_sayi)  # test için, oyunda bunu göstermeyeceğiz

random.randint(1, 100) ifadesi, 1 ve 100 dahil olmak üzere aradan rastgele bir tam sayı verir. Her çalıştırdığında farklı bir sayı görürsün.

input ile tahmin almak

input her zaman metin (string) döndürür. Sayı karşılaştırması yapabilmek için gelen değeri int ile tam sayıya çeviririz.

tahmin = int(input("1-100 arası bir sayı tahmin et: "))
print(tahmin + 1)  # artık sayı gibi işlem yapabiliyoruz

int(...) yazmayı unutursak "50" metnini bir sayıyla kıyaslamaya çalışıp hata alırız.

while ile tekrar

while döngüsü, koşulu doğru olduğu sürece içindeki satırları tekrar eder. Doğru tahmin gelene kadar durmadan sormasını istediğimiz için while True kullanıp, doğru cevapta break ile çıkacağız. break, döngüyü hemen bitiren komuttur.

Buradaki girinti (4 boşluk) çok önemli: bir satır while veya if bloğunun içinde mi, dışında mı olduğunu Python girintiyle anlar.

sayac = 0
while sayac < 3:
    sayac = sayac + 1
    print("Tur", sayac)

Bu küçük örnek üç kez yazdırır ve durur. Oyunda ise koşulu "doğru cevap gelene kadar" biçiminde kuracağız.

Tam oyun kodu

Şimdi bütün parçaları birleştiriyoruz. Aşağıdaki kod baştan sona çalışır:

import random

gizli_sayi = random.randint(1, 100)
deneme = 0

while True:
    tahmin = int(input("1-100 arası bir sayı tahmin et: "))
    deneme = deneme + 1

    if tahmin < gizli_sayi:
        print("Daha büyük bir sayı dene.")
    elif tahmin > gizli_sayi:
        print("Daha küçük bir sayı dene.")
    else:
        print(f"Tebrikler! Sayıyı {deneme} denemede buldun.")
        break

Kodun mantığı, en baştaki planla birebir aynı. if küçükse, elif büyükse, else ise doğru tahmin demektir ve break oyunu bitirir. f"..." ise f-string'dir: süslü parantez içindeki {deneme} değerini metnin içine yerleştirir.

Test senaryoları

Bir programı yazmak yeterli değildir; farklı girdilerle denemeliyiz. Diyelim ki gizli sayı 42 olsun:

Test senaryoları tablosu
TahminEkranda ne çıkarSonraki adım
50Daha küçük bir sayı dene.1–49 arasına in
25Daha büyük bir sayı dene.26–49 arasına çık
42Tebrikler! Sayıyı 3 denemede buldun.Oyun biter

Her turda aralığı ortadan bölersen (buna ikili arama denir) 100 sayıyı en fazla 7 denemede bulabilirsin. Kendi oyununu birkaç kez oynayıp bunu test et.

Bir hata ve düzeltmesi

İlk yazdığımda if yerine iki tane bağımsız if kullandığım bir sürüm denedim:

if tahmin < gizli_sayi:
    print("Daha büyük bir sayı dene.")
if tahmin > gizli_sayi:      # burada elif olmalıydı
    print("Daha küçük bir sayı dene.")
else:
    print("Tebrikler!")

Sorun şuydu: ikinci if ile bağlı else, yalnızca "büyük değilse" durumunu kapsıyordu. Tahmin gizli sayıdan küçük olduğunda hem "Daha büyük dene" hem de yanlışlıkla "Tebrikler!" yazdırıyordu.

Düzeltme, ikinci if'i elif yapmaktı. Böylece üç durum tek bir karar zincirine bağlandı: küçük, büyük veya doğru. Bir programda "değilse" yolunu doğru bağlamak, koşulu yazmak kadar önemli.

Mini uygulama

Çalışan oyunun üzerine kendi geliştirmelerini ekle. Kolaydan zora birkaç fikir:

  1. Deneme hakkı sınırı: while True yerine while deneme < 7 kullan; hak biterse gizli sayıyı ekrana yazdır.
  2. Aralığı değiştir: random.randint(1, 500) yaparak oyunu zorlaştır.
  3. "Çok yakınsın" ipucu: Tahmin ile gizli sayının farkı 5'ten küçükse ek bir mesaj yazdır.
  4. Tekrar oyna: Oyun bittiğinde "Tekrar oynamak ister misin?" diye sorup en dıştan bir döngüye al.

Deneme hakkı sınırı için başlangıç:

while deneme < 7:
    tahmin = int(input("Tahminin: "))
    deneme = deneme + 1
    # ipuçlarını buraya ekle
    if tahmin == gizli_sayi:
        print("Kazandın!")
        break

Projeyi güçlendirme planı

Proje: Sayı Tahmin Oyunu için yalnız çalışan bir gösterim hazırlamak yeterli değildir. İyi bir proje; hedefi, kullanıcıyı, sınırları, test koşullarını ve başarısız denemeleri de görünür kılar. Bu genişletme çalışmasında günlük ders programını kontrol eden komut satırı aracı bağlamını kullanarak çalışan kısa bir Python 3 programı, örnek girdiler ve beklenen çıktılar oluştur. Dersin hedefi “random, while, if ve input’u birleştirerek çalışan bir sayı tahmin oyunu yaz” olsa da proje sayfasında ölçülmemiş bir sonucu kesin başarı gibi yazma.

1. Proje özeti ve kapsam

Önce üç cümle yaz: Çözmek istediğin sorun nedir, bu sorun kimin için önemlidir ve ilk sürüm özellikle neyi yapmayacaktır? Kapsam dışını belirtmek projeyi küçültmez; tamamlanabilir hâle getirir. Oyunun planı ile random ile gizli sayı arasındaki ilişkiyi projenin temel varsayımı olarak yaz ve bu varsayımı hangi testin doğrulayacağını belirt.

2. Kabul ölçütleri

“Proje: Sayı Tahmin Oyunu” için kabul ölçütlerini “çalışıyor” gibi belirsiz sözcüklerle bırakma. Süre, mesafe, doğru deneme sayısı, ekran genişliği veya kullanıcı adımı gibi gözlenebilir bir ölçü seç. Ölçüm mümkün değilse en azından üç ardışık denemede aynı davranışın görülüp görülmediğini kaydet.

3. Test matrisi

3. Test matrisi tablosu
TestKoşulBeklenenGerçek sonuçSonraki karar
NormalStandart giriş ve tam bağlantıTemel görev tamamlanırTest sırasında doldurKoru veya küçük iyileştirme yap
SınırEn düşük ya da en yüksek kabul edilen değerSistem kararlı kalırTest sırasında doldurEşiği veya kuralı gözden geçir
HataEksik, yanlış ya da beklenmeyen girişGüvenli ve anlaşılır tepkiTest sırasında doldurHata yönetimi ekle
TekrarAynı koşulda en az üç denemeBenzer sonuçlarTest sırasında doldurTutarsızlığın kaynağını araştır

4. Sürüm günlüğü

“Proje: Sayı Tahmin Oyunu” projesinin her sürümü için tarih, değiştirdiğin tek ana karar, değişikliğin nedeni ve test sonucu yaz. İlk sürümün çalışmaması başarısızlık değildir; Oyunun planı veya random ile gizli sayı ile ilgili hangi varsayımın yeniden düşünülmesi gerektiğini gösteren veridir. Görsel kullanırken kişisel bilgi ve özel arka plan ayrıntılarını paylaşma.

5. Sunum ve öz değerlendirme

“Proje: Sayı Tahmin Oyunu” projesini iki dakikada anlatacak şekilde hazırlan: sorun, çözüm yaklaşımı, günlük ders programını kontrol eden komut satırı aracı için en önemli test sonucu ve bir sonraki adım. “Tamamlandı” demek yerine hangi kısmın doğrulandığını ve hangi kısmın hâlâ geliştirilmesi gerektiğini açıkla.

Sık yapılan hatalar

int'e çevirmeyi unutmak

tahmin = input(...) yazarsan tahmin bir metin olur. "50" < gizli_sayi karşılaştırması hata verir. Çözüm: int(input(...)).

break koymayı unutmak

Doğru tahminde break yoksa döngü hiç bitmez; program doğru cevabı bulsa bile sormaya devam eder.

elif yerine iki ayrı if

Yukarıda gördüğümüz gibi, bağımsız if'ler beklenmedik sonuçlar üretebilir. Birbirini dışlayan durumlarda if / elif / else zinciri kullan.

Girintiyi bozmak

while ve if bloklarının içindeki satırlar 4 boşluk içeride olmalı. Girinti tutarsızsa Python IndentationError verir.

Güvenlik notu

Bu ders tamamen kendi bilgisayarında, kendi yazdığın kodu çalıştırmakla ilgilidir. İnternette bulduğun tanımadığın kodları çalıştırmadan önce bir yetişkine danış ve oyunlarında ad, adres, telefon gibi kişisel bilgileri isteme veya kaydetme.

Ders özeti

Kontrol soruları

  1. random.randint(1, 100) ifadesi hangi en küçük ve en büyük sayıları üretebilir?
  2. input ile alınan değeri neden int ile çeviriyoruz?
  3. Oyunda while True döngüsünü hangi komut sonlandırıyor?
  4. İkinci koşulda if yerine neden elif kullanmak daha doğru?
  5. Deneme hakkını 7 ile sınırlamak için döngü koşulunu nasıl yazarsın?

Cevaplar

  1. En küçük 1, en büyük 100'dür; her iki uç da dahildir.
  2. input metin döndürür; int ile çevirmezsek sayı karşılaştırması hata verir.
  3. Doğru tahmin geldiğinde else bloğundaki break komutu döngüyü bitirir.
  4. elif, önceki koşul yanlışsa kontrol edilir; böylece küçük, büyük ve doğru durumları tek karar zinciri olur. İki ayrı if yanlış eşleşmelere yol açabilir.
  5. while deneme < 7: biçiminde yazıp hak bittiğinde gizli sayıyı ekrana yazdırırsın.

Ek doğrulama görevi

“Proje: Sayı Tahmin Oyunu” için ikinci bir örnek oluştur: günlük ders programını kontrol eden komut satırı aracı. İlk çözümü aynen kopyalamak yerine Oyunun planı kavramının hangi bölümde, random ile gizli sayı kavramının hangi kararda kullanıldığını işaretle. Sonucu değerlendirmek için şu iki soruya yazılı cevap ver: “Beklediğim davranış neydi?” ve “Gerçekte hangi kanıtı gördüm?”

Ardından kontrol listesinden özellikle “Kod Python 3 sözdizimiyle çalışıyor mu?” ve “Aynı kod gereksiz tekrar olmadan yeniden kullanılabiliyor mu?” maddelerini kullan. İlk denemede fark bulamazsan bir sınır koşulu ekle; örneğin en küçük değer, en büyük değer, boş giriş, bağlantı kaybı veya yeniden başlatma durumu. Son notunda yaptığın tek değişikliği ve bu değişikliğin sonucu nasıl etkilediğini açıkla.

Kaynak ve doğrulama notu

“Proje: Sayı Tahmin Oyunu” dersi için doğrulama odağı Oyunun planı ile random ile gizli sayı 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

Proje: Ders Programı Kontrolü: Bir liste ve döngü kullanarak, günün derslerine göre çantada hangi kitapların olması gerektiğini kontrol eden bir program.

Quiz’i BaşlatPython Temelleri bölümüne dön
SORU HAVUZU

Bu dersi 10 soruyla pekiştir

Bu ders için 20 soruluk bir havuz hazırlandı. Her başlangıçta 10 soru ve seçenekler yeniden karıştırılır.