Neler yeni

Python Quiz Uygulaması

dexStap

Yazar
Katılım
28 Ocak 2022
Mesajlar
57
Tepkime puanı
133
Puanları
350
Python yazılım dili ile yapılmış geliştirilebilir quiz uygulaması. Kodları aşağıdan kopyalayabilirsiniz. Uygulama toplam 10 soru sormaktadır. 10 soruya verdiğiniz cevaplara göre doğru ve yanlış sayınız hesaplanır (boş bıraktığınız sorular yanlış olarak hesaplanır) ve 10. soruya cevap verdikten sonra karşınıza çıkan pencerede kaç doğru, kaç yanlış ve doğruluk oranını gösterir. Soruları, seçenekleri ve cevapları "data.json" dosyasını derleyerek kendinize göre ayarlayabilirsiniz.


python-quiz-uygulaması.PNG
python-quiz-uygulaması-sonuç.PNG


Python:
# Tkinter'dan her şeyi içe aktar
from tkinter import *

from time import *
 
# ve mesaj kutusunu tkinter'dan mb olarak içe aktarın
from tkinter import messagebox as mb
 
# veriler için json dosyasını kullanmak için json'u içe aktarın
import json
 
# GUI bileşenlerini tanımlamak için sınıf
class Quiz:
    # Bu, sınıfın yeni bir nesnesi başlatıldığında çağrılan ilk yöntemdir.
    # Bu yöntem, soru sayısını 0'a ayarlar ve içeriği görüntülemek
    # ve tüm işlevleri kullanılabilir kılmak için diğer tüm yöntemleri başlatır.
    def __init__(self):
        
        # soru numarasını 0 yap
        self.q_no=0
        
        # daha sonra güncellemek için display_question işlevine sorgular atar.
        self.display_title()
        self.display_question()
        
        # opt_selected, bir soruda seçilen seçenek için kullanılan bir tamsayı değerini tutar.
        self.opt_selected=IntVar()
        
        # geçerli soru için 'radio button' görüntüleme ve geçerli soru için seçenekleri görüntülemek için kullanılır
        self.opts=self.radio_buttons()
        
        # mevcut soru için seçenekleri görüntüle
        self.display_options()
        
        # sonraki ve çıkış için düğmeyi görüntüler.
        self.buttons()
        
        # soru yok
        self.data_size=len(question)
        
        # doğru cevapların sayısını tut
        self.correct=0

 
 
    # Bu yöntem sonucu görüntülemek için kullanılır
    # Doğru ve yanlış cevapların sayısını sayar
    # ve sonunda bunları bir mesaj Kutusu olarak görüntüleyin.
    def display_result(self):
        
        # yanlış cevapları hesaplar
        wrong_count = self.data_size - self.correct
        correct = f"Doğru Sayısı: {self.correct}"
        wrong = f"Yanlış Sayısı: {wrong_count}"
        
        # doğru cevapların yüzdesini hesaplar
        score = int(self.correct / self.data_size * 100)
        result = f"Doğruluk Oranı: {score}%"
        
        # Sonucu görüntülemek için bir mesaj kutusu gösterir
        mb.showinfo("Sonuç", f"{result}\n{correct}\n{wrong}")
 
 
    # Bu yöntem, İleri'ye tıkladıktan sonra Cevabı kontrol eder.
    def check_ans(self, q_no):
        
        # seçilen seçeneğin doğru olup olmadığını kontrol eder
        if self.opt_selected.get() == answer[q_no]:
            # seçenek doğruysa 'true' döndürür
            return True
 
    # Bu yöntem, mevcut sorunun cevabını check_ans ve soru no'yu çağırarak kontrol etmek için kullanılır
    # soru doğruysa, sayıyı 1 artırır ve ardından soru numarasını 1 artırır.
    # Eğer son soruysa, mesaj kutusunu göstermek için görüntüleme sonucunu çağırır aksi takdirde sonraki soruyu gösterir.
    def next_btn(self):
        
        # Cevabın doğru olup olmadığını kontrol edin.
        if self.check_ans(self.q_no):
            
            # Cevap doğruysa doğruyu 1 artırır
            self.correct += 1

            # Cevağ eğer yanlış ise 1 eksiltir
        elif -1:
            self.incorrect = -1
        
        # 'q_no' sayacını artırarak sonraki soruya geçer
        self.q_no += 1
        
        # 'q_no' boyutunun veri boyutuna eşit olup olmadığını kontrol eder
        if self.q_no==self.data_size:
            
            # eğer doğruysa skoru gösterir
            self.display_result()
            
            # GUI'yi yok eder
            pencere.destroy()
        else:
            # sonraki soruyu gösterir
            self.display_question()
            self.display_options()

    def back_btn(self):

        # 'q_no' sayacı eğer 0'dan yüksek ise önceki soruya geçer.
        if self.q_no > 0:

            self.q_no -= 1
        
        # 'q_no' boyutunun veri boyutuna eşit olup olmadığını kontrol eder
        if self.q_no==self.data_size:
            
            # eğer doğruysa skoru gösterir
            self.display_result()
            
        else:
            # sonraki soruyu gösterir
            self.display_question()
            self.display_options()
 
 
    # Bu yöntem, ekranda iki düğmeyi gösterir.
    # İlki bir sonraki soruya geçen 'next_button' dur.
    # Buton üzerinde gösterilen metnin işlevi, boyutu, rengi ve özelliği gibi hangi metni gösterdiği gibi özelliklere sahiptir.
    # Ardından, düğmenin ekranda nereye yerleştirileceğinden bahseder.
    # ikinci düğme, testi tamamlamadan GUI'yi kapatmak için kullanılan çıkış düğmesidir.
    def buttons(self):
        
        # İlk düğme, sonrakine geçmek için İleri düğmesidir.
        # sonraki soru
        next_button = Button(pencere, text="Sonraki >>>",command=self.next_btn,
        width=10,bg="green",fg="white",font=("ariel",16,"bold"))
        
        # düğmeyi ekrana yerleştirme
        next_button.place(x=410,y=380)

        back_button = Button(pencere, text="<<< Önceki",command=self.back_btn,
        width=10,bg="green",fg="white",font=("ariel",16,"bold"))
        
        # düğmeyi ekrana yerleştirme
        back_button.place(x=240,y=380)
        
        # Bu, GUI'den çıkmak için kullanılan ikinci düğmedir.
        quit_button = Button(pencere, text="Çıkış", command=pencere.destroy,
        width=5,bg="red", fg="white",font=("ariel",16," bold"))
        
        # Çık düğmesini ekrana yerleştirme
        quit_button.place(x=700,y=380)
 
 
    # Bu yöntem, ekrandaki 'radio button' seçimini kaldırır Ardından,
    # soru numarası aracılığıyla elde ettiğimiz mevcut soru için mevcut seçenekleri
    # görüntülemek için kullanılır ve radyo düğmesinin mevcut sorusu için seçeneklerin her birini günceller.
    def display_options(self):
        val=0
        
        # seçeneklerin seçimini kaldırma
        self.opt_selected.set(0)
        
        # 'radio button' ların metni için görüntülenecek seçenekler üzerinde döngü.
        for option in options[self.q_no]:
            self.opts[val]['text']=option
            val+=1
 
 
    # Bu yöntem ekranda mevcut Soruyu gösterir.
    def display_question(self):
        
        # Soru özelliklerini ayarlama
        q_no = Label(pencere, text=question[self.q_no], width=60,
        font=( 'ariel' ,16, 'bold' ), anchor= 'w' )
        
        # seçeneği ekrana yerleştirme
        q_no.place(x=70, y=100)
 
 
    # Bu yöntem Başlığı Görüntülemek için kullanılır
    def display_title(self):
        
        # gösterilecek başlık
        title = Label(pencere, text="Sorular",
        width=50, bg="blue",fg="white", font=("ariel", 20, "bold"))
        
        # başlığın yeri
        title.place(x=0, y=2)
 
 
    # Bu yöntem, ekranda belirtilen konumda Soruyu seçmek için 'radio button' ları gösterir.
    # Ayrıca, daha sonra bunlara seçenekler eklemek için kullanılan bir 'radio button' listesi de verir.
    def radio_buttons(self):
        
        # listeyi boş bir seçenekler listesiyle başlat
        q_list = []
        
        # ilk seçeneğin konumu
        y_pos = 150
        
        # seçenekleri listeye ekleme
        while len(q_list) < 4:
            
            # radyo düğmesi özelliklerini ayarlama
            radio_btn = Radiobutton(pencere,text=" ",variable=self.opt_selected,
            value = len(q_list)+1,font = ("ariel",14))
            
            # listeye düğme ekleme
            q_list.append(radio_btn)
            
            # düğmeyi yerleştirme
            radio_btn.place(x = 100, y = y_pos)
            
            # y ekseni konumunu 40 artırma
            y_pos += 40
        
        # 'radio button' döndür
        return q_list

