Nasıl Sınıf yada Fonksiyon haline getirebilirim?

Arkadaşlar böyle bir program yazmaya çalıştım yalnız tüm sistemi bir döngü haline getirme işini beceremedim. Böyle şurayı şöyle yapsan daha iyi olurdu diyeceğiniz yerlerde varsa yardımcı olun lütfen :slight_smile: Teşekkürler.

import time

def seçenekler(seçenek):
    seçenekler = ["\nA) 2 \nB) 4 \nC) 6 \nD) 8",
                  "\nA) Aşk \nB) Sevgi \nC) Dostluk \nD) Barış",
                  "\nA) Kaç gün kaldı? \nB) Kaçta gelirsin? \nC) Kaç gibi biter? \nD) Kaça gidiyorsun?",
                  "\nA) Direk \nB) Kemer \nC) Delik \nD) Kemik",
                  "\nA) Dirayetli \nB) Temkinli \nC) Görgülü \nD) Sıhhatli",
                  "\nA) Darbuka \nB) Kanun \nC) Keman \nD) Klarnet",
                  "\nA) Üç vakte kadar \nB) Sonsuza kadar \nC) Kırk gün kırk gece \nD) Ay sonuna kadar",
                  "\nA) Berber \nB) Hallaç \nC) Nalbant \nD) Tellal",
                  "\nA) Lokum \nB) Şurup \nC) Kaymak \nD) Şeker",
                  "\nA) 6 \nB) 9 \nC) 12 \nD) 15"]
    if seçenek == 1:
        print(seçenekler[0])
    else:
        print(seçenekler[seçenek - 1])


print("Her soruyu cevaplamak için 5 saniyeniz vardır.")

sorular = """1. Garsonun yazdığı adisyonda, karşısında iki çarpı işareti olan üründen kaç adet sipariş etmişsinizdir?
2. Ormanlık alanların girişinde görebileceğimiz ünlü söze göre, ormanı bekçiden ziyade hangisinin koruduğunu öğreniriz?
3. Hangi sorunun muhatabı genellikle çocuklardır?
4. Çok üzülen birinin, halk arasında, burnunun nesinin sızladığı söylenir?
5. "Becerikli, zeki, güçlü" anlamında kullanılan kelime hangisidir?
6. Hangi enstrüman hem dizlerin arasına hem koltuk altına konularak çalınır?
7. Masal sonlarında, karakterlerin ne kadarlık süre boyunca mutlu yaşadıklarını öğreniriz?
8. Masalların klişe giriş cümlesinde develer ne iş yapar?
9. Yemekten sonra "Eline sağlık" diyen kişiye verilen cevapta, afiyet ile birlikte hangisi olsun denilir?
10. Bir trilyonda kaç adet sıfır vardır?"""
sorular = sorular.split("\n")

değer = 0
while değer < 10:
    time.sleep(5)
    # Soru 1
    print(sorular[0])
    seçenekler(1)
    cevap1 = input("Cevabınız: ").lower()
    değer += 1

    # Soru 2
    print(sorular[1])
    seçenekler(2)
    cevap2 = input("Cevabınız: ").lower()
    değer += 1

    # Soru 3
    print(sorular[2])
    seçenekler(3)
    cevap3 = input("Cevabınız: ").lower()
    değer += 1

    # Soru 4
    print(sorular[3])
    seçenekler(4)
    cevap4 = input("Cevabınız: ").lower()
    değer += 1

    # Soru 5
    print(sorular[4])
    seçenekler(5)
    cevap5 = input("Cevabınız: ").lower()
    değer += 1

    # Soru 6
    print(sorular[5])
    seçenekler(6)
    cevap6 = input("Cevabınız: ").lower()
    değer += 1

    # Soru 7
    print(sorular[6])
    seçenekler(7)
    cevap7 = input("Cevabınız: ").lower()
    değer += 1

    # Soru 8
    print(sorular[7])
    seçenekler(8)
    cevap8 = input("Cevabınız: ").lower()
    değer += 1

    # Soru 9
    print(sorular[8])
    seçenekler(9)
    cevap9 = input("Cevabınız: ").lower()
    değer += 1

    # Soru 10
    print(sorular[9])
    seçenekler(10)
    cevap10 = input("Cevabınız: ").lower()
    değer += 1
    puan = 0
    if cevap1 == "b" or cevap == "4":
        puan += 1
    if cevap2 == "b" or cevap2 == "sevgi":
        puan += 1
    if cevap3 == "d" or cevap3 == "kaça gidiyorsun?":
        puan += 1
    if cevap4 == "a" or cevap4 == "direk":
        puan += 1
    if cevap5 == "a" or cevap5 == "dirayetli":
        puan += 1
    if cevap6 == "a" or cevap6 == "darbuka":
        puan += 1
    if cevap7 == "b" or cevap7 == "sonsuza kadar":
        puan += 1
    if cevap8 == "d" or cevap8 == "tellal":
        puan += 1
    if cevap9 == "d" or cevap9 == "şeker":
        puan += 1
    if cevap10 == "c" or cevap10 == "12":
        puan += 1
