Python Sayı tahmin oyununda hata var mı?

senturkivanc

Hectopat
Katılım
3 Temmuz 2022
Mesajlar
14
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.

 
Son düzenleyen: Moderatör:
İç içe if-else blokları olmasın. Bunu switch - case - default ile yapmaya çalış.
 
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

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
 
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
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…