def clock():
    text = strftime('%H:%M:%S')
    label.config(text=text)
    label.after(1000,clock)
 
# Bir GUI Penceresi Oluşturun
pencere = Tk()
 
# GUI Penceresinin boyutunu ayarla
pencere.geometry("800x450")

pencere.resizable(height=False,width=False)


 
# Pencerenin başlığını ayarla
pencere.title("Sorular")

lb = LabelFrame(text="Saat", width=135, height=60)
lb.place(x=650, y=40)
label = Label(pencere, font=("ds-digital",20))
label.place(x=655,y=55)

 
# json dosyasındaki verileri al
with open('data.json') as f:
    data = json.load(f)
 
# soruyu, seçenekleri ve yanıtı ayarlayın
question = (data['sorular'])
options = (data['secenekler'])
answer = (data[ 'cevaplar'])
 
# Quiz Class'ın bir nesnesini oluşturun.
quiz = Quiz()
 
status = Label(pencere, text="by dexStap Software \ Web Site: https://oyuncununini.com/", bd=1, relief=SUNKEN, anchor=CENTER)
status.pack(side=BOTTOM, fill=X)

# GUI'yi başlatın
clock()
pencere.mainloop()


JSON:
{
  "sorular": [
    "Soru 1. Python da kac veri turu bulunur?",
    "Soru 2. Hangisi Python Yorum Satiri Kodudur?",
    "Soru 3. round(12.5) - round(11.5) isleminin sonucu nedir?",
    "Soru 4. Hangi operator carpma islemi yapar?",
    "Soru 5. Hangi operator iki degerin yapisini karsilastirir?",
    "Soru 6. Asagidakilerden hangisi bir liste objesidir?",
    "Soru 7. Sozluk(dict) objesi nasil yaratilir?",
    "Soru 8. Hangi yapi sirali, degistirilebilir ve eklenebilirdir?",
    "Soru 9. os.system fonksiyonu ne ise yarar?",
    "Soru 10. Python'da hangisi dogru degisken adidir?"
  ],
  "cevaplar": [
    1,
    2,
    3,
    2,
    4,
    3,
    1,
    4,
    4,
    1
  ],
  "secenekler": [

    ["5",
      "3",
      "7",
      "4"
    ],
    ["// bu bir yorumdur",
      "# bu bir yorumdur",
      "* bu bir yorumdur*/",
      "& bu bir yorumdur"
    ],
    ["3",
      "Hata mesaji dondurur",
      "0",
      "1"
    ],
    ["X",
      "*",
      "x",
      "#"
    ],
    ["=",
      "==",
      "><",
      "==="
    ],
    ["{}",
      "()",
      "[]",
      "set()"
    ],
    ["sozluk = {}",
      "sozluk = ()",
      "sozluk = []",
      "sozluk = set()"
    ],
    ["castToInt(a)",
      "integer(a)",
      "castToInteger(a)",
      "int(a)"
    ],
    ["Bilgisayar sistem bilgileri",
      "Proje dosya yolu",
      "Ag bilgiler",
      "Terminal uzerinde komut"
    ],
    ["my_var",
      "_myvar",
      "my-var",
      "My Var"
    ]
  ]
}
 

                                                                                                  
Üst Alt