print("Toplam puan", puan)

Su fonksiyonu yaz:

def soru_sor_ve_puan_dondur(soru:str, dogru_cevaplar:[str]) -> int:
    ...

Verilen cevap dogru ise +1, degilse 0 dondursun.

Sorularla secenekleri ayni degiskende tut. list olabilir, tuple olabilir, dict olabilir… Muhtemelen bunlardan birkac tanesinin icice gecmis hali olacak. Orn:

[(soru, secenek), (soru, secenek), ...] olabilir,
{ 'sorular': [soru, soru], 'secenekler': [secenek, secenek] } olabilir…

Gerisine sonra bakariz.

1 Like

Çok teşekkür ederim. Sayenizde kafamda bişeyler oluştu ve devamını getirdim.
Bu hale geldi. Farklı şekilde daha kolay olurdu diyebileceğiniz bir yer olursa lütfen aydınlatın…

soru_1 = "1. Garsonun yazdığı adisyonda, karşısında iki çarpı işareti olan üründen kaç adet sipariş etmişsinizdir?"
soru_2 = "2. Ormanlık alanların girişinde görebileceğimiz ünlü söze göre, ormanı bekçiden ziyade hangisinin koruduğunu öğreniriz?"
soru_3 = "3. Hangi sorunun muhatabı genellikle çocuklardır?"
soru_4 = "4. Çok üzülen birinin, halk arasında, burnunun nesinin sızladığı söylenir?"
soru_5 = "5. Becerikli, zeki, güçlü anlamında kullanılan kelime hangisidir?"
soru_6 = "6. Hangi enstrüman hem dizlerin arasına hem koltuk altına konularak çalınır?"
soru_7 = "7. Masal sonlarında, karakterlerin ne kadarlık süre boyunca mutlu yaşadıklarını öğreniriz?"
soru_8 = "8. Masalların klişe giriş cümlesinde develer ne iş yapar?"
soru_9 = "9. Yemekten sonra 'Eline sağlık' diyen kişiye verilen cevapta, afiyet ile birlikte hangisi olsun denilir?"
soru_10 = "10. Bir trilyonda kaç adet sıfır vardır?"

cevap_1, cevap_2, cevap_3, cevap_4, cevap_5, cevap_6, cevap_7, cevap_8, cevap_9, cevap_10 = "b", "b", "d", "a", "a", "a", "b", "d", "d", "c"

seçenek_1 = "A) 2 \nB) 4 \nC) 6 \nD) 8"
seçenek_2 = "A) Aşk \nB) Sevgi \nC) Dostluk \nD) Barış"
seçenek_3 = "A) Kaç gün kaldı? \nB) Kaçta gelirsin? \nC) Kaç gibi biter? \nD) Kaça gidiyorsun?"
seçenek_4 = "A) Direk \nB) Kemer \nC) Delik \nD) Kemik"
seçenek_5 = "A) Dirayetli \nB) Temkinli \nC) Görgülü \nD) Sıhhatli"
seçenek_6 = "A) Darbuka \nB) Kanun \nC) Keman \nD) Klarnet"
seçenek_7 = "A) Üç vakte kadar \nB) Sonsuza kadar \nC) Kırk gün kırk gece \nD) Ay sonuna kadar"
seçenek_8 = "A) Berber \nB) Hallaç \nC) Nalbant \nD) Tellal"
seçenek_9 = "A) Lokum \nB) Şurup \nC) Kaymak \nD) Şeker"
seçenek_10 = "A) 6 \nB) 9 \nC) 12 \nD) 15"

soru_ve_cevap = [(soru_1, cevap_1, seçenek_1), (soru_2, cevap_2, seçenek_2),
                 (soru_3, cevap_3, seçenek_3), (soru_4, cevap_4, seçenek_4),
                 (soru_5, cevap_5, seçenek_5), (soru_6, cevap_6, seçenek_6),
                 (soru_7, cevap_7, seçenek_7), (soru_8, cevap_8, seçenek_8),
                 (soru_9, cevap_9, seçenek_9), (soru_10, cevap_10, seçenek_10)]


def soru_sor_ve_puan_dondur(soru: str, dogru_cevaplar: [str], secenekler: str) -> int:
    print(soru)
    print(secenekler)
    cevap = input("Cevabınız: ")
    if cevap == dogru_cevaplar:
        return + 3
    else:
        return + -1


