All language subtitles for 125 Random Number Generation in Javascript_ Building a Love Calculator.en_US

af Afrikaans
sq Albanian
am Amharic
ar Arabic Download
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bn Bengali
bs Bosnian
bg Bulgarian
ca Catalan
ceb Cebuano
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
tl Filipino
fi Finnish
fr French
fy Frisian
gl Galician
ka Georgian
de German
el Greek
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
km Khmer
ko Korean
ku Kurdish (Kurmanji)
ky Kyrgyz
lo Lao
la Latin
lv Latvian
lt Lithuanian
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mn Mongolian
my Myanmar (Burmese)
ne Nepali
no Norwegian
ps Pashto
fa Persian
pl Polish
pt Portuguese
pa Punjabi
ro Romanian
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
st Sesotho
sn Shona
sd Sindhi
si Sinhala
sk Slovak
sl Slovenian
so Somali
es Spanish
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
te Telugu
th Thai
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
or Odia (Oriya)
rw Kinyarwanda
tk Turkmen
tt Tatar
ug Uyghur
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:00,480 --> 00:00:01,080 All right guys. 2 00:00:01,110 --> 00:00:02,440 Welcome back. 3 00:00:02,460 --> 00:00:07,590 In this module we're going to learn about some other really useful features of Javascript, for example 4 00:00:07,590 --> 00:00:09,930 randomization and control flow. 5 00:00:10,190 --> 00:00:15,150 And I believe in learning through doing, so while we're picking up all of these skills, we're going to 6 00:00:15,150 --> 00:00:17,370 be building a love calculator. 7 00:00:17,550 --> 00:00:19,860 So this is a bit of a throwback to the 90s. 8 00:00:19,890 --> 00:00:26,460 And for those of you guys who are snapchatting away, then, you know, you might not remember this, but it was 9 00:00:26,580 --> 00:00:32,310 kind of a complicated process where you would put down one person's name, then your crush’s name, and 10 00:00:32,310 --> 00:00:40,050 then through a process of complicated maths, you would arrive at some random percentage, basically, that 11 00:00:40,080 --> 00:00:43,240 dictated how well matched these two people were. 12 00:00:43,350 --> 00:00:46,710 So let's try and replicate this using Javascript code. 13 00:00:46,710 --> 00:00:52,840 Now, I hate to break it to you, but it's not really a love calculator. It doesn't actually work. 14 00:00:52,890 --> 00:00:59,980 It's essentially a way of generating a random number to satisfy young girls’ needs to predict the future. 15 00:01:00,240 --> 00:01:02,830 And we can replicate this using code. 16 00:01:02,910 --> 00:01:09,570 So Javascript has a really handy way of generating random numbers. As you can imagine, especially when 17 00:01:09,570 --> 00:01:11,280 you're creating things like games, 18 00:01:11,340 --> 00:01:17,490 you need a lot of random numbers to be generated. So you can do this using Javascript by simply writing 19 00:01:17,550 --> 00:01:19,320 Math.random(). 20 00:01:19,530 --> 00:01:26,730 And this is a function that generates a random number. And the random number that gets generated is a 21 00:01:26,730 --> 00:01:35,670 16 decimal place number, and it can be any number between 0 and 0.9999999. 22 00:01:35,670 --> 00:01:39,870 So essentially it never reaches 1. And the number that you get out, 23 00:01:39,870 --> 00:01:46,410 so in this case n, will be different every single time you run the code, but it will always be between 24 00:01:46,410 --> 00:01:52,290 0 and 0.9 to 16 decimal places, and it never ever reaches 1. 25 00:01:52,290 --> 00:01:57,780 Now this is useful because it allows us to generate up to a billion random numbers. 26 00:01:57,780 --> 00:02:03,810 So, for example, say if I were to say, variable n = Math.random, and remember we need to 27 00:02:03,810 --> 00:02:08,170 use the parentheses to run the function even though it doesn't take an input. 28 00:02:08,190 --> 00:02:13,490 Now say that in this case we get 0.3647 etc. etc.. 29 00:02:13,530 --> 00:02:15,960 Now say if we were trying to simulate a dice roll, 30 00:02:15,960 --> 00:02:21,810 so we have 6 possibilities. When we roll a dice we get any number between 1 and 6, right? 31 00:02:22,080 --> 00:02:29,370 So how do we take this random number that we get from Math.random and turn it into a number between 32 00:02:29,370 --> 00:02:30,640 1 and 6? 33 00:02:30,810 --> 00:02:33,850 Well, we could first multiply it by 6, 34 00:02:33,870 --> 00:02:36,710 so we get 2.188. 35 00:02:36,720 --> 00:02:40,540 Next we take that number and we perform Math.floor. 36 00:02:40,560 --> 00:02:44,130 So you can see here, from our functions knowledge, we know that 37 00:02:44,160 --> 00:02:50,100 n in this case is being used as an input to this function floor, which essentially rounds it down to 38 00:02:50,100 --> 00:02:51,400 the nearest whole number. 39 00:02:51,420 --> 00:02:52,810 In this case it would be 2. 40 00:02:52,890 --> 00:02:57,380 And now we have a number that we can work with and we can give back to the user. 41 00:02:57,480 --> 00:03:03,570 So I'm going to open up my Snippets inside Chrome, and I'm going to create a variable called n that 42 00:03:03,570 --> 00:03:05,490 is equal to Math.random(), 43 00:03:05,580 --> 00:03:10,560 and then I'm going to console.log whatever the number n might be. 44 00:03:10,560 --> 00:03:17,070 So now I'm going to run my code and you can see we get 0.187 and then we get 45 00:03:17,210 --> 00:03:21,630 0.03, 0.147, 0.8446. 46 00:03:21,630 --> 00:03:29,220 So you can see that they’re random numbers between 0 and 1 and it never reaches 1, but it can in fact 47 00:03:29,220 --> 00:03:30,400 be 0. 48 00:03:30,840 --> 00:03:34,840 So it would be 0.0 to 16 decimal places. 49 00:03:34,920 --> 00:03:40,980 That is possible with Math.random. And we know this because if we head over to the MDN Developer 50 00:03:40,990 --> 00:03:47,490 Docs and we search for Math.random, then it tells us that this function creates a floating point number, 51 00:03:47,550 --> 00:03:57,210 so a number that has decimal places, and it is a pseudo random number in the range from 0 inclusive up 52 00:03:57,210 --> 00:03:59,100 to but not including 1, 53 00:03:59,100 --> 00:04:01,640 so hence the 0.99999. 54 00:04:01,710 --> 00:04:05,410 And then you can use this number to scale to your desired range. 55 00:04:05,430 --> 00:04:12,030 So say if we wanted to simulate a dice roll using our code, then we would be able to scale this up if 56 00:04:12,090 --> 00:04:19,980 we simply did n = n * 6. And if we run the code now, then you can see that we're 57 00:04:19,980 --> 00:04:24,940 getting numbers between 0 and 5. 58 00:04:24,960 --> 00:04:27,270 Now it never ever reaches 6. 59 00:04:27,270 --> 00:04:33,040 The highest number we got was 5.99 and the lowest was 0.2 something. 60 00:04:33,060 --> 00:04:42,450 So remember if we do Math.floor on this, then we will get numbers that are between 0 and 5, and you can 61 00:04:42,450 --> 00:04:46,260 run this for as many times as you wish but it will never show 6. 62 00:04:46,260 --> 00:04:49,560 So our range currently is between 0 and 5, 63 00:04:49,560 --> 00:04:55,590 so, in order to increase it to 1 and 6, to simulate that dice roll, because when we roll the dice we never 64 00:04:55,590 --> 00:04:56,310 get 0, 65 00:04:56,310 --> 00:05:02,690 instead we get a range between 1 and 6, then all we need to do is just to add 1 over here. 66 00:05:02,780 --> 00:05:10,430 So now we get the range between 1 all the way through to 6, and this is what's called a pseudo random 67 00:05:10,430 --> 00:05:11,650 number generator. 68 00:05:11,810 --> 00:05:18,980 And the reason why it's pseudo is because a computer is essentially a whole bunch of switches, just a 69 00:05:19,040 --> 00:05:27,200 giant box of many many billions of switches, and, depending on whether the switch is on or off, you essentially 70 00:05:27,200 --> 00:05:30,360 get 1 or 0, and it's through these 1s and 0s 71 00:05:30,380 --> 00:05:33,870 it does all this computing and all of this glorious work. 72 00:05:33,920 --> 00:05:40,160 But there's one thing that it's not very good at, and that is being random. Whereas in nature it's very 73 00:05:40,160 --> 00:05:46,180 easy to get randomness, in a computer, because it's a completely deterministic process, 74 00:05:46,340 --> 00:05:49,880 it’s not very easy to get a true random number. 75 00:05:49,970 --> 00:05:56,270 So people have come up with all sorts of ways and mathematical formulas to get this nonrandom computer 76 00:05:56,330 --> 00:06:03,470 to generate what looks like or appears to be, at least statistically, random numbers. 77 00:06:03,470 --> 00:06:08,450 Now if you're interested in learning more about pseudo random number generators or what's the difference 78 00:06:08,450 --> 00:06:13,850 between random and pseudo random, then take a look at the resources section of this lesson. 79 00:06:13,850 --> 00:06:16,460 There's a link to this video by Khan Academy 80 00:06:16,460 --> 00:06:20,320 that’s really really good at explaining this in more detail. 81 00:06:20,350 --> 00:06:25,200 So view this as a bit of extra reading or extra curricular work if you want. 82 00:06:25,310 --> 00:06:31,310 And, if we just review that process, we created a variable called n that is equal to whatever we get 83 00:06:31,310 --> 00:06:37,400 back from the Math.random function. And we know that Math.random gives us a number within the 84 00:06:37,400 --> 00:06:43,820 range between 0 to 0.9 to 16 decimal places, so 0.9999999. 85 00:06:43,820 --> 00:06:50,070 Now, it can be any number in that range, but it's not very useful to us until we scale it. 86 00:06:50,120 --> 00:06:55,640 So we take that number and we multiply it by whatever range we need. 87 00:06:55,640 --> 00:07:01,640 So if we need numbers between 1 and 12 then we would multiply it by 12, if we need it as a dice then 88 00:07:01,640 --> 00:07:06,260 we would maybe multiply it by 6 because we want numbers between 1 and 6. 89 00:07:06,320 --> 00:07:11,590 So this then changes the range from 0 to 5.99999, 90 00:07:11,650 --> 00:07:15,580 and we can now get any number within that range from this code. 91 00:07:15,590 --> 00:07:19,900 Now very rarely will you want to use the random number as a floating point number, 92 00:07:20,150 --> 00:07:27,140 so you tend to use Math.floor to round that number down to the nearest whole number, 93 00:07:27,290 --> 00:07:30,380 and that range then becomes 0 to 5. 94 00:07:30,380 --> 00:07:36,620 Now, finally, because we want a range for our dice between 1 and 6, then all we need to do is add 1 to 95 00:07:36,620 --> 00:07:42,470 our code and we end up with code that generates random numbers between 1 and 6. 96 00:07:42,470 --> 00:07:44,730 So now here's your challenge. 97 00:07:44,870 --> 00:07:49,190 As we said we're going to be building a love calculator. 98 00:07:49,790 --> 00:07:56,540 And the way the love calculators work is that you enter two names and it should give you back a percentage 99 00:07:56,750 --> 00:08:01,720 between 1 and 100, and that number is supposed to have some sort of meaning. 100 00:08:01,730 --> 00:08:05,820 So I want you, as a challenge, to create a love calculator. 101 00:08:06,050 --> 00:08:12,650 So it should have two prompts that ask for the names of the two people, and then it should be able to 102 00:08:12,830 --> 00:08:19,500 completely ignore that and then calculate a random number that is a percentage. 103 00:08:19,520 --> 00:08:24,420 So your random number generator should generate a number between 1 and 100. 104 00:08:24,440 --> 00:08:30,350 And finally you should give this information back to the user in the form of an alert telling them what 105 00:08:30,350 --> 00:08:32,360 is their love score. 106 00:08:32,660 --> 00:08:38,240 So pause the video now and see if you can complete this challenge. 107 00:08:38,360 --> 00:08:38,650 All right. 108 00:08:38,650 --> 00:08:43,360 So let's clear the screen and start from the beginning. 109 00:08:43,370 --> 00:08:48,020 So the first thing I'm going to do is I'm going to create two prompts. Now, because we're not actually 110 00:08:48,020 --> 00:08:51,530 doing anything with the values that they're giving us, 111 00:08:51,530 --> 00:08:56,420 we’re not going to save the data that the user gives us into a variable, because we're not actually going to 112 00:08:56,420 --> 00:08:57,150 be using it. 113 00:08:57,290 --> 00:09:00,340 It's just there for authenticity’s sake. 114 00:09:00,380 --> 00:09:05,610 So the next thing is where the real stuff happens and which is where the randomization comes in. 115 00:09:05,630 --> 00:09:12,740 So let's create a very well called loveScore, and let's create this using Math.random. 116 00:09:12,980 --> 00:09:18,850 And, remember, this will give us a number between 0 and up to but not including 1. 117 00:09:18,860 --> 00:09:26,570 So now, if we wanted this number to be between 1 and 100, we would have to multiply that by 100. 118 00:09:26,870 --> 00:09:34,030 So, if we console.log this as it is, then you can see that we're getting numbers between 0 and 99, 119 00:09:34,100 --> 00:09:40,160 and also they have lots and lots of decimal places after the number. 120 00:09:40,160 --> 00:09:41,230 So let's change that. 121 00:09:41,240 --> 00:09:42,690 Let's round that number down. 122 00:09:42,710 --> 00:09:50,810 So let's say loveScore = Math.floor the previous value of loveScore. 123 00:09:51,140 --> 00:09:56,920 So now, if we hit run, we're getting 75, 17, so we're getting whole numbers now, 124 00:09:57,110 --> 00:10:01,310 but it still does not go all the way up to 100, 125 00:10:01,460 --> 00:10:03,600 but it can include 0. 126 00:10:03,770 --> 00:10:11,990 So, in order to fix this, we are going to add 1 to the value, and that shifts our range up by 1, moving 127 00:10:11,990 --> 00:10:15,380 it from 0 to 99 to 1 to 100. 128 00:10:15,380 --> 00:10:17,720 So now that we've got our loveScore, 129 00:10:17,900 --> 00:10:22,130 we can send this to the user using an alert, 130 00:10:22,190 --> 00:10:26,540 “Your love score is “ + loveScore. 131 00:10:26,930 --> 00:10:35,270 So now, if we uncomment our prompt and hit run, then it’ll say, “What is your name?”, and it’ll say, “What is their 132 00:10:35,270 --> 00:10:36,200 name?”, 133 00:10:36,740 --> 00:10:39,750 and of course none of that information is used 134 00:10:39,800 --> 00:10:41,470 and it just gets discarded, 135 00:10:41,600 --> 00:10:48,290 because at the end of the day love is a random process. And we get back a loveScore. And I can also 136 00:10:48,380 --> 00:10:53,460 add a percentage at the end of this, and now it gives us a love score. 137 00:10:53,490 --> 00:10:55,150 So pretty cool, right? Now, 138 00:10:55,160 --> 00:11:03,220 wouldn’t it be nice if we could give them a custom message depending on how high or how low their score is? 139 00:11:03,230 --> 00:11:07,530 So that's what we'll explore in the next lesson when we learn about control flow 140 00:11:07,610 --> 00:11:10,100 and if else statements using Javascript. 141 00:11:10,100 --> 00:11:13,270 So for all of that and more, I'll see you on the next lesson. 14328

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.