Çözüldü Python'da kodları fonksiyona çevirip kolay değiştirilebilir biçime çevirebilir miyim?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

MusTa52

Centipat
Katılım
20 Kasım 2022
Mesajlar
34
Daha fazla  
Cinsiyet
Erkek
Kod:
import random
kelimeler = ["armut", "ıspanak", "marul", "kayısı", "erik", "mandalina", "portakal", "karpuz", "biber", "patlican"]
secim = random.choice(kelimeler)
kalan_tahmin = 10
gizliHarfler = ["_"] * len(secim)

while kalan_tahmin > 0:
    print(' '.join(gizliHarfler))
    tahmin = input("Tahmininizi Giriniz : ").lower()
    if len(tahmin) != 1 :
      print("Tek bir harf giriniz!")
      continue
   
    if tahmin in secim :
       for x in range(len(secim)):
          if secim[x] == tahmin:
             gizliHarfler[x] = tahmin
       if "_" not in gizliHarfler:
          print("Tebrikler kelimeyi doğru tahmin ettiniz!")
          break
       
    else:
       kalan_tahmin -= 1
       print("Yanlış tahmin. " + str(kalan_tahmin) + " tahmin hakkınız kaldı!")
if kalan_tahmin == 0:
   print("Maalesef Kaybettiniz. Bilinemeyen kelime = " + secim)

Kod --> Python

Amacım her işlem için ayrı bir fonksiyon oluşturup değişiklikleri kolay yapmak ancak nasıl yapabileceğimi bilemedim.

Ekstra olarak ben kullanıcının sayı girmesini istemiyorum ancak onu bir türlü ekleyemedim. Sayı girdiğinde hakkı gitmeyecek ancak bir uyarı mesajı gözükecek. Onu da nasıl yapabilirim?
 
Son düzenleyen: Moderatör:
Çözüm
Ancak ben hala def fonksiyonunu kullanarak daha iyi bir hale getirebilirim yazdığım kodu anlayamadım.
İşlevleri fonksiyona böleceksiniz aşağıdaki gibi.


Python:
import random

def kelime_sec(kelimeler):
    return random.choice(kelimeler)

def tahmin_al():
    while True:
        tahmin = input("Tahmininizi Giriniz : ").lower()
        if len(tahmin) != 1 :
            print("Lütfen tek bir harf giriniz!")
        elif tahmin.isdigit():
            print("Lütfen sadece harf giriniz!")
        else:
            return tahmin

def tahmin_kontrol(kelime, gizliHarfler, tahmin, kalan_tahmin):
    if tahmin in kelime :
        for x in range(len(kelime)):
            if kelime[x] == tahmin:
                gizliHarfler[x] = tahmin
        if "_" not in gizliHarfler:
            print("Tebrikler kelimeyi doğru tahmin ettiniz!")
            return (True, gizliHarfler, kalan_tahmin)
    else:
        kalan_tahmin -= 1
        print("Yanlış tahmin. " + str(kalan_tahmin) + " tahmin hakkınız kaldı!")
        return (False, gizliHarfler, kalan_tahmin)
    return (None, gizliHarfler, kalan_tahmin)

def oyun_baslat(kelimeler):
    secim = kelime_sec(kelimeler)
    kalan_tahmin = 10
    gizliHarfler = ["_"] * len(secim)

    while kalan_tahmin > 0:
        print(' '.join(gizliHarfler))
        tahmin = tahmin_al()
        sonuc, gizliHarfler, kalan_tahmin = tahmin_kontrol(secim, gizliHarfler, tahmin, kalan_tahmin)
        if sonuc:
            break

    if kalan_tahmin == 0:
        print("Maalesef Kaybettiniz. Bilinemeyen kelime = " + secim)

oyun_baslat(["armut", "ıspanak", "marul", "kayısı", "erik", "mandalina", "portakal", "karpuz", "biber", "patlican"])
Ancak nasıl yapabileceğimi bilemedim.
Her işlemi alıp bir fonksiyona koyacaksın. Daha sonra o işi yapması için fonksiyonu çağıracaksın.

Ekstra olarak ben kullanıcının sayı girmesini istemiyorum ancak onu bir türlü ekleyemedim. Sayı girdiğinde hakkı gitmeyecek ancak bir uyarı mesajı gözükecek. Onu da nasıl yapabilirim?
Ekleyemedin mi kaldıramadın mı? Programdan özellik silmeyecek misin? Sil gitsin o değişkeni kullanan ne varsa.

Uyarı mesajı için:
Python:
def isValid(girdi):
    # Girdiyi kontrol et. Burada örnek olarak sadece sayı içermesi istendi.
    # Ayrıca 0-10 arası bir sayı olması da istendi.
    try:
        girdi = int(girdi)
    except ValueError:
        print("Hata: Yanlış veri tipi. Yalnızca sayı kullanın.")
        return 0
    if girdi < 0 or girdi > 10:
        print("Hata: Geçersiz sayı aralığı. Geçerli değer 0 dan 10 a kadar bir sayı.")
        return 0
    return 1
