Çözüldü Quiz uygulaması nasıl yapılır?

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

Black X6

Centipat
Katılım
13 Eylül 2023
Mesajlar
365
Çözümler
4
Daha fazla  
Cinsiyet
Erkek
Basit bir quiz uygulaması yapıyorum ve quiz esnasında kullanıcı dilediği zaman "Q" yazıp çıkabilsin istiyorum. Bunu nasıl yapabilirim?

Soru tipi şu şekilde.
Q1 = ("2 * 3 =?", ["4", "5", "6", "7"], "6")
 
Son düzenleyen: Moderatör:
Çözüm
Soru tipinden bir şey anlamadım. Aşağıdaki şablona uydurursun.

Python:
soruCevapListesi = [
    {
        "title": "Soru 1: Hayvanlar",
        "description": "Tavşanlar ne yer?",
        "choices": [
            [
                0, # Bu cevabı vermek 0 puan kazandıracak. Yani yanlış cevap.
                "Toprak"
            ],
            [
                1, # Bu cevabı vermek 1 puan kazandıracak. Yani doğru cevap.
                "Havuç"
            ],
            [
                0, # Bu cevabı vermek 0 puan kazandıracak. Yani yanlış cevap.
                "Gübre"
            ],
            [
                10, # Bu cevabı vermek 10 puan kazandıracak. İstemiyorsan yapmayabilirsin, kafama göre sürpriz yumurta ekledim işte.
                "Çoğu şeyi yerler"
            ]
        ]
    }
]

Böyle soru cevap listesini hazırlarsın. Sürpriz yumurta ekledim ben, istemiyorsan ona da sıfır yaz sadece doğru yanlış kısmını alırsın. Uzatmak için aynısını kopyala yapıştır aşağıya. Artık veri yapısını da biliyorsundir diye düşünüyorum.

Bunun listesindekileri işleyecek ana fonksiyonumuz da burada ne belirlediysek ona göre çalışıp en son oyun sonuçlarını yazdıracak. Ana kodu pek pırtıklamana gerek yok, yuakrıdaki veriyi pırtıklayarak oyunu uzatabilirsin.

Python:
def main(veri):
    puan = 0
    print("Karşılama mesajı")
    for soru in veri:
        print (f"------------ |     {veri.index(soru)+1}. SORU     | -----------  {puan}  -")
        print (soru["title"])
        print (soru["description"])
        for cevap in soru["choices"]:
            print (f"{soru['choices'].index(cevap)}) {cevap[1]}")
        while not 0: # Anlaşılabilirlik için. Böyle olunca kodu okurken zihin açmıyor.
            answer = input ("Cevabınız: ")
            if answer.isdigit() and int(answer) in range(len(soru['choices'])): # Olası hatadan kaçınmak için
böyle yaptık.
                puan += soru['choices'][int(answer)][0]
                print ((f"Doğru cevap! {soru['choices'][int(answer)][0]} puan kazandın.") if soru['choices'][i
nt(answer)][0] else "Bilemedin.")
                break
            elif answer == "Q" or "q":
                print (f"Görüşürüz... En son skorun: {puan}")
                time.sleep(5)
                exit()
            else:
                print ("Geçersiz yanıt. Tekrar gir.")
    print (f"Quiz bitti. SKor: {puan}")

Çıkış yaparken düzgün çıkması için sleep kullandım. Dosyaya time kütüphanesini import etmezsen hata verir.
Soru tipinden bir şey anlamadım. Aşağıdaki şablona uydurursun.

Python:
soruCevapListesi = [
    {
        "title": "Soru 1: Hayvanlar",
        "description": "Tavşanlar ne yer?",
        "choices": [
            [
                0, # Bu cevabı vermek 0 puan kazandıracak. Yani yanlış cevap.
                "Toprak"
            ],
            [
                1, # Bu cevabı vermek 1 puan kazandıracak. Yani doğru cevap.
                "Havuç"
            ],
            [
                0, # Bu cevabı vermek 0 puan kazandıracak. Yani yanlış cevap.
                "Gübre"
            ],
            [
                10, # Bu cevabı vermek 10 puan kazandıracak. İstemiyorsan yapmayabilirsin, kafama göre sürpriz yumurta ekledim işte.
                "Çoğu şeyi yerler"
            ]
        ]
    }
]

Böyle soru cevap listesini hazırlarsın. Sürpriz yumurta ekledim ben, istemiyorsan ona da sıfır yaz sadece doğru yanlış kısmını alırsın. Uzatmak için aynısını kopyala yapıştır aşağıya. Artık veri yapısını da biliyorsundir diye düşünüyorum.

