Yeni Başlayan Biri İçin Basit Program Oluşturma

Tkinter ile 2 farklı entry oluşturup, bu entrylere girilen 2 değer arasındaki asal sayıları bulup toplayan program geliştirmek istiyorum bunu nasıl yapabilirim? Arayüz oluşturmakta sıkıntı yok ama devamını getiremiyorum.

Kodlarınızı paylaşabilir misiniz?

import tkinter as tk
from tkinter import ttk
from tkinter import messagebox as msg


def asal_bul(baslangic, bitis):
    # 2 SAYI ARASINDAKİ DEĞERLERİN HER BİRİNİ DENEME
    for i in range(baslangic, bitis):
        # SAYI EĞER 2 DEN BÜYÜKSE VEYA 2 YE EŞİTSE
        if i >= 2:
            # 2 DEN SAYININ KAREKÖKÜNE KADAR OLAN SAYILARIN SAYIYA BÖLÜNÜP
            # BÖLÜNMEDİĞİNİN DENENMESİ (ASAL OLUP OLMADIĞINI TEST ETMEK İÇİN)
            for j in range(2, round(i ** 0.5) + 1):
                # EĞER SAYIMIZ
                if i % j == 0:
                    break
            # EĞER BREAK ÇALIŞMAZSA (HİÇ BİR SAYI BÖLÜNMEZSE) ÇALIŞACAK FOR-ELSE
            else:
                # SAYIYI YIELD ETME
                yield i


def sonuc_bul():
    # EĞER ENTRY'LERDEKİ DEĞERLER SAYISAL DEĞERLER İSE
    if baslangic_entry.get().isdecimal() and bitis_entry.get().isdecimal():
        baslangic = int(baslangic_entry.get())
        bitis = int(bitis_entry.get())
        asallar = asal_bul(baslangic, bitis)
        sonuc = sum(asallar)
        # SONUÇ LABELININ YAZISINI ASALLARIN TOPLAMI YAPMA
        sonuc_label.config(text="ASALLARIN TOPLAMI : {}".format(sonuc))
    else:
        msg.showwarning(
            "HATA", "BAŞLAGIÇ VE BİTİŞ DEĞERLERİ SAYISAL DEĞERLER OLMALIDIR"
        )


# tkinter İÇERİSİNDEKİ Tk SINIFINDAN OLUŞTURULAN BİR OBJE OLAN PENCERE
root = tk.Tk()
root.title("ASAL TOPLAMI")
root.resizable("false", "false")


# BAŞLANGIÇ ENTRY'Sİ İÇİN BİLGİ VERECEK OLAN LABEL
baslangic_label = ttk.Label(root, text="BAŞLANGIÇ SINIRI : ")
baslangic_label.grid(row=0, column=0, sticky="W")

# BAŞLANGIÇ SAYIMIZIN GİRLECEĞİ ENTRY KUTUSU
baslangic_entry = ttk.Entry(root)
baslangic_entry.grid(row=0, column=1)

# BAŞLANGIÇ ENTRY'Sİ İÇİN BİLGİ VERECEK OLAN LABEL
bitis_label = ttk.Label(root, text="BİTİŞ SINIRI : ")
bitis_label.grid(row=1, column=0, sticky="W")

# BİTİŞ DEĞERİMİZİN GİRİLECEĞİ ENTRY KUTUSU
bitis_entry = ttk.Entry(root)
bitis_entry.grid(row=1, column=1)

# ASALLARIN TOPLAMINI BULMA BUTONU
asal_bul_buton = ttk.Button(root, text="ASAL SAYILARIN TOPLAMINI BUL",
                            command=sonuc_bul) # BUTON KOMUDU
asal_bul_buton.grid(row=2, column=0, columnspan=2, sticky="EW")

# SONUCUN GÖSTERİLECEĞİ LABEL
sonuc_label = ttk.Label(root, text="ASALLARIN TOPLAMI : NONE")
sonuc_label.grid(row=3, column=0, columnspan=2)

# PENCERE DÖNGÜSÜ
root.mainloop()

Nesne yönelimli yazmadım basit olması için.

Yardımlarınızdan dolayı teşekkür ederim. Elinize sağlık.

Minik 1-2 öneri:

  1. sonuç_bul() fonksiyonunda, başlangıç ve bitiş değerlerinin teksayı haline getirilmesi (çünkü bütün asallar teksayıdır, çift sayılardan sadece 2 sayısı teknik nedenlerle asal kabul ediliyor.)

  2. Bitiş değerinin for döngüsünde hariç tutulacağının hatırlanması, bitiş değeri de aralığa dahil edilmek istenirse buna göre düzenleme yapılması(bitiş+=2 gibi)

  3. asal_bul fonksiyonunda “for i in range(baslangic, bitis):” yerine,
    “for i in range(baslangic, bitis,2):” yazılması.(çünkü teksayıların çift sayı böleni yoktur, bir teksayının çift sayıya bölünüp bölünmeyeceğini kontrol etmek, size sadece zaman kaybettirir.)

Tanıma uyduğu için asal kabul ediliyor, diğer tüm asal sayılar gibi.