Python ile Bir Sayının Faktöriyelini Hesaplama
Bu yazımızda, Python ile bir sayının faktöriyelini hesaplayan basit bir program kodlayacağız.
Matematikte 1’den başlayarak belirli bir sayma sayısına kadar olan sayıların çarpımına o sayının faktöriyeli denir ve ilgili sayı sağında ünlem işareti ile gösterilir. Örneğin, 5! = 1*2*3*4*5 = 120 gibi. Ayrıca belirtmek isterim ki, negatif sayıların faktöriyeli olmaz. Bu bilgiler eşiğinde sorumuzu alternatif metotlarla beraber çözelim:
1. İlk çözümümüz için while döngüsü ve if-else koşulundan yararlandık. Bakınız:
number = int(input("Lütfen faktöriyelini bulmak istediğiniz sayıyı giriniz...\n"))
factorial = 1
i = 1
if number >= 0:
while i <= number:
factorial *= i
i += 1
print(f"Girdiğiniz sayının faktöriyeli: {number}! = {factorial}")
else:
print("Negatif sayıların faktöriyeli olmaz!")
Bu kod parçası, kullanıcının girdiği sayının faktöriyelini hesaplar. Kullanıcı negatif bir sayı girerse, program bir hata mesajı yazdırır. Kullanıcı pozitif bir sayı girerse, while
döngüsü, 1’den başlayarak belirtilen sayıya kadar olan tüm sayıları çarparak faktöriyel hesaplar.
2. İkinci çözümümüz de ise if-else koşulu for döngüsü ile kullanılmıştır:
Bu kod parçası, kullanıcının girdiği sayının faktöriyelini for
döngüsü kullanarak hesaplar. Eğer kullanıcı negatif bir sayı girerse, program bir hata mesajı yazdırır.
number = int(input("Lütfen faktöriyelini bulmak istediğiniz sayıyı giriniz...\n"))
factorial = 1
if number >= 0:
for i in range(1, number + 1):
factorial *= i
print(f"Girdiğiniz sayının faktöriyeli: {number}! = {factorial}")
else:
print("Negatif sayıların faktöriyeli olmaz!")
3. Son yöntemimizde ise fonksiyonları kullanarak daha güvenli bir çözüm yapalım:
def hide_the_cache():
cache = {}
asked_numbers = set()
def factorial(x):
if x < 2:
return 1
if x not in cache:
cache[x] = x * factorial(x - 1)
return cache[x]
return factorial, asked_numbers
factorial, asked_numbers = hide_the_cache()
while True:
num = int(input("Lütfen faktöriyelini bulmak istediğiniz sayıyı giriniz (çıkmak için -1)...\n"))
if num == -1:
break
elif num < -1:
print("Negatif sayıların faktöriyeli olmaz!")
elif num in asked_numbers:
print(f"Girdiğiniz sayının faktöriyeli: {num}! = {factorial(num)} (Daha önce sormuştunuz)")
else:
print(f"Girdiğiniz sayının faktöriyeli: {num}! = {factorial(num)}")
asked_numbers.add(num)
Bu kod parçası, memoization tekniği ve kullanıcı girdilerini bir araya getirerek bir sayının faktöriyelini hesaplar. Memoization, daha önce hesaplanmış sonuçları saklayarak aynı hesaplamaların tekrar tekrar yapılmasını önler. Aynı zamanda, bu kod parçası kullanıcının birden fazla sayının faktöriyelini hesaplamasına ve aynı sayının faktöriyelini birden fazla kez sormasına izin verir.
hide_the_cache
fonksiyonu, cache
adında bir sözlük ve asked_numbers
adında bir küme oluşturur. Bu fonksiyon, factorial
fonksiyonunu tanımlar ve factorial
fonksiyonunu ve asked_numbers
kümesini döndürür. factorial
fonksiyonu, parametre olarak bir x
alır ve bu sayının faktöriyelini hesaplar. Eğer x
daha önce hesaplanmışsa, fonksiyon sonucu cache
sözlüğünden döndürür. Eğer x
daha önce hesaplanmamışsa, fonksiyon sonucu hesaplar, cache
sözlüğüne kaydeder ve sonucu döndürür.
Ana program, factorial
fonksiyonunu ve asked_numbers
kümesini hide_the_cache
fonksiyonundan alır ve bir döngü içinde kullanıcıdan sayılar alır. Eğer kullanıcı -1 girerse, program sonlanır. Eğer kullanıcı -1’den küçük bir sayı girerse, program bir hata mesajı yazdırır. Eğer kullanıcı daha önce girdiği bir sayıyı tekrar girerse, program bu sayının daha önce sorulduğunu belirtir ve sonucu hemen döndürür. Eğer kullanıcı yeni bir sayı girerse, program factorial
fonksiyonunu çağırır, sonucu yazdırır ve sayıyı asked_numbers
kümesine ekler.
Bu yaklaşım, factorial
fonksiyonunun aynı sayı için birden fazla kez çalıştırılmasını önler ve hesaplamanın daha hızlı yapılmasını sağlar. Bu sayede oldukça verimli bir şekilde çalışır ve kullanıcıya hızlı yanıtlar sağlar.
Süper anlatım .
sg
ok