Python (asal sayı):

Kodla Büyü

faruks

Seçkin Üye
Seçkin Üye
Mesajlar
317
Bir sayının asal olup olmadığını bulan iki kod var.
1. Kod:
while True:
sayi = int(input("Sorgulamak İstediğiniz Sayıyı Girin : "))
sonuc = 'Say Asal'
for i in range(2,sayi):
if sayi % i == 0:
sonuc= 'Sayı Asal Değil'
break
print (sonuc)
2. Kod:
while True:
sayi = int(input("Sorgulamak İstediğiniz Sayıyı Girin : "))
for i in range(2,sayi):
if (sayi % i) == 0:
print(sayi," Asal Sayı Değildir.")
break
print(sayi," Asal Sayıdır.")

1. Kod düzgün çalışıyor, 2. Kod aynı algoritma neden çift sayılar için 2 sonuç ( hem "Asal Sayı Değildir." hem de "Asal Sayıdır." ) üretiyor. Kaçırdığım bir yer mi var?
 
İlk algoritmada sayı önce asal kabul ediliyor. Asal olmadığı tespit edilirse asal değil yazıyor sonuc değişkeni ile.

İkinci yöntemde ise break for döngüsünü bitiriyor; asal değil yazıp yazmadığı kontrol edilmeden sayı asaldır yazdırılıyor.
 
Son düzenleme:
İlk algoritmada sayı önce asal kabul ediliyor. Asal olmadığı tespit edilirse asal değil yazıyor sonuc değişkeni ile.
Tamam doğru. İkinci kod da, örneğin 9 için 3 ile bölümünden kalan 0'a eşit. "Asal sayı değildir" yazıp programı kırması lazım.
 
Tamam doğru. İkinci kod da, örneğin 9 için 3 ile bölümünden kalan 0'a eşit. "Asal sayı değildir" yazıp programı kırması lazım.
İkinci yöntemde ise break for döngüsünü bitiriyor; asal değil yazıp yazmadığı kontrol edilmeden sayı asaldır yazdırılıyor.
 
2. kodda break sonrası print(sayi, " Asal Sayıdır.") ifadesinin döngü dışında ama kontrolsüz olmasından kaynaklanabilir

1. Kod: (Doğru çalışan)
Python:
while True:
    sayi = int(input("Sorgulamak İstediğiniz Sayıyı Girin : "))
    sonuc = 'Sayı Asal'
    for i in range(2, sayi):
        if sayi % i == 0:
            sonuc = 'Sayı Asal Değil'
            break
    print(sonuc)
  • sonuc değişkeni döngü içinde duruma göre güncelleniyor.
  • Döngü bitince sadece bir kere print(sonuc) yazdırılıyor.
  • Dolayısıyla sadece bir sonuç veriliyor.




2. Kod: (Yanlış sonuç üreten)
Python:
while True:
    sayi = int(input("Sorgulamak İstediğiniz Sayıyı Girin : "))
    for i in range(2, sayi):
        if (sayi % i) == 0:
            print(sayi, " Asal Sayı Değildir.")
            break
    print(sayi, " Asal Sayıdır.")
  • Burada break gerçekleşse bile print(sayi, " Asal Sayıdır.") her zaman çalışıyor.
  • Yani sayı asal değilse bile bu satır çalıştığı için iki çıktı birden alıyorsunuz.




Düzgün Çalışması İçin 2. Kodu Düzeltme:
Python:
while True:
    sayi = int(input("Sorgulamak İstediğiniz Sayıyı Girin : "))
    for i in range(2, sayi):
        if (sayi % i) == 0:
            print(sayi, " Asal Sayı Değildir.")
            break
    else:
        # for döngüsü break ile çıkmazsa bu blok çalışır
        print(sayi, " Asal Sayıdır.")
  • for-else kullanımı burada kritik:
  • else bloğu yalnızca döngü tamamlanırsa (yani break olmazsa) çalışır.
  • Böylece birden fazla çıktı verilmez.
 
Son düzenleme:
Kodlarda asal sayı bulunur ama döngünüz işlem süresini düşürmek açısından kısaltılabilir. Örneğin 11 in asal olup olmadığını bulmak için döngüyü 11 e kadar değil 11/2 5 e kadar döndürebilirsiniz, bir de 2 dışında asal çift sayı olmadığı için döngünüzde çift sayıları direkt contunie ile atlayabilirsiniz.
 
BBNET
Geri
Üst