girdi = None
while not isValid(girdi):
    girdi = input("Bir değer girin: ")
 
Her işlemi alıp bir fonksiyona koyacaksın. Daha sonra o işi yapması için fonksiyonu çağıracaksın.

Ekleyemedin mi kaldıramadın mı? Programdan özellik silmeyecek misin? Sil gitsin o değişkeni kullanan ne varsa.

Uyarı mesajı için:
Python:
def isValid(girdi):
 # Girdiyi kontrol et. Burada örnek olarak sadece sayı içermesi istendi.
 # Ayrıca 0-10 arası bir sayı olması da istendi.
 try:
 girdi = int(girdi)
 except ValueError:
 print("Hata: Yanlış veri tipi. Yalnızca sayı kullanın.")
 return 0
 if girdi < 0 or girdi > 10:
 print("Hata: Geçersiz sayı aralığı. Geçerli değer 0 dan 10 a kadar bir sayı.")
 return 0
 return 1
girdi = None.
while not isValid(girdi):
 girdi = input("Bir değer girin: ")

Ben daha yeni öğreniyorum Python'u ve galiba daha öğrenmediğim kodları kullanmıssınız, başka derslerde mi öğrenirim bilmiyorum en son BTK akademide fonksiyonlar dersini izlemiştim ancak bilmediğim komutları not alıyorum araştıracağım.

Ayrıca diğer yaşadığım hata için kod yazmaya çalıştım ancak bu sefer harf yazdığımda yanlış oldu ve başka bir hata aldım. Harf yazdığımda hakkım azalmadı ve x kadar hakkınız kaldı demedi bana.

Birde sizden yazdığım bir tane işlemden fonksiyon oluşturup ve çağırıp bir örnek yazar mısınız nasıl yapıldığını anlamam için.
 
Ben daha yeni öğreniyorum Python'u ve galiba daha öğrenmediğim kodları kullanmıssınız, başka derslerde mi öğrenirim bilmiyorum en son BTK akademide fonksiyonlar dersini izlemiştim ancak bilmediğim komutları not alıyorum araştıracağım.

Ayrıca diğer yaşadığım hata için kod yazmaya çalıştım ancak bu sefer harf yazdığımda yanlış oldu ve başka bir hata aldım. Harf yazdığımda hakkım azalmadı ve x kadar hakkınız kaldı demedi bana.
Neyi görmediniz verdiğim kodda? Açıklayayım kodu:
Geçerliliği kontrol eden bir fonkisyon yazdım.
Bu fonksiyon içerisinde sayı mı ve 0-10 arasında mı diye kontrol ettim.
Eğer her şey güzelse 1 döndüm. Olumlu demek.
girdiyi önceden boş ayarladım.
While, süresince demek. Bu durumda da orada Geçerli olmadığı süresince yazıyor. İçerisinde girdiye giriş alıyorum ve tekrar kontrol ediliyor. Geçerli ise döngü sonlanıyor.

Anlamadığınız durumları benim de anlayabileceğim şekilde detaylarıyla  kodlarıyla anlatırsanız yardımcı olmak isterim.
 
Son düzenleme:
Neyi görmediniz verdiğim kodda? Açıklayayım kodu:
Geçerliliği kontrol eden bir fonkisyon yazdım.
Bu fonksiyon içerisinde sayı mı ve 0-10 arasında mı diye kontrol ettim.
Eğer her şey güzelse 1 döndüm. Olumlu demek.
Girdiyi önceden boş ayarladım.
While, süresince demek. Bu durumda da orada Geçerli olmadığı süresince yazıyor. İçerisinde girdiye giriş alıyorum ve tekrar kontrol ediliyor. Geçerli ise döngü sonlanıyor.

Anlamadığınız durumları benim de anlayabileceğim şekilde detaylarıyla  kodlarıyla anlatırsanız yardımcı olmak isterim.
Kod:
import random

kelimeler = ["armut", "ıspanak", "marul", "kayısı", "erik", "mandalina", "portakal", "karpuz", "biber", "patlican"]
secim = random.choice(kelimeler)
kalan_tahmin = 10
gizliHarfler = ["_"] * len(secim)


while kalan_tahmin > 0:
    print(' '.join(gizliHarfler))

    tahmin = input("Tahmininizi Giriniz : ").lower()

    if len(tahmin) != 1 :
      print("Lütfen tek bir harf giriniz!")
      continue

    if tahmin.isdigit():
       print("Lütfen sadece harf giriniz!")
       continue

    if tahmin in secim :
       for x in range(len(secim)):
          if secim[x] == tahmin:
             gizliHarfler[x] = tahmin
       if "_" not in gizliHarfler:
          print("Tebrikler kelimeyi doğru tahmin ettiniz!")
          break
          
    else:
       kalan_tahmin -= 1
       print("Yanlış tahmin. " + str(kalan_tahmin) + " tahmin hakkınız kaldı!")

