Silnia za pomocą pętli

Silnia za pomocą pętli
L2
  • Rejestracja:prawie 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:18
0

Hej,

To mój pierwszy post na tym forum, więc proszę nie skarćcie mnie :)
Siedzę już trochę czasu i kombinuję, jak stworzyć taką pętlę, żeby nam liczyła silnię, np. silnię z 10, ale nic nie mogę wymyśleć, dlatego zdecydowałem się tu napisać.
Czy moglibyście mi pomóc w tym temacie? Z góry dziękuję za wszelkie posty :)

Spine
  • Rejestracja:około 22 lata
  • Ostatnio:około godziny
  • Postów:6694
0

Liczymy n!.

Przed pętlą inicjujesz zmienną iloczyn = 1.
W pętli for przypisujesz zmiennej iloczyn kolejne mnożenia iloczyn = iloczyn * i, gdzie i należy do przedziału (range) od 1 do n.

zmienna iloczyn zawiera Twój wynik.


🕹️⌨️🖥️🖱️🎮
edytowany 2x, ostatnio: Spine
SI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 6 godzin
0

Jak już to iloczyn = iloczyn + (iloczyn * i), bez tego dostaniesz n a nie żadną silnię.

lion137
Przeczytaj to jeszcze raz.
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:około godziny
  • Postów:6694
0
sig napisał(a):

Jak już to iloczyn = iloczyn + (iloczyn * i), bez tego dostaniesz n a nie żadną silnię.

No co Ty, dobrze napisałem.
Sprawdź jeszcze raz.


🕹️⌨️🖥️🖱️🎮
L2
  • Rejestracja:prawie 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:18
1
Spine napisał(a):

Liczymy n!.

Przed pętlą inicjujesz zmienną iloczyn = 1.
W pętli for przypisujesz zmiennej iloczyn kolejne mnożenia iloczyn = iloczyn * i, gdzie i należy do przedziału (range) od 1 do n.

zmienna iloczyn zawiera Twój wynik.

Dzięki wielkie, działa :D
Z tą różnicą, że jeżeli liczymy silnię np. dla 10, to i musi mieć range od 1 do 11.
To było takie proste, a ja byłem tak bliski rozwiązania i nie mogłem na to wpaść, a robiłem trudniejsze rzeczy <facepalm>

  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad rok
0

Pętle są dla słabych.

Kopiuj
>>> ((lambda f: (f (f))) (lambda f: (lambda x:
...     (1 if x == 0 else x * (f (f) (x - 1)))))) (10)
3628800

>>> 
stivens
Te nawiasy to juz latwiej w Lispie sie czyta
Haskell
  • Rejestracja:prawie 10 lat
  • Ostatnio:około rok
  • Postów:4700
2
Mózg napisał(a):

Pętle są dla słabych.

Kopiuj
>>> ((lambda f: (f (f))) (lambda f: (lambda x:
...     (1 if x == 0 else x * (f (f) (x - 1)))))) (10)
3628800

>>> 

Sprytnie, ale trochę nieczytelne, na pierwszy rzut oka nie wiadomo co ten kod robi. Czytelniejsze będzie

Kopiuj
factorial = lambda x: 1 if x == 0 else x * factorial(x-1)
print(factorial(10))

Zaglądali do kufrów, zaglądali do waliz, nie zajrzeli do d**y - tam miałem socjalizm. Czesław Miłosz
edytowany 1x, ostatnio: Haskell
Pyxis
  • Rejestracja:ponad 7 lat
  • Ostatnio:około godziny
1

Jeszcze szybciej będzie tak:

Kopiuj
from math import factorial
print(factorial(10))

ale nie o to chodziło autorowi...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.