Główna zawartość
Programowanie
Kurs: Programowanie > Rozdział 1
Lekcja 11: Logika i instrukcja if- Zdanie warunkowe if
- Wyzwanie: Skacząca piłeczka
- Więcej interakcji z myszką
- Wyzwanie: Twoja pierwsza aplikacja do malowania
- Wartości logiczne
- Wyzwanie: Analizator Liczb
- Operatory logiczne
- Wyzwanie: Twój pierwszy przycisk
- Wyzwanie: Sprytniejszy przycisk
- If/else - Część 1
- Wyzwanie: Pytanie - odpowiedź
- If/Else - Część 2
- Przegląd: Zdania logiczne i warunkowe
- Liczby losowe
- Projekt: Magiczna ósemka
© 2023 Khan AcademyWarunki użytkowaniapolitykę prywatnościInformacja o plikach cookie
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ą:
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.0 | 0 |
0.217… | 0 |
0.542… | 0 |
0.973… | 0 |
1.0 | 1 |
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?
- czy w funkcji round da się zrobić by losowała z konkretnych liczb np.: 5,2,7(5 głosów)
- Funkcja round służy do zaokrąglania. Funkcja random nie ma możliwości losowania z konkretnych liczb, możesz jednak zrobić tablicę tych liczb i wylosować indeks od 0 do (wielkość tablicy - 1) i następnie zwrócić wartość:
var arr = [5, 2, 7];
var randomNumber = arr[floor(random() * arr.length)];(9 głosów)