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

Ако си зад уеб филтър, моля, увери се, че домейните *. kastatic.org и *. kasandbox.org са разрешени.

Основно съдържание

Случайни числа

Научи как да генерираш случайни числа в ProcessingJS, като използваш функцията random() и провериш техните стойности с if условия.
Досега сме използвали if операторите, за да проверяваме стойности, свързани със средата, като например позицията на мишката и да реагираме по предсказуем начин.
Но какво да направим ако искаме непредсказуемост? Ако искаме програмата да бъде различна с всяко нейно пускане?
Произволността е нашият спасител!
Можем да генерираме произволни числа и да използваме if и else if операторите, за да променим действията на програмата, според случайните стойности.
Например:
var randNum = random(0, 10);
if (randNum < 5) {
   text("Пакост!", 200, 200);
} else {
   text("Лакомство!", 200, 200);
}
Програмата изкарва "Пакост!" през половината време и "Лакомство!" през другата половина.
Ето как работи:
  • На променливата randNum е възложено произволно число от 0 до 10. Възможни стойности са 0; 0,2; 3,3; 4; 5,5; 6,9; 8; 9 или 9,9, но не и самата десятка.
  • Условието проверява, ако стойността е по-малка от 5, изкарвайки "Пакост!" в този случай и "Лакмоство!" в противен случай.
Понякоа е по-лесно да работим с цели числа, вместо с десетични, за да можем да проверяваме точни стойности. Ето няколко функции, които превръщат десетични числа в цели:
  • round(): Закръгля надолу до най-близкото цяло число, ако десетичната част е по-малкa от 0,5 и закръгля нагоре ако десетичната част е 0,5 или по-голяма.
  • ceil(): Винаги закръгля нагоре до следващото цяло число.
  • floor(): Винаги закръгля надолу до цяло число.
По принцип искаме да генерираме произволни числа с еднакъв шанс да бъдат избрани. Например, ако симулираме хвърляне на моента, очакваме да има равен шанс за "Ези" или "Тура".
Този код постига тази цел:
var randFlip = floor(random(0, 2));
if (randFlip === 0) {
   text("Ези", 200, 200);
} else {
   text("Тура", 200, 200);
}
Променливата randFlip винаги ще бъде 0 или 1, тъй като повиква floor() на върнатата стойност от random(0,2).
За да разбереш по-ясно защо това е така, тук са дадени резултатите от floor() функцията, повикана върху различни стойности от random(0,2):
random(0, 2)floor(result)
0.00
0.217…0
0.542…0
0.973…0
1.01
1.332…1
1.589…1
1.999…1
Получените от random() стойности са произволни, затова няма да изглеждат толкова равномерно разпределени, колкото стойностите в таблицата. Ако пуснеш програмата за хвърляне на монети, може да видиш низ ицяло от "Ези" или "Тура". Обаче, ако я пуснеш над хиляда пъти и следиш резултите, ще видиш "Ези" през 50% от времето и "Тура" през другите 50%.
Като основно правило, когато искаме да получим равномерно разпределение на цели числа, най-добре e да използваме floor() с random().
Функцията random() е стахотен начин да добавиш малко разнообразие към твоите програми. Въпреки това я използвай внимателно: открий обхвата от стойности, който генерираш, реши дали трябва да закръглиш и проверявай стойностите по подходящ начин.
Ще имаш възможността сам да пробваш в следващия проект!

Искаш ли да се присъединиш към разговора?

Все още няма публикации.
Разбираш ли английски? Натисни тук, за да видиш още дискусии в английския сайт на Кан Академия.