Python ile Quiz Uygulaması Yapmak

Herkese merhaba. Bu makalenin sonunda Python ile sınav uygulaması yapmış olacağız.

İlk önce soru dosyasını hazırlayalım. sorular.py adlı dosya oluşturalım. Bu linkten github hesabımdaki soruları direkt olarak alabilirsiniz.

Soruları hallettiysek şimdi asıl dosyamıza geçebiliriz. Modülleri içe aktarıp uygulamamıza başlayalım.

# Sorular dosyası
from sorular import dy, secmeli

# Rastgele soru çekmek için
from random import choice

# Çıktımız düzgün(tablo) görünsün diye
import beautifultable
from beautifultable import BeautifulTable
from dashtable import data2rst

# Konsol ekranını renklendirmek için
import colorama
from colorama import init, Fore, Back
init(convert=True)
colorama.init(autoreset=True)

Class oluşturup kodların temelini inşa ediyoruz.

table = BeautifulTable()    # Sorular tablo halinde gözükmesi için

class Quiz:
    # Program başladığında bizi karşılayacak olan işlem.
    def __init__(self):
        print(Fore.YELLOW + """
        +----------- Python Sınav Uygulaması -----------+
        |                                               |
        |    Doğru Yanlış için           | 1            |
        |    Çoktan Seçmeli Sorular için | 2            |
        |    Çıkmak için                 | 3 veya exit  |
        |    Yazınız.                                   |
        +-----------------------------------------------+
""")
        while True:
            # Kullanıcıdan giriş alıp kontrol ediyoruz. 
            giris = input(Fore.BLUE+"Seçenek: ")

            if giris == "1":
                return self.dogruYanlis()
            elif giris == "2":
                return self.secmeliSorular()
            elif giris == "exit" or giris == "3":
                exit()
            else:
                print(Fore.RED+"HATALI SEÇİM")

Verdiğimiz cevapları kontrol etmek için

def kontrol(self, soru, cvp, skor):
        # gelen soru kümesinin 'cevap' elemanını, kullanıcıdan gelen değer ile eşleştiriyoruz.
        if soru['cevap'].upper() == cvp.upper():
            print(Fore.GREEN + f"Doğru Cevap!\n")
            print(Fore.CYAN + "*"*30)
            self.d += 1
            self.skor += 10
        else:
            print(Fore.RED + f"\nYanlış Cevap :( \nDoğru cevap {Fore.GREEN + soru['cevap'].upper()+ Fore.RED} olacaktı.\n")
            print(Fore.CYAN + "*"*30)
            self.y += 1

Doğru Yanlış sorularının kodlarını yazalım

def dogruYanlis(self):
        print(Fore.YELLOW+"- Gelen sorulara cevap vermek için, D/Y tuşlarını kullanın."+ Fore.RED +"\n- Büyük küçük duyarlı değildir."+ Fore.YELLOW +"\n- Soruyu geçmek için 'pas' yazmanız yeterlidir."+ Fore.RED +"\n- Her Soru 10 Puan'dır."+ Fore.YELLOW +"\n- Sorular rastgele sorulmaktadır.\n\n")
        self.d = 0
        self.y = 0
        self.pas = 0
        self.skor = 0
        skor = 0
        soru_sayisi = 1
        liste = []
        for _ in range(100):
            try:
                rast = choice(dy)
            except:
                pass
# Aynı soruları sormasın diye listeyi kontrol ettiriyoruz.
            if rast['soru'] in liste:
                continue
            else:
                liste.append(rast['soru'])
# 10 soruya ulaşınca döngüden çıkıyor ve test bitiyor. İstediğiniz kadar arttırabilirsiniz bu kısmı.
            if soru_sayisi >= 11:
                break

            table.columns.header = [Fore.RED + "Soru: "+str(soru_sayisi)]
            soru_sayisi += 1
            table.rows.append([Fore.YELLOW + rast['soru']])
            print(table)
            table.rows.clear()

            cevap = input(Fore.YELLOW + "Cevap: ")
            if cevap == "pas":
                print("Soru Geçildi.")
                self.pas += 1
                continue
# Cevabı kontrol etmek için kontrol fonksiyonuna argüman gönderiyoruz.
            self.kontrol(rast, cevap, skor)

        tablae = [
        ["Test Bitti", ""],
        [Fore.GREEN+"Doğru", str(self.d)],
        [Fore.LIGHTRED_EX+"Yanlış", str(self.y)],
        [Fore.LIGHTBLUE_EX+"Boş", str(self.pas)],
        [Fore.LIGHTYELLOW_EX+"Toplam Puan", str(self.skor)]
                ]

        print(Fore.BLUE + data2rst(tablae, use_headers=True))

Seçmeli sorular için

def secmeliSorular(self):
        print(Fore.YELLOW+"- Gelen sorulara cevap vermek için, şıkları ekrana yazın. Örn: 'A'"+ Fore.RED +"\n- Büyük küçük duyarlı değildir."+ Fore.YELLOW +"\n- Soruyu geçmek için 'pas' yazmanız yeterlidir."+ Fore.RED +"\n- Her Soru 10 Puan'dır."+ Fore.YELLOW +"\n- Sorular rastgele sorulmaktadır.\n\n")
        self.d = 0
        self.y = 0
        self.pas = 0
        self.skor = 0
        skor = 0
        soru_sayisi = 1

        liste = []
        for _ in range(100):
            try:
                rast = choice(secmeli)
            except:
                pass

            if rast['soru'] in liste:
                continue
            else:
                liste.append(rast['soru'])

            if soru_sayisi >= 11:
                break

            table.columns.header = [Fore.RED + "Soru: "+str(soru_sayisi)]
            soru_sayisi += 1
            table.rows.append([Fore.YELLOW + rast['soru']])
            table.column_alignments = beautifultable.ALIGN_LEFT
            print(table)
            table.rows.clear()

            cevap = input("Cevap: ")
            if cevap == "pas":
                print("Soru Geçildi.")
                self.pas += 1
                continue
            self.kontrol(rast, cevap, skor)

        tablae = [
        ["Test Bitti", ""],
        [Fore.GREEN+"Doğru", str(self.d)],
        [Fore.LIGHTRED_EX+"Yanlış", str(self.y)],
        [Fore.LIGHTBLUE_EX+"Boş", str(self.pas)],
        [Fore.LIGHTYELLOW_EX+"Toplam Puan", str(self.skor)]
                ]
        print(Fore.BLUE + data2rst(tablae, use_headers=True))

Quiz()

Uygulama bu kadardır. Kodları ve soruları geliştirip,
Django veya Flask kullanarak web uygulaması,
Kivy kullanarak mobil uygulama,
Tkinter veya PyQt kullanarak masaüstü uygulaması geliştirebilirsiniz.

Tüm kodlara ulaşmak için Github’a Göz Atın.

Diğer projelere ulaşmak için tıklayın.