İçeriğe geç

Menü

Berk Akademi
Yorumlar Google yorumları Özel Ders Başvuru Ücretsiz ön görüşme Ana Sayfa

Python ile Sayı Tahmin Oyunu Nasıl Yapılır? random ve while Döngüsü

python-sayi-tahmin-oyunu-random-while
Bu yazıda neler var?
  1. Sabit bir sayıyla ilk tahmini al
  2. random ile tutulacak sayıyı belirle
  3. while döngüsüyle tahminleri tekrarla
  4. Deneme sayacı ve girdi kontrolü ekle
  5. Sık yapılan hataları nasıl düzeltebilirsin?
  6. Sık Sorulan Sorular

Python ile sayı tahmin oyunu yapmak için bilgisayarın bir sayı seçmesini, kullanıcıdan tahmin almasını ve bu iki sayıyı karşılaştırmasını sağlayabilirsin. Sayıyı seçmek için random modülünü, tahminleri tekrarlamak için de while döngüsünü kullanabilirsin. Önce tek tahmin alan basit bir program kurarak başlayalım.

Sabit bir sayıyla ilk tahmini al

İlk aşamada tutulacak sayıyı kendin belirleyip kullanıcıdan bir tahmin alabilirsin. Değişken, programda bir değere isim vererek o değeri daha sonra kullanmanı sağlar.

Aşağıdaki programda tutulan_sayi değişkeni 42 değerini saklar. input() kullanıcıdan girdi alır; int() ise girilen tam sayı metnini karşılaştırmada kullanılacak bir tam sayıya dönüştürür.

tutulan_sayi = 42
tahmin = int(input("Bir sayı tahmin et: "))

if tahmin == tutulan_sayi:
    print("Doğru tahmin!")
else:
    print("Tahminin doğru değil.")

Koşul, bir ifadenin doğru veya yanlış olmasına göre programın hangi işlemi yapacağını belirler. Burada if satırındaki == işareti iki değerin eşit olup olmadığını kontrol eder; eşit değillerse else içindeki mesaj gösterilir.

Örneğin kullanıcı 42 girdiğinde ekran şöyle görünür:

Bir sayı tahmin et: 42
Doğru tahmin!

Bu sürüm yanlış tahminden sonra yeniden tahmin istemez. Ayrıca geçersiz girdi henüz ele alınmadığından, tam sayıya dönüştürülemeyen bir metin girilirse program hata verir.

random ile tutulacak sayıyı belirle

random ile tutulacak sayıyı belirle

Tutulacak sayıyı programın seçmesi için random modülünü içe aktarabilir ve randint() işlevini kullanabilirsin. Aşağıdaki sürüm, önceki program gibi yalnızca bir tahmin alır:

import random

tutulan_sayi = random.randint(1, 100)
tahmin = int(input("1 ile 100 arasında bir sayı tahmin et: "))

if tahmin == tutulan_sayi:
    print("Doğru tahmin!")
else:
    print("Tahminin doğru değil.")

print("Tutulan sayı:", tutulan_sayi)

import random satırı modüldeki işlevleri kullanıma açar. random.randint(1, 100) çağrısı, 1 ve 100 de dâhil olmak üzere bu aralıktan bir tam sayı seçer.

Örneğin program 73 sayısını seçtiğinde ve kullanıcı 50 girdiğinde ekran şöyle görünür:

1 ile 100 arasında bir sayı tahmin et: 50
Tahminin doğru değil.
Tutulan sayı: 73

Son satır, seçilen sayıyı tahminden sonra gösterdiği için sonucu kontrol etmene yardımcı olur. Program her çalıştığında farklı bir sayı seçilebilir; aynı sayının yeniden seçilmesi de mümkündür.

random bu oyun için uygundur; parola veya güvenlik belirteci gibi güvenlik amaçlı rastgele değerler üretirken ise secrets modülünü kullanmalısın.

while döngüsüyle tahminleri tekrarla

while döngüsüyle tahminleri tekrarla

Döngü, belirli bir koşul sağlandığı sürece aynı işlemleri tekrar çalıştırmanı sağlar. Sayı tahmin oyununda while döngüsüyle kullanıcı doğru cevabı bulana kadar yeni tahminler isteyebilirsin.

Aşağıdaki program, tutulacak sayıyı döngü başlamadan önce bir kez seçer. Her tahminden sonra if, elif ve else koşulları sayıları karşılaştırır; koşul, bir işlemin hangi durumda yapılacağını belirleyen ifadedir.

import random

tutulan_sayi = random.randint(1, 10)

while True:
    tahmin = int(input("1 ile 10 arasında bir sayı tahmin et: "))

    if tahmin < tutulan_sayi:
        print("Daha büyük bir sayı dene.")
    elif tahmin > tutulan_sayi:
        print("Daha küçük bir sayı dene.")
    else:
        print("Doğru tahmin!")
        break

while True döngüyü devam ettirir. Tahmin doğru olduğunda else içindeki break komutu döngüden çıkar ve program sona erer.

Örneğin rastgele seçilen sayı 7 olduğunda ekran çıktısı şöyle olabilir:

1 ile 10 arasında bir sayı tahmin et: 4
Daha büyük bir sayı dene.
1 ile 10 arasında bir sayı tahmin et: 9
Daha küçük bir sayı dene.
1 ile 10 arasında bir sayı tahmin et: 7
Doğru tahmin!

