Python Sayı tahmin oyununda hata var mı?

senturkivanc

Hectopat
Katılım
3 Temmuz 2022
Mesajlar
13
Daha fazla  
Cinsiyet
Erkek
Görselde de görüldüğü üzere küçük bir sayı tahmini oyunu yapmaya çalıştım. İstediğim her şeyi yaptım fakat biliyorum ki elbette yaptığım hatalar, gereksiz yazdığım bir şeyler veya ek olarak yapabileceğim şeyler vs. vardır. Tavsiyeleriniz neler? Gereksiz yazdığım bir yer var mı? Ek olarak ne yazarak bu oyunu daha da büyütebilirim? Yardımlarınızı bekliyor, teşekkür ediyorum.

resim_2023-10-21_175418559.png
 
Son düzenleyen: Moderatör:
Resim şeklinde paylaşmak yerine kod bloğu şeklinde paylaşırsanız daha güzel olur.
İlk defa deneyeceğim böyle yazmayı inşallah olur :D

Python:
import random


sayılar = ('1', '2', '3', '4', '5', '6', '7', '8', '9', '0')

print("| 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 0 |")

ana_sayı = random.choice(sayılar)
print(ana_sayı)
tahmin = input('Bir sayıyı seçtim. 3 hakkın var. Doğru tahmin edersen ödül var: ')
while True:
    if tahmin == ana_sayı:
        print("Tebrikler, doğru bildin. Ödülün; baş.")
        break
    else:
        print("Yanlış. 2 hakkın kaldı.")
        tahmin = input('Unutma, doğru tahmin edersen sana bir ödülüm olacak: ')
        if tahmin == ana_sayı:
            print('Tebrikler, ikinci hakkında olsa da sonuç olarak bildin. Ödülün; baş.')
            break
        else:
            print('Bu da yanlış. Tek hakkın kaldı.')
            tahmin = input('Son hakkın. Eğer bilirsen ödül var. Hakkını iyi kullan: ')
            if tahmin == ana_sayı:
                print('Tebrikler, son hakkında bildin. Ödülün; baş.')
                break
            else:
                print('Son hakkında da bilemedin. Doğru cevap', ana_sayı, 'idi.')
                break
 
Görselde de görüldüğü üzere küçük bir sayı tahmini oyunu yapmaya çalıştım. İstediğim her şeyi yaptım fakat biliyorum ki elbette yaptığım hatalar, gereksiz yazdığım bir şeyler veya ek olarak yapabileceğim şeyler vs. vardır. Tavsiyeleriniz neler? Gereksiz yazdığım bir yer var mı? Ek olarak ne yazarak bu oyunu daha da büyütebilirim? Yardımlarınızı bekliyor, teşekkür ediyorum.

Eki Görüntüle 1985067
Her hak için ayrı bir if açmana gerek yoktu. Çok daha kısa ve kolay bir yol ile yapabilirdin. Düşün bakalım daha kısa nasıl yapacağını. :)
 
Azıcık sert konuşabilirim, üslubumu hoş gör.
Gereksiz çok fazla yer.

while True için çok yorum yapmayacağım ama daha uygun çözümler yapılır. Asıl sıkıntı iç içe if else'ler. İkincisi hakları ayrı ayrı if else'le kontrol etmen. Kullanıcının 50 hakkı olsa 50'sini de böyle mi yazacaksın? Bildiği her soru için +3 hak verseydin? Amele işi olurdu değil mi 50 hakkın 50'sini de if -> win else -> if -> win -> else... şeklinde yapmak.

Yine iç içe yapmanın gerektiği bir nokta olduğunda da guard clause patternine bak. Burada gerekmiyor ama. Biraz da yapacağımız işin üstüne düşünmek de lazım. Programlama sıradan insan kafasıyla yapacağın bir şey değil. Neyi nasıl daha anlaşılır yaparıma da odaklanmak lazım.
 
Nested if-else yapisi kullanmamaya calis.

Dogru type kullanmaya calis. Sayi ise, string degil numerik deger kullan. Bugun olmasa da ileride numerik manipulasyon yapman gerektiginde sana kolaylik saglar bu durum.

while True kullanmamaya calis, while <condition> seklinde implementasyon yap.

---

Sayi araligini kullanicidan alabilirsin.
Kac tahmin hakki oldugunu kullanicidan alabilirsin.
Bilemedigi zaman dogru cevabin kac oldugunu soylersen kullanici daha mutlu olur :)
 
Hatalarını söylemişler zaten. Biraz daha gelişmiş versiyonunu yaptım inceleyebilirsin.
Python:
import random

hak = int(input("Toplam tahmin sayısı: "))
puan = 0
while True:
    sayi = random.choice(list(range(0, 10)))
    while hak > 0:
        tahmin = int(input("Sayıyı tahmin edin: "))
        if (tahmin == sayi):
            hak += 2
            puan += 1
            print(f"Doğru bildin, 3 hak eklendi. Toplam {hak}.")
            break
        else:
            hak -= 1
            print(f"Bilemedin, {hak} hakkın kaldı.")
    if (hak == 0):
        print(f"Sayı {sayi} idi. {puan} puan kazandın.")
        break
 

Technopat Haberler

Geri
Yukarı