Bunun listesindekileri işleyecek ana fonksiyonumuz da burada ne belirlediysek ona göre çalışıp en son oyun sonuçlarını yazdıracak. Ana kodu pek pırtıklamana gerek yok, yuakrıdaki veriyi pırtıklayarak oyunu uzatabilirsin.

Python:
def main(veri):
    puan = 0
    print("Karşılama mesajı")
    for soru in veri:
        print (f"------------ |     {veri.index(soru)+1}. SORU     | -----------  {puan}  -")
        print (soru["title"])
        print (soru["description"])
        for cevap in soru["choices"]:
            print (f"{soru['choices'].index(cevap)}) {cevap[1]}")
        while not 0: # Anlaşılabilirlik için. Böyle olunca kodu okurken zihin açmıyor.
            answer = input ("Cevabınız: ")
            if answer.isdigit() and int(answer) in range(len(soru['choices'])): # Olası hatadan kaçınmak için
böyle yaptık.
                puan += soru['choices'][int(answer)][0]
                print ((f"Doğru cevap! {soru['choices'][int(answer)][0]} puan kazandın.") if soru['choices'][i
nt(answer)][0] else "Bilemedin.")
                break
            elif answer == "Q" or "q":
                print (f"Görüşürüz... En son skorun: {puan}")
                time.sleep(5)
                exit()
            else:
                print ("Geçersiz yanıt. Tekrar gir.")
    print (f"Quiz bitti. SKor: {puan}")

Çıkış yaparken düzgün çıkması için sleep kullandım. Dosyaya time kütüphanesini import etmezsen hata verir.
 
Son düzenleme:
Çözüm
Soru tipinden bir şey anlamadım. Aşağıdaki şablona uydurursun.

Python:
soruCevapListesi = [
    {
        "title": "Soru 1: Hayvanlar",
        "description": "Tavşanlar ne yer?",
        "choices": [
            [
                0, # Bu cevabı vermek 0 puan kazandıracak. Yani yanlış cevap.
                "Toprak"
            ],
            [
                1, # Bu cevabı vermek 1 puan kazandıracak. Yani doğru cevap.
                "Havuç"
            ],
            [
                0, # Bu cevabı vermek 0 puan kazandıracak. Yani yanlış cevap.
                "Gübre"
            ],
            [
                10, # Bu cevabı vermek 10 puan kazandıracak. İstemiyorsan yapmayabilirsin, kafama göre sürpriz yumurta ekledim işte.
                "Çoğu şeyi yerler"
            ]
        ]
    }
]

Böyle soru cevap listesini hazırlarsın. Sürpriz yumurta ekledim ben, istemiyorsan ona da sıfır yaz sadece doğru yanlış kısmını alırsın. Uzatmak için aynısını kopyala yapıştır aşağıya. Artık veri yapısını da biliyorsundir diye düşünüyorum.

Bunun listesindekileri işleyecek ana fonksiyonumuz da burada ne belirlediysek ona göre çalışıp en son oyun sonuçlarını yazdıracak. Ana kodu pek pırtıklamana gerek yok, yuakrıdaki veriyi pırtıklayarak oyunu uzatabilirsin.

Python:
def main(veri):
    puan = 0
    print("Karşılama mesajı")
    for soru in veri:
        print (f"------------ |     {veri.index(soru)+1}. SORU     | -----------  {puan}  -")
        print (soru["title"])
        print (soru["description"])
        for cevap in soru["choices"]:
            print (f"{soru['choices'].index(cevap)}) {cevap[1]}")
        while not 0: # Anlaşılabilirlik için. Böyle olunca kodu okurken zihin açmıyor.
            answer = input ("Cevabınız: ")
            if answer.isdigit() and int(answer) in range(len(soru['choices'])): # Olası hatadan kaçınmak için
böyle yaptık.
                puan += soru['choices'][int(answer)][0]
                print ((f"Doğru cevap! {soru['choices'][int(answer)][0]} puan kazandın.") if soru['choices'][i
nt(answer)][0] else "Bilemedin.")
                break
            elif answer == "Q" or "q":
                print (f"Görüşürüz... En son skorun: {puan}")
                time.sleep(5)
                exit()
            else:
                print ("Geçersiz yanıt. Tekrar gir.")
    print (f"Quiz bitti. SKor: {puan}")

Çıkış yaparken düzgün çıkması için sleep kullandım. Dosyaya time kütüphanesini import etmezsen hata verir.
q1 = ("2 * 3 = ?", ["4", "5", "6", "7"], "6")
q2 = ("4 * 5 = ?", ["20", "25", "30", "35"], "20")
q3 = ("7 * 8 = ?", ["50", "52", "54", "56"], "56")

questions = [q1, q2, q3]

Soruları bu şekilde hazırladım, yani soru tipinden kasıtım buydu.
 
Son düzenleyen: Moderatör:

Technopat Haberler

Yeni konular

Geri
Yukarı