puan = 0
değer = 0
print("""'Kim Puan Kazanmak İster?' yarışmamıza hoşgeldiniz. 
Her sorunun doğru cevabı için 3 puan her yanlış cevap için 1 puan kaybediceksiniz.
Önceden başarılar diliyoruz.\n""")
while değer < 10:
    # Soru 1
    puan += soru_sor_ve_puan_dondur(str(soru_ve_cevap[0][0]), str(soru_ve_cevap[0][1]), str(soru_ve_cevap[0][2]))
    değer += 1

    # Soru 2
    puan += soru_sor_ve_puan_dondur(str(soru_ve_cevap[1][0]), str(soru_ve_cevap[1][1]), str(soru_ve_cevap[1][2]))
    değer += 1

    # Soru 3
    puan += soru_sor_ve_puan_dondur(str(soru_ve_cevap[2][0]), str(soru_ve_cevap[2][1]), str(soru_ve_cevap[2][2]))
    değer += 1

    # Soru 4
    puan += soru_sor_ve_puan_dondur(str(soru_ve_cevap[3][0]), str(soru_ve_cevap[3][1]), str(soru_ve_cevap[3][2]))
    değer += 1

    # Soru 5
    puan += soru_sor_ve_puan_dondur(str(soru_ve_cevap[4][0]), str(soru_ve_cevap[4][1]), str(soru_ve_cevap[4][2]))
    değer += 1

    # Soru 6
    puan += soru_sor_ve_puan_dondur(str(soru_ve_cevap[5][0]), str(soru_ve_cevap[5][1]), str(soru_ve_cevap[5][2]))
    değer += 1

    # Soru 7
    puan += soru_sor_ve_puan_dondur(str(soru_ve_cevap[6][0]), str(soru_ve_cevap[6][1]), str(soru_ve_cevap[6][2]))
    değer += 1

    # Soru 8
    puan += soru_sor_ve_puan_dondur(str(soru_ve_cevap[7][0]), str(soru_ve_cevap[7][1]), str(soru_ve_cevap[7][2]))
    değer += 1

    # Soru 9
    puan += soru_sor_ve_puan_dondur(str(soru_ve_cevap[8][0]), str(soru_ve_cevap[8][1]), str(soru_ve_cevap[8][2]))
    değer += 1

    # Soru 10
    puan += soru_sor_ve_puan_dondur(str(soru_ve_cevap[9][0]), str(soru_ve_cevap[9][1]), str(soru_ve_cevap[9][2]))
    değer += 1

print("Tebrikler, testimizi tamamladınız.")
print("Toplam puanınız:", puan)
input("Çıkmak için bir tuşa bas.")

while döngüsündeki ifadeleri şu şekilde kısaltabilirsiniz:

while değer < 10:
    for i in soru_ve_cevap:
        puan += soru_sor_ve_puan_dondur(i[0], i[1], i[2])
        değer += 1
1 Like

list, tuple, dict gibi veri tiplerini inceleyin. Uzun uzun yazılan ve tekrar edilen if bloklarından kurtulacaksınız. if bloklarını amacına uygun kullanırsanız size daha çok yararı olur. Aşağıda sınıflarla küçük bir program yazdım, oop terimlerine pek takılmanıza gerek yok, ama ben yinede yorum satırlarıyla üstün körü anlatmaya çalıştım. Bi’ inceleyin isterseniz.

# -*- coding: utf-8 -*-