Bu aşamada kullanıcı harf veya boş bir giriş yaptığında int() dönüşümü hata verir. Sonraki örnekte bu durumu ele alıp oyunun devam etmesini sağlayacağız.

Deneme sayacı ve girdi kontrolü ekle

Deneme sayacı, doğru sayıyı bulana kadar kaç geçerli tahmin yaptığını gösterir. Girdi kontrolü için de try ve except ValueError kullanarak tam sayıya dönüştürülemeyen girişlerde kullanıcıdan yeniden tahmin isteyebilirsin.

import random

tutulan_sayi = random.randint(1, 10)
deneme_sayisi = 0

while True:
    girdi = input("1 ile 10 arasında bir sayı tahmin et: ")

    try:
        tahmin = int(girdi)
    except ValueError:
        print("Lütfen geçerli bir tam sayı gir.")
        continue

    deneme_sayisi += 1

    if tahmin < tutulan_sayi:
        print("Daha büyük bir sayı dene.")
    elif tahmin > tutulan_sayi:
        print("Daha küçük bir sayı dene.")
    else:
        print("Doğru tahmin!")
        print("Toplam deneme:", deneme_sayisi)
        break

try içindeki dönüşüm başarısız olursa except bölümündeki mesaj gösterilir. Ardından continue, döngünün bir sonraki turuna geçerek yeniden girdi ister. Sayaç artışı bu bölümden sonra geldiği için harf ve boş girişler deneme sayısına eklenmez.

Tutulan sayı 7 olduğunda, geçersiz girişleri de içeren bir oyun şöyle görünebilir:

1 ile 10 arasında bir sayı tahmin et: merhaba
Lütfen geçerli bir tam sayı gir.
1 ile 10 arasında bir sayı tahmin et:
Lütfen geçerli bir tam sayı gir.
1 ile 10 arasında bir sayı tahmin et: 4
Daha büyük bir sayı dene.
1 ile 10 arasında bir sayı tahmin et: 9
Daha küçük bir sayı dene.
1 ile 10 arasında bir sayı tahmin et: 7
Doğru tahmin!
Toplam deneme: 3

Bu örnekte sayaç yalnızca tam sayıya dönüşen 4, 9 ve 7 girişlerini sayar. Programın bu hâli, belirtilen aralığın dışındaki tam sayıları da kabul eder ve geçerli deneme olarak sayar.

Sık yapılan hataları nasıl düzeltebilirsin?

Sayı tahmin oyunu beklediğin gibi çalışmıyorsa önce giriş türünü, hedef sayının ne zaman üretildiğini ve sayı aralığını kontrol et. Bu üç nokta, programın mantığını doğrudan etkiler.

  1. input() sonucunu doğrudan karşılaştırmak: input() kullanıcının yazdığı değeri metin olarak döndürür. Bu nedenle tahmini karşılaştırmadan önce int() ile tam sayıya dönüştürmen gerekir. Dönüşümü yapmadan bir tam sayıyla karşılaştırma yapmak, tür uyuşmazlığına veya beklenmeyen sonuçlara yol açabilir. Python’un resmî belgeleri de input() sonucunun metin olduğunu ve int() işlevinin bir metinden tam sayı oluşturabildiğini belirtir.
  2. Rastgele sayıyı döngünün içinde üretmek: Hedef sayı her tahminden önce yeniden oluşturulursa kullanıcı aynı sayıyı bulmaya çalışmaz; oyun her turda yeni bir hedef belirler. Son programda rastgele sayı döngü başlamadan seçildiği için bütün tahminler aynı hedefle karşılaştırılır.
  3. randint() üst sınırını unutmak: random.randint(a, b) hem a hem de b değerini kapsar. Örneğin randint(1, 10) sonucunda 10 da üretilebilir. Oyunda kullanılacak aralığı belirlerken bu davranışı hesaba katmalısın.

Teşhis sırasında şu sırayı izlemek işe yarar: Kullanıcı girdisi önce sayıya çevriliyor mu, hedef sayı döngü dışında mı oluşturuluyor ve randint() için seçilen üst sınır oyunda izin verilen son sayıyla aynı mı? Bu soruların yanıtı doğruysa, karşılaştırma koşullarını ve deneme sayacının hangi noktada artırıldığını inceleyebilirsin.

Sık Sorulan Sorular

Sayı tahmin oyununda geçersiz girişler deneme olarak sayılır mı?

Geçersiz girişlerin deneme sayılıp sayılmaması sayaç tasarımına bağlıdır. Sayaç int() dönüşümünden sonra artırılırsa yalnızca sayıya çevrilebilen tahminler sayılır; giriş alınır alınmaz artırılırsa harf veya boş giriş gibi değerler de denemeye eklenir.

Python sayı tahmin oyununda rastgele sayı neden döngüden önce seçilir?

Rastgele sayı döngüden önce seçilir çünkü oyuncunun bütün tahminleri aynı hedefle karşılaştırılmalıdır. Sayı döngünün içinde üretilirse hedef her turda değişir ve kullanıcı sabit bir sayıyı bulmaya çalışamaz.

Bu kontrolleri uyguladığında sayı tahmin oyununun giriş, rastgele sayı, döngü ve karşılaştırma adımlarını daha kolay takip edebilirsin.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara