Silnia – n!

Silnią liczby naturalnej n nazywamy iloczyn wszystkich dodatnich liczb naturalnych nie większych niż n. Ponadto przyjmujemy, że 0! = 1. Obliczenia wykonamy w Pythonie stosując metodę iteracyjną.

Przykład 1.

# Obliczanie wartości 17! za pomocą metody iteracyjnej
# 17! = 1 · 2 · 3 · ... · 17

silnia = 1

for p in range(1, 18):
    silnia *= p
    
print("17! =", silnia)

Wprowadzenie dodatkowej zmiennej n ułatwia obliczanie silni dla różnych liczb naturalnych.

Przykład 2.

# Obliczanie wartości n! za pomocą metody iteracyjnej
# n! = 1 · 2 · ... · n

silnia = 1
n = 17

for p in range(1, n + 1):
    silnia *= p
    
print(n, "\b! =", silnia)

Wartość zmiennej n możemy wprowadzić z klawiatury za pomocą funkcji input. Wprowadzona wartość jest łańcuchem znaków (typ string), który do dalszych obliczeń zamieniamy na liczbę całkowitą (typ int).

Przykład 3.

# Obliczanie wartości n! za pomocą metody iteracyjnej
# n! = 1 · 2 · ... · n

print("Obliczanie wartości n! za pomocą metody iteracyjnej")

silnia = 1
n = int(input("Podaj liczbę całkowitą: "))

for p in range(1, n + 1):
    silnia *= p
    
print(n, "\b! =", silnia)

W kolejnym przykładzie zdefiniowałem funkcję silnia, która może być wielokrotnie wywoływana do obliczania wartości wyrażenia n!.

Przykład 4.

# Obliczanie wartości n! za pomocą metody iteracyjnej

# Definicja funkcji silnia
def silnia(n):
    tmp = 1
    for p in range(1, n + 1):
        tmp *= p
    return tmp

print("Obliczanie wartości n! za pomocą metody iteracyjnej")

# Obliczenia w nieskończonej pętli przerywanej po podaniu wartości 0
while True:
    n = int(input("Podaj liczbę całkowitą (0 - koniec obliczeń): "))    
    print(n, "\b! =", silnia(n))
    if n == 0:
        break
    

Zmiana w sposobie wyświetlania wyniku obliczeń polega na użyciu łańcucha formatującego "%d! = %d", do którego podstawiamy podstawiamy krotkę (n, silnia(n)) z wartością zmiennej n obliczoną wartością silni dla niej. Symbol %d oznacza, że w tym miejscu zostanie wstawiona liczba całkowita (integer).

# Obliczenia w nieskończonej pętli przerywanej po podaniu wartości 0
while True:
    n = int(input("Podaj liczbę całkowitą (0 - koniec obliczeń): "))    
    print("%d! = %d" % (n, silnia(n)))
    if n == 0:
        break
    

Możliwe jest zastosowanie łańcucha formatującego postaci "{0}! = {1}" i metody (format()) formatującej ten łańcuch: {0} oznacza pierwszą wartość przekazaną do format() czyli n, {1} oznacza drugą wartość przekazaną do format() - wynik wywołania funkcji silnia(n).

# Obliczenia w nieskończonej pętli przerywanej po podaniu wartości 0
while True:
    n = int(input("Podaj liczbę całkowitą (0 - koniec obliczeń): "))    
    print("{0}! = {1}".format(n, silnia(n)))
    if n == 0:
        break
     

Zamiast tych starszych sposobów, można użyć tzw. f-strings i poprawić czytelność kodu:

# Obliczenia w nieskończonej pętli przerywanej po podaniu wartości 0
while True:
    n = int(input("Podaj liczbę całkowitą (0 - koniec obliczeń): "))    
    print(f"{n}! = {silnia(n)}")
    if n == 0:
        break
     

Stosując pętlę iteracyjną możemy obliczać wartości funkcji.

Przykład 5.

# Tablica wartości funkcji silnia

# Definicja funkcji silnia
def silnia(n):
    tmp = 1
    for p in range(1, n + 1):
        tmp *= p
    return tmp

print("Tablica wartości funkcji silnia")

for n in range(21):  
    print(f"{n}! = {silnia(n)}")