# Sınıfımız örneklendiği anda
# çalışacak olan kod bloklarını
# __init__ fonskiyonu altında yazıyoruz.
# Temel bilgileri burada
# tanımlıyoruz.
class Garaj:
    def __init__(self):
        self.araba = ""
        self.boya = ""
        self.teker = ""
        
        self.bmw = """
                  /--------------\
        _________/_______|________\________
        |                                 |
        --------()--------------()---------
        """
        self.tesla = """
                 ______________
        ________/              \________
        -|-                          -|-
        --------()------------()--------
        """
        
        self.mclaren = """
                 ________________
        ________/______|$|_______\_________
        |                                 |
        --------()---------------()--------
        """
        self.arabalar = {
                1: self.bmw,
                2: self.tesla,
                3: self.mclaren}
        
        self.boyalar = {
                1: "Siyah",
                2: "Beyaz",
                3: "Gri",
                4: "Yeşil",
                5: "Mavi",
                6: "Kırmızı",
                7: "Sarı",
                8: "Turuncu",
                9: "Turkuaz"
                       }
        
        self.tekerler = {
                1: "S",
                2: "M",
                3: "L",
                4: "XL",
                5: "XXL"
                       }
        print("Garaja hoşgeldin!\n")
        
        # Sınıfımız örneklendiği anda
        # __init__ fonksiyonu altındaki
        # kod blokları çalışacağı için
        # aşağıda çalışması gereken tüm
        # örnek metodlarını tek bir
        # metod altında ( calistir() ) tuttuk.
        # __init__ fonskiyonu altında sadece
        # bu metodu çağırarak diğer tüm metodları da
        # çağırmış olduk.
        self.calistir()
    

    # Burada kullanıcının seçtiği
    # araba, boya, teker gibi bilgileri
    # ekrana basıyoruz.
    def secilenleriGoster(self):
        
        print("""
              Araba: {}
              Boya: {}
              Teker: {}
            """.format(self.araba,
                       self.boya,
                       self.teker))
    
    # Araba secme
    def arabaSec(self):
        print("""
            Arabanızı seçin:
                
                  1- Bmw
                  2- Tesla
                  3- McLaren
              \n""")
            
        # Sıra numarasıyla bir araba seçilmesini
        # istiyoruz.
        self.secilenAraba = int(input("Seç: "))

        # Arabalarımızı tanımladığımız sözlüğün
        # keys yani anahtarları üzerinde geziniyoruz.
        # Aşağıdaki if bloğuyla secilen arabayı
        # sırasıyla tüm keys (anahtarlarla) karşılaştırıyoruz.
        # Eğer eşleşme doğru sonuçlanırsa, araba
        # isimli örnek niteliğimizin (sınıf içerisinde
        # olduğu için nitelik diyoruz)
        # değerini, o anki keys in value (değeriyle)
        # değiştiriyoruz. Bu kısmı aşağıda get(metoduyla)
        # yazdım. Normalde bir sözlüğün value larına
        # values() metoduyla ulaşılır. Fakat bu metod
        # ilgili sözlüğün tüm değerlerini veriyor.
        # Biz tüm değerleri istemiyoruz, sadece o anki
        # anahtarın değeri lazım.
        # Aşağıdaki diğer örnek metodlarında da
        # (sınıf içerisinde olduğu için metod diyoruz)
        # aynı şeyi yaptık.
        for i in self.arabalar.keys():
            if self.secilenAraba == i:
                self.araba = self.arabalar.get(i)
    
    def boyaSec(self):
        
        print("""
              Seç:
                  
                   1- Black
                   2- White
                   3- Gray
                   4- Green
                   5- Blue
                   6- Red
                   7- Yellow
                   8- Orange
                   9- Cyan
                   \n""")
        self.secilenBoya = int(input("Seç: "))
            
        for x in self.boyalar:
            if x == self.secilenBoya:
                self.boya = self.boyalar.get(x)
    
    def tekerSec(self):
        
        print("""Seç:
            1- S
            2- M
            3- L
            4- XL
            5- XXL
            \n""")
        
        self.secilenTeker = int(input("Seç: "))
        
        for j in self.tekerler:
            if j == self.secilenTeker:
                self.teker = self.tekerler.get(j)
                
    # Bütün örnek metodlarını tek bir metod altında
    # tutuyoruz. Daha sonra bu metodu çağırarak
    # tüm metodları çağırmış olacağız.
    def calistir(self):
        self.arabaSec()
        self.boyaSec()
        self.tekerSec()
        self.secilenleriGoster()

# Son olarak sınıfımızın çalışması için
# sınıfımızı örnekliyoruz.
# Eğer ki yukarıdaki kodları örnek metod/nitelikleri
# olarak tanımlamasaydık, sınıfımız direkt çalışacaktı.
ornekle = Garaj()
1 Like

Çok teşekkür ederim.

Çok teşekkürler. Artık gerek oop konusu gerek fonksiyon ve sözlüklerin kullanımı konusunda daha anlayışlı hale geldiğime inanıyorum.

Super! Surada potansiyel bir loop goruyorum:

    # Soru 1
    puan += soru_sor_ve_puan_dondur(str(soru_ve_cevap[0][0]), str(soru_ve_cevap[0][1]), str(soru_ve_cevap[0][2]))
    değer += 1

    # Soru 2
    puan += soru_sor_ve_puan_dondur(str(soru_ve_cevap[1][0]), str(soru_ve_cevap[1][1]), str(soru_ve_cevap[1][2]))
    değer += 1

    # Soru 3
    puan += soru_sor_ve_puan_dondur(str(soru_ve_cevap[2][0]), str(soru_ve_cevap[2][1]), str(soru_ve_cevap[2][2]))
    değer += 1

    [...]
for i in range(10): #0, 1, 2, 3, ..., 8, 9
    # Soru i+1
    puan += soru_sor_ve_puan_dondur(str(soru_ve_cevap[i][0]), str(soru_ve_cevap[i][1]), str(soru_ve_cevap[i][2]))
    değer += 1
1 Like