Arkadaşlar asal sayı bulmak için kod yazdım fakat asal olmayan bazı sayıları da asal diyor hatam nerde olabilir bulamadım.
Emin değilim ama breakle kırsan dahi for döngüsü birini çalıştırıyor ne gelirse.
Bunun yerine şöyle yapabilirisin.
EDIT : Düzgün anlatamamışım. iki if içindeki herhangi bir break komutu, for döngüsünü de kırıyor. Yani for sadece bir kez çalışıyor. For un altına bir print koyarak bir kez çalıştığını kendin de görebilirsin.
Eratosten Eleğini araştırınız.
“Sieve of Eratosthenes”
while True:
sayi = int(input("Sorgulamak İstediğiniz Sayıyı Girin : "))
for i in range(2,sayi):
if sayi % i == 0:
print("Sayı Asal Değil")
break
else:
print("Sayı Asal")
"""
Bu kısım(else) for yapısına bağlı olmak zorunda. Senin Kodun da if
yapısına bağlı. Bunun yüzünden asal diyor. For yapısından çıkmıyor ve
tekrar bakıyor. 2 kere yazdırıyor.
"""
Çok ilginç ve güzel bir yaklaşım olmuş. Elinize sağlık.
İf ve else aynı scope (kapsamda) olmadan nasıl çalışabilir diye düşünüyordum.
For yapısından çıkmama durumundan emin olamadım.
while True:
sayi = int(input("Sorgulamak İstediğiniz Sayıyı Girin : "))
for i in range(2,sayi):
print(sayi)
if sayi % i == 0:
print("Sayı Asal Değil")
break
else:
print("Sayı Asal")
break
Şeklinde derleyiciye verdim kodu.
Sadece print ekledim. Ki for u kaç kez döndürüyor merak ettim.
Sonuç:
Yani if else bloğunda her halukarda break ile for döngüsünden ilk seferde çıkıyor.
Bu nedenle For yapısından çıkmıyor ve tekrar bakıyor 2 kere yazdırıyor kısmını anlayamadım.
Çözüme itirazım yok, daha önce belirttim güzel bir çözüm ama sorun sizin söylediğiniz gibi mi emin olamadım.
Aslında for un bütün ihtimallerini denedikten sonra döngüyü kırması gerekirken ilk if ile for döngüsünü bir kez çalıştırıp durduruyor.
EDIT:
For altında if koşulunda ve else koşulunda hangisine geçerse break ile kırmak sadece bir kez for çalışmasına neden oluyorsa nasıl basitleştirebilirim diye baktım. Aslında else gerek yok.
Çünkü asal olması için kendisinden başka sayıya bölünmemesi gerektiğine göre herhangi bir bölen olduğu an döngüyü kırması yeterli.
İlk değeri asal kabul edip, döngüde bölen kontrolü yapmak yeterli.
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)
Tabi bakış açısı bir şeyin tabi ki birden farklı çözüm yolları vardır. Ben sadece hatanın oluş nedenlerini irdelemeye çalışıyorum.
def prime_eratosthenes(n):
prime_list = []
for i in range(2, n+1):
if i not in prime_list:
print (i)
for j in range(i*i, n+1, i):
prime_list.append(j)
print(prime_eratosthenes(100));
Python: Sieve of Eratosthenes method, for computing prime number - w3resource
Iterasyon sayısını azaltmak için gayet mantıklı bir yaklaşım.
Madem değinmişsiniz bir örnek bulunsun istedim.