Python ile Bir Sayının Faktöriyelini Hesaplama
Bu yazımızda, Python programlama dili ile, bir sayının faktöriyelini hesaplayan alternatifli bir şekilde örnek kodlar yazacağız.
Python ile Bir Sayının Faktöriyelini Hesaplama
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. Faktöriyel olan 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:
- İlk çözümümüz için while döngüsü ve if-else ifadelerinden yararlandık. Bakınız:
1 2 3 4 5 6 7 8 9 10 11 |
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. Kodu çalıştırmak için: Trinket
- İkinci çözümümüz de ise if-else ile for döngüsü ile kullanılmıştır:
1 2 3 4 5 6 7 8 9 |
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!") |
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. Kodu çalıştırmak için: Trinket
- Üçüncü çözümümüzde ise Python ile faktöriyel hesaplama fonksiyon kullanılarak yapılmıştır:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
def hesapla_faktoriyel(number): factorial = 1 if number >= 0: for i in range(1, number + 1): factorial *= i return factorial else: return None number = int(input("Lütfen faktöriyelini bulmak istediğiniz sayıyı giriniz...\n")) factorial = hesapla_faktoriyel(number) if factorial: print(f"Girdiğiniz sayının faktöriyeli: {number}! = {factorial}") else: print("Negatif sayıların faktöriyeli olmaz!") |
Yukarıdaki kod, hesapla_faktoriyel
adında bir fonksiyon tanımlar. Bu fonksiyon, parametre olarak bir number
alır ve bu sayının faktöriyelini hesaplar. Eğer number
negatifse, fonksiyon None
döndürür. Program, kullanıcının girdiği sayının faktöriyelini hesaplamak için bu fonksiyonu kullanır. Eğer kullanıcı negatif bir sayı girerse, “Negatif sayıların faktöriyeli olmaz!” yazdırır. Konu çalıştırmak için: Trinket
- Yine fonksiyon kullanarak ama daha güvenli bir çözüm yapacağız:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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 nedenle, bu kod parçası oldukça verimli bir şekilde çalışır ve kullanıcıya hızlı yanıtlar sağlar. Kodu çalıştırmak için: Trinket
Süper anlatım .
sg
ok