If you're seeing this message, it means we're having trouble loading external resources on our website.

Jeżeli jesteś za filtrem sieci web, prosimy, upewnij się, że domeny *.kastatic.org i *.kasandbox.org są odblokowane.

Główna zawartość

Liczby losowe

Dowiedz się, jak wykorzystać funkcje random() do generowania liczb losowych w ProcessingJS i zweryfikować ich wartości, korzystając z instrukcji if.
Używaliśmy naszego warunku if aby sprawdzić jakie mają wartości właściwości naszego środowiska, takie jak aktualna pozycja myszy, czy przewidywania odpowiedzi.
Ale co, jeśli chcemy nieprzewidywalności? Co zrobić, jeśli chcemy by nasz program zachowywał się inaczej przy każdym uruchomieniu?
Na ratunek przychodzi nam losowość!
Możemy wygenerować losowe liczby i użyć warunków if oraz else if by zmienić zachowanie programu, w zależności od tych losowych wartości.
Na przykład:
var randNum = random(0, 10);
if (randNum < 5) {
   text("Cukierek!", 200, 200);
} else {
   text("Psikus!", 200, 200);
}
Nasz program wypisze "Psikus!" przez połowę czasu a przez drugą połowę "Cukierek!".
Jak to działa:
  • Do zmiennej randNum jest przypisana losowa liczba z zakresu 0 aż do 10, jednakże bez samego 10. Zmienna może mieć zatem wartości 0, 0.2, 3.3, 4, 5.5, 6.9, 8, 9, lub nawet 9.99, jednakże nie 10.
  • Warunek sprawdza czy zmienna jest mniejsza niż pięć i jeśli tak jest to wypisuje "Cukierek", w innym przypadku jest wypisywane "Psikus".
Gdy chcemy sprawdzić dokładną wartość, lepiej jest posługiwać się liczbami całkowitymi niż zmiennoprzecinkowymi. Dla komputera liczby nie są równe gdy choćby różnią się kilkanaście miejsc po przecinku. Poniżej jest kilka funkcji które zmienią liczbę zmiennoprzecinkową w całkowitą:
  • round(): Zaokrągla liczbę w dół, jeśli część dziesiętna liczby jest mniejsza niż 5, albo w górę, jeśli część dziesiętna jest równa lub większa 5.
  • ceil(): zawsze zaokrągla liczbę w górę, co w rezultacie daje kolejną liczbę całkowitą.
  • floor(): zawsze zaokrągla w dół, do liczby całkowitej.
Zazwyczaj chcemy wygenerować liczby losowe, które są wybierane stosunkowo równomiernie. Na przykład jeśli symulujemy rzut monetą, wtedy spodziewamy się, że będzie równa szansa na "orła" i "reszkę".
Ten kod realizuje ten cel:
var randFlip = floor(random(0, 2));
if (randFlip === 0) {
   text("Reszka", 200, 200);
} else {
   text("Orzeł", 200, 200);
}
Zmienna randFlip zawsze będzie równa 0 lub 1, ponieważ na wartości zwracanej przez random(0, 2) dodatkowo wywołuje floor().
Aby udowodnić ci, że tak się rzeczywiście dzieje, poniżej jest rezultat wywołania floor() na różnych wartościach zwracanych przez random(0, 2):
random(0, 2)floor(wynik)
0.00
0.217…0
0.542…0
0.973…0
1.01
1.332…1
1.589…1
1.999…1
Wynikiem użycia random() są liczby losowe, zatem nie zawsze będą równomiernie rozłożone jak wartości w powyższej tabeli. Po uruchomieniu dziesięć razy programu rzucającego monetą otrzymasz ciąg tych wszystkich "Orłów" i "Reszek". Jednakże, gdy uruchomisz go tysiąc razy i podliczysz wyniki, zobaczysz, że jest około 50% każdego z "Orłów" i "Reszek".
Jako zasadę ogólną przyjmij, że chcąc uzyskać sprawiedliwy rozkład wartości całkowitych najlepiej jest używać floor() wraz z random().
Funkcja random() jest świetnym sposobem by dodać szczyptę różnorodności do twoich programów. Jednakże, używaj jej uważnie: Zastanów się nad zakresem liczb, jakie generujesz. Zdecyduj, czy potrzebujesz zaokrąglać wygenerowane liczby i w odpowiedni sposób sprawdzaj wartość.
Będziesz mieć szansę spróbować tego samemu, w następnym projekcie!

Chcesz dołączyć do dyskusji?

Rozumiesz angielski? Kliknij tutaj, aby zobaczyć więcej dyskusji na angielskiej wersji strony Khan Academy.