if kalan_tahmin == 0:
   print("Maalesef Kaybettiniz. Bilinemeyen kelime = " + secim)

Yanlış yazıpta hata aldığım kısım - if tahmin.isdigit() olan kısımdı , biraz daha deneyip düzelttim belki sizin kafanızdaki gibi bir cevap vermemiş olabilir onun için özür dilerim.
Ancak ben hala def fonksiyonunu kullanarak daha iyi bir hale getirebilirim yazdığım kodu anlayamadım.
 
Ancak ben hala def fonksiyonunu kullanarak daha iyi bir hale getirebilirim yazdığım kodu anlayamadım.
İşlevleri fonksiyona böleceksiniz aşağıdaki gibi.


Python:
import random

def kelime_sec(kelimeler):
    return random.choice(kelimeler)

def tahmin_al():
    while True:
        tahmin = input("Tahmininizi Giriniz : ").lower()
        if len(tahmin) != 1 :
            print("Lütfen tek bir harf giriniz!")
        elif tahmin.isdigit():
            print("Lütfen sadece harf giriniz!")
        else:
            return tahmin

def tahmin_kontrol(kelime, gizliHarfler, tahmin, kalan_tahmin):
    if tahmin in kelime :
        for x in range(len(kelime)):
            if kelime[x] == tahmin:
                gizliHarfler[x] = tahmin
        if "_" not in gizliHarfler:
            print("Tebrikler kelimeyi doğru tahmin ettiniz!")
            return (True, gizliHarfler, kalan_tahmin)
    else:
        kalan_tahmin -= 1
        print("Yanlış tahmin. " + str(kalan_tahmin) + " tahmin hakkınız kaldı!")
        return (False, gizliHarfler, kalan_tahmin)
    return (None, gizliHarfler, kalan_tahmin)

def oyun_baslat(kelimeler):
    secim = kelime_sec(kelimeler)
    kalan_tahmin = 10
    gizliHarfler = ["_"] * len(secim)

    while kalan_tahmin > 0:
        print(' '.join(gizliHarfler))
        tahmin = tahmin_al()
        sonuc, gizliHarfler, kalan_tahmin = tahmin_kontrol(secim, gizliHarfler, tahmin, kalan_tahmin)
        if sonuc:
            break

    if kalan_tahmin == 0:
        print("Maalesef Kaybettiniz. Bilinemeyen kelime = " + secim)

oyun_baslat(["armut", "ıspanak", "marul", "kayısı", "erik", "mandalina", "portakal", "karpuz", "biber", "patlican"])
 
Çözüm
İşlevleri fonksiyona böleceksiniz aşağıdaki gibi.


Python:
import random

def kelime_sec(kelimeler):
    return random.choice(kelimeler)

def tahmin_al():
    while True:
        tahmin = input("Tahmininizi Giriniz : ").lower()
        if len(tahmin) != 1 :
            print("Lütfen tek bir harf giriniz!")
        elif tahmin.isdigit():
            print("Lütfen sadece harf giriniz!")
        else:
            return tahmin

def tahmin_kontrol(kelime, gizliHarfler, tahmin, kalan_tahmin):
    if tahmin in kelime :
        for x in range(len(kelime)):
            if kelime[x] == tahmin:
                gizliHarfler[x] = tahmin
        if "_" not in gizliHarfler:
            print("Tebrikler kelimeyi doğru tahmin ettiniz!")
            return (True, gizliHarfler, kalan_tahmin)
    else:
        kalan_tahmin -= 1
        print("Yanlış tahmin. " + str(kalan_tahmin) + " tahmin hakkınız kaldı!")
        return (False, gizliHarfler, kalan_tahmin)
    return (None, gizliHarfler, kalan_tahmin)

def oyun_baslat(kelimeler):
    secim = kelime_sec(kelimeler)
    kalan_tahmin = 10
    gizliHarfler = ["_"] * len(secim)

    while kalan_tahmin > 0:
        print(' '.join(gizliHarfler))
        tahmin = tahmin_al()
        sonuc, gizliHarfler, kalan_tahmin = tahmin_kontrol(secim, gizliHarfler, tahmin, kalan_tahmin)
        if sonuc:
            break

    if kalan_tahmin == 0:
        print("Maalesef Kaybettiniz. Bilinemeyen kelime = " + secim)

oyun_baslat(["armut", "ıspanak", "marul", "kayısı", "erik", "mandalina", "portakal", "karpuz", "biber", "patlican"])
Detaylı anlatarak yardımcı olduğunuz için teşekkür ederim.
 

Geri
Yukarı