Python ile asal sayı bulma

Biwkan

Decipat
Katılım
20 Eylül 2020
Mesajlar
734
Çözümler
10
Merhaba, Python programlama dilini kendi başıma öğrenmeye çalışıyorum. Bugün öğrenebildiğim teorik bilgileri bir programa dökmeye karar verdim ve başlıkta gördüğünüz projeyi yaptım. Kodlar şu şekilde:

Python:
# kullanıcının girdiği sayının asal olup olmadığını bulma
while True:

    sayi = input("Öğrenmek istediğiniz sayıyı girin (Çıkmak için 'q' girin): ")

    if sayi == "q":
        print("Programdan çıkılıyor...")
        break
    else:
        try:
            sayi = int(sayi)
            kontrol = 0

            for i in range(2, sayi+1):
                if sayi % i == 0:
                    kontrol += 1

            if kontrol == 1:
                print('Girdiğiniz sayı asaldır.')
            else:
                print('Girdiğiniz sayı asal değildir.')
        except ValueError:
            print('Lütfen sadece sayı girişi yapın!')

Sadece şöyle bir sorum olacak. Hata ayıklama kısmında (yani try... except... kod bloğunda) kullanıcı sayı girmediği zaman ValueError hatasını kullanıcıya verebiliyorum ancak kullanıcı hiçbir giriş yapmadığı zaman da ValueError olduğu için yine aynı hata mesajını gösteriyor. Ben kullanıcı giriş yapmadığında farklı bir hata mesajı vermek istiyorum. Bunu nasıl yapabilirim? Onun haricinde yorumlarınızı ve önerilerinizi bekliyorum.
 
soruna cevap verecek bilgim yok ama kodu hızlandırmak adına range'i 2 den sayi+1 e yapmana gerek yok hiç bir sayının kendinin karekökünden büyük asal böleni yoktur o yüzdeen sayi*0.5 +1 yapabilirsin
 
try except yapısından önce if else ile condition olarak input değeri girilip girilmediğini kontrol edebilirsin. python bilmiyorum ama konsept aynı sonuçta
Tam dediğiniz yere şöyle bir kod denedim ve oldu teşekkürler:
Python:
if sayi == "":
    print('Lütfen boş bırakmayınız!')
soruna cevap verecek bilgim yok ama kodu hızlandırmak adına range'i 2 den sayi+1 e yapmana gerek yok hiç bir sayının kendinin karekökünden büyük asal böleni yoktur o yüzdeen sayi*0.5 +1 yapabilirsin
Bunun kodu nasıl hızlandıracağını anlamadım. Kod olarak burada paylaşma şansınız var mı? Benim yazığım kodu kopyalayıp değiştirebilirsiniz.
 
Bir sayının asal olduğunu, sayıya kadarki tüm sayıları kontrol etmek yerine; sayının kare köküne kadar kontrol etmeniz yeterli. (Kökü dahil.)
Python:
import math
def isPrime(number):
    flag = True
    for i in range(2, math.ceil(math.sqrt(number))):
        if(number % i == 0):
            flag = False
            break
    if(number >= 2):
        return flag
    else:
        return False

Ayrıca kontrol kısmını ayrı bir method haline getirebilirsiniz.
 
Son düzenleme:
Bir sayının asal olduğunu, sayıya kadarki tüm sayıları kontrol etmek yerine; sayının kare köküne kadar kontrol etmeniz yeterli. (Kökü dahil.)
Python:
import math
def isPrime(number):
    flag = False
    for i in range(2, math.sqrt(number) + 1):
        if(number % i == 0):
            flag = True
            break
    if(number >= 2):
        return flag
    else:
        return False

Ayrıca kontrol kısmını ayrı bir method haline getirebilirsiniz.
Karekök kısmını anladım ancak henüz fonksiyon ve import gibi şeyleri bilmediğimiz için kodunuzu zar zor anlayabildim. Yine de teşekkür ederim.
@The Anorak
Ben kaynak olarak bu siteyi kullanıyorum? Bilginiz var mıdır? Yoksa ne tür kaynaklar ve gidiş yolu önerirsiniz?
 

Yeni konular

Geri
Yukarı