Adam Asmaca Oyunu

Python’a yeni başladım sayılır. Elimden geldiğince bir adam asmaca oyunu yapmaya çalıştım. Kodda iyileştirilebilecek bir yer varsa lütfen belirtin. Yaptığım başka oyunları/uygulamaları da burada paylaşmayı düşünüyorum.

import random
kelimeler = ["taksi","araba","tanker","imza","kobay"]
can = 5
d_list = []
durum = ""
puan = 0
secilen_kelime = ""
tahmin = ""
ipucu = 3
kontrol_k = ""
def harf_tarama():
    global d_list,secilen_kelime,tahmin,d_list
    for x,y in enumerate(secilen_kelime):
        if y == tahmin:
            d_list[x] = tahmin
def kontrol():
    global d_list,kontrol_k
    kontrol_k = ""
    for i in d_list:
        kontrol_k += i
    if kontrol_k == secilen_kelime:
        return False
    else:
        return True
while can > 0:
    ipucu = 3
    sayi = random.randint(0,len(kelimeler) - 1)
    secilen_kelime = kelimeler[sayi]
    durum = len(secilen_kelime)* "-"
    d_list = list(durum)
    print(len(secilen_kelime),"harfli bir kelime arıyorsunuz:\n",durum)
    tahmin = input("Tahmininizi giriniz:")
    if bool(tahmin) != True:
        exit()
    while bool(tahmin) == True and can > 0 and kontrol and ipucu > 0:
        if kontrol_k == secilen_kelime:
            puan += 30
            print("Doğru harfler! Puanınız:",puan)
            break
        if tahmin == secilen_kelime:
            puan += 50
            print("Doğru tahmin! Puanınız:",puan)
            break
        if len(tahmin) == 1 and kontrol():
            harf_tarama()
            print(d_list)
            ipucu -= 1
            print("Kalan ipucu:",ipucu)
            tahmin = input("Tahmininizi giriniz:")
        else:
            puan -= 10
            can -= 1
            print("Yanlış tahmin! Doğrusu:",secilen_kelime,"\nPuanınız:",puan,"Kalan can:",can)
            break
print("Final skoru:",puan)

Selamlar,

Oncelikle kodu bir main fonksiyonu altina alabilirsiniz. Modul seviyesi, kod yazmak icin uygun bir yer degil.

Ikinci olarak global degiskenlerden kurtulunabilir. Veri akisi icin kullanilan degiskenler fonksiyonlara parametre olarak gidip return value olarak donmelidir. Bunu yapmak, fonksiyon veya class gibi parcalara ayrilmasi gereken kodun kendini belli etmesini de saglar.

Ayar icin kullanilan ve degismeyen degerler constant’a cevrilebilir (ve global olarak kalmalidir). IPUCU_SAYISI = 3

if !tahmin:

d_list, kontrol_k gibi degiskenlere ne yaptiklarini anlatan isimler verilebilir. degistirilmis_kelimeler_listesi veya kontrol_kelimesi gibi.

Isimsiz 30, 50 gibi sihirli sayilar KAZANINCA_VERILEN_PUAN gibi constant’lara cevrilebilir.

while loop’unu bitirebilen cok fazla durum var. Hatta sadece len(tahmin) == 1 and kontrol() durumunda loop ediyor sanki. Belki daha okunakli bir sekil verilebilir.

Lutfen cekinmeyin.

Kolay gelsin.

2 Beğeni

Yorumunuz için teşekkürler.