All language subtitles for 039 Random Module.en

af Afrikaans
ak Akan
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bem Bemba
bn Bengali
bh Bihari
bs Bosnian
br Breton
bg Bulgarian
km Cambodian
ca Catalan
ceb Cebuano
chr Cherokee
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
ee Ewe
fo Faroese
tl Filipino
fi Finnish
fy Frisian
gaa Ga
gl Galician
ka Georgian
de German
el Greek
gn Guarani
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ia Interlingua
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
rw Kinyarwanda
rn Kirundi
kg Kongo
ko Korean
kri Krio (Sierra Leone)
ku Kurdish
ckb Kurdish (Soranรฎ)
ky Kyrgyz
lo Laothian
la Latin
lv Latvian
ln Lingala
lt Lithuanian
loz Lozi
lg Luganda
ach Luo
lb Luxembourgish
mk Macedonian
mg Malagasy
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mfe Mauritian Creole
mo Moldavian
mn Mongolian
my Myanmar (Burmese)
sr-ME Montenegrin
ne Nepali
pcm Nigerian Pidgin
nso Northern Sotho
no Norwegian
nn Norwegian (Nynorsk)
oc Occitan
or Oriya
om Oromo
ps Pashto
fa Persian
pl Polish
pt-BR Portuguese (Brazil)
pt Portuguese (Portugal)
pa Punjabi
qu Quechua
ro Romanian
rm Romansh
nyn Runyakitara
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
sh Serbo-Croatian
st Sesotho
tn Setswana
crs Seychellois Creole
sn Shona
sd Sindhi
si Sinhalese
sk Slovak
sl Slovenian
so Somali
es Spanish
es-419 Spanish (Latin American)
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
tt Tatar
te Telugu
th Thai
ti Tigrinya
to Tonga
lua Tshiluba
tum Tumbuka
tr Turkish
tk Turkmen
tw Twi
ug Uighur
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
wo Wolof
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:00,250 --> 00:00:03,910 One of the first things I want to talk about is randomisation. 2 00:00:04,390 --> 00:00:07,930 And this is a concept that we're super familiar with. 3 00:00:08,530 --> 00:00:10,690 Randomization is really, 4 00:00:10,690 --> 00:00:14,890 really important when we want to create computer programs that have a degree of 5 00:00:14,950 --> 00:00:19,540 unpredictability. Now, the biggest category of that is, of course, games right? 6 00:00:19,840 --> 00:00:23,440 Can you imagine if you had to play Tetris and every single time, 7 00:00:23,440 --> 00:00:25,780 the block that fell down was like predictable. 8 00:00:26,020 --> 00:00:30,430 You always knew that it was going to be a T and then it was going to be an L 9 00:00:30,460 --> 00:00:32,440 like, there would be no fun in that right? 10 00:00:32,770 --> 00:00:37,770 So how do we create this randomness for our programs? Now in nature and in our 11 00:00:38,950 --> 00:00:42,460 everyday lives, it's really easy to create randomness. 12 00:00:42,760 --> 00:00:46,480 If you splash some paint on a canvas, that's going to be pretty random. 13 00:00:46,600 --> 00:00:51,340 If you take a look at the TV static from the analog TVs, 14 00:00:51,610 --> 00:00:53,890 that's also a whole bunch of randomness there. 15 00:00:54,370 --> 00:00:56,440 But when we're talking about computers, 16 00:00:56,740 --> 00:01:00,670 then these machines are what we would call deterministic. 17 00:01:00,910 --> 00:01:05,910 They will perform repeatable actions in a fully predictable way. 18 00:01:06,400 --> 00:01:11,400 So how do we wrangle these machines that operate basically on ones and zeros to 19 00:01:11,920 --> 00:01:15,280 get them to create some random numbers? Well, 20 00:01:15,280 --> 00:01:19,150 there's a whole bunch of maths that can be applied to create what are called a 21 00:01:19,180 --> 00:01:21,490 pseudo-random number generators. 22 00:01:21,910 --> 00:01:25,420 And the one that Python uses is something called the Mersenne Twister. 23 00:01:25,900 --> 00:01:28,180 And if you really want to read about it, 24 00:01:28,210 --> 00:01:32,020 then you can have a look on Wikipedia and take a look under the algorithmic 25 00:01:32,020 --> 00:01:36,310 detail. But to be honest, it's a little bit too much information for anybody, 26 00:01:36,670 --> 00:01:41,050 unless you're really interested in these types of number generators. 27 00:01:41,560 --> 00:01:43,000 But what I recommend though, 28 00:01:43,000 --> 00:01:47,980 is a free video from the Khan Academy where they explain pseudorandom number 29 00:01:47,980 --> 00:01:50,950 generators, and it's really well produced. 30 00:01:50,980 --> 00:01:55,980 And it tells you a lot of different aspects of pseudorandom number generation. 31 00:01:57,010 --> 00:01:57,790 Have a look at that 32 00:01:57,790 --> 00:02:02,020 if you're interested to learn a little bit more about pseudorandom number 33 00:02:02,020 --> 00:02:05,650 generators. We've talked a lot about randomness, 34 00:02:05,710 --> 00:02:07,180 but lets see it in action. 35 00:02:07,210 --> 00:02:11,980 Let's write some code and produce some random numbers. Head over to the Day 4 36 00:02:11,980 --> 00:02:15,340 starting Repl and then go ahead and fork your own copy. 37 00:02:15,760 --> 00:02:18,970 We know that we want to get hold of some random numbers, 38 00:02:19,300 --> 00:02:23,950 but we don't really want to implement the Mersenne Twister ourselves because 39 00:02:24,220 --> 00:02:28,480 it's horrendously complicated using lots and lots of math and probably it'll 40 00:02:28,480 --> 00:02:33,250 take us months to write the code for. So how can we get random numbers? 41 00:02:33,880 --> 00:02:37,870 If you think about it, it's a little bit like searching for something in Google. 42 00:02:38,530 --> 00:02:43,530 The Google algorithm is horrendously complicated and it's taken them years and 43 00:02:43,660 --> 00:02:48,370 years to refine and perfect to such an extent where I think Google knows me 44 00:02:48,370 --> 00:02:50,980 better than myself because when I search for something, 45 00:02:50,980 --> 00:02:53,410 it always gives me the most relevant results. 46 00:02:53,920 --> 00:02:57,760 And if you're questioning the complexity of the Google algorithm, 47 00:02:58,090 --> 00:03:02,980 just go to Bing and try searching for something and see how relevant the results 48 00:03:02,980 --> 00:03:06,100 are. So they have the super complex algorithm, 49 00:03:06,130 --> 00:03:09,340 which we're never going to get a chance to see, let alone understand. 50 00:03:09,850 --> 00:03:14,850 And yet every day we're able to search things on Google and use this Google 51 00:03:15,100 --> 00:03:17,680 algorithm to get the things that we want, 52 00:03:18,010 --> 00:03:21,640 like the air speed velocity of a laden swallow. 53 00:03:22,240 --> 00:03:26,920 Now we can do the same thing when we want to generate random numbers. Because 54 00:03:26,920 --> 00:03:29,410 this is such frequently needed functionality, 55 00:03:29,710 --> 00:03:33,190 the Python team have already created a random module. 56 00:03:33,700 --> 00:03:38,700 So if you head over to askpython.com and search for the Python random module, 57 00:03:39,100 --> 00:03:42,700 then you'll be able to see the documentation for this random module. 58 00:03:43,180 --> 00:03:46,750 And you can see that it contains a whole bunch of functions that you can use 59 00:03:47,170 --> 00:03:50,110 that allows you to generate random integers, 60 00:03:50,110 --> 00:03:53,650 so random whole numbers or random floating point numbers. 61 00:03:54,040 --> 00:03:59,040 So let's see how we can tap into this random module. In order to tap into the 62 00:03:59,260 --> 00:04:02,410 random module, we first have to import it. 63 00:04:02,440 --> 00:04:07,440 So we write import random. And now we're able to use this random module in our 64 00:04:10,000 --> 00:04:11,800 main.py code. 65 00:04:12,580 --> 00:04:17,470 We can start using the documentation to generate a random integer. For example, 66 00:04:17,710 --> 00:04:22,710 they show us in the code snippet here that we could generate a random integer by 67 00:04:23,320 --> 00:04:27,430 using the randint function, providing an a and B. 68 00:04:27,850 --> 00:04:31,480 And it will return a random integer between a and b, 69 00:04:31,630 --> 00:04:33,700 including both of those numbers. 70 00:04:34,150 --> 00:04:37,390 And there's even a little bit of code snippet to show us how it's done. 71 00:04:37,720 --> 00:04:42,720 So this line of code generates a random whole number between 100 and 200 and 72 00:04:44,110 --> 00:04:48,310 including those two numbers. So it could be anything between those two numbers. 73 00:04:49,060 --> 00:04:51,340 So let's see if we can implement this in our code. 74 00:04:51,820 --> 00:04:56,820 Let's say that we want to create a random integer and we use the same code that 75 00:04:56,950 --> 00:04:59,650 we saw in the code snippet where we say random, 76 00:04:59,890 --> 00:05:04,600 that's tapping into this module here, .randint. 77 00:05:04,960 --> 00:05:09,960 And then we at a set of parentheses and then we specify the start, and 78 00:05:10,360 --> 00:05:11,350 then the end. 79 00:05:11,830 --> 00:05:16,830 So this is basically a range of numbers that we're specifying, any integer 80 00:05:16,960 --> 00:05:18,670 between 1 and 10. 81 00:05:19,480 --> 00:05:24,480 And now we can go ahead and print our random integer, just like that. 82 00:05:26,050 --> 00:05:28,060 And every single time I run it, 83 00:05:28,330 --> 00:05:32,050 you'll notice that I'll get a different number or maybe sometimes the same, 84 00:05:32,140 --> 00:05:35,650 but it's a random number between the range that I've specified. 85 00:05:37,000 --> 00:05:41,890 Now I've mentioned that the random module is a Python module. 86 00:05:41,980 --> 00:05:44,860 So what exactly is a module? Well, 87 00:05:44,890 --> 00:05:49,480 you've seen that we've mostly been writing our code all on the same page in a 88 00:05:49,480 --> 00:05:50,920 sort of script style, right? 89 00:05:50,920 --> 00:05:53,980 And everything just kind of gets executed from top to bottom. 90 00:05:54,460 --> 00:05:58,490 But sometimes your code will get so long because you're trying to create 91 00:05:58,490 --> 00:06:03,490 something complicated and it's no longer possible to understand what's going on 92 00:06:03,620 --> 00:06:06,140 in such a large piece of code. 93 00:06:06,650 --> 00:06:11,650 What people will do in that case is to split the code up into individual modules 94 00:06:13,190 --> 00:06:18,190 where each module is responsible for a different bit of functionality of your 95 00:06:18,380 --> 00:06:22,430 program. And if you have a complex project with many, many modules, 96 00:06:22,700 --> 00:06:25,520 then you could have collaboration on your project, right? 97 00:06:25,550 --> 00:06:29,630 Lots of people could be working on it, each person working on a different thing. 98 00:06:29,990 --> 00:06:31,820 Say if a factory was building a car, 99 00:06:32,150 --> 00:06:36,260 it wouldn't make sense for one person to build the entire car from wheels, 100 00:06:36,260 --> 00:06:38,810 axles to chassis, that's crazy. 101 00:06:38,960 --> 00:06:43,220 Instead you have different people working on different modules like the tire 102 00:06:43,220 --> 00:06:47,000 module or the chassis module or the engine module. 103 00:06:47,420 --> 00:06:49,220 And then once they put everything together, 104 00:06:49,490 --> 00:06:53,990 you end up with the final car or in our case, the final program. 105 00:06:54,740 --> 00:06:59,570 So we know that the random module is a module that the Python team created to 106 00:06:59,570 --> 00:07:04,570 make it easier for us to generate our random numbers without needing to get into 107 00:07:04,850 --> 00:07:09,850 the complexities of all of the math that's required to generate pseudorandom 108 00:07:09,920 --> 00:07:10,753 numbers. 109 00:07:10,970 --> 00:07:15,080 But how can we create our own modules and how do modules work anyways? 110 00:07:15,260 --> 00:07:19,430 Well, it's actually very simple. If you go ahead and click on the files icon, 111 00:07:19,490 --> 00:07:23,120 you can see, we currently only have one file that we're writing in, 112 00:07:23,420 --> 00:07:25,100 which is main.py, 113 00:07:25,130 --> 00:07:29,150 the Python file. And the main.py is the entry point to our program. 114 00:07:29,300 --> 00:07:33,590 This is the file that will be executed when we run our code. Now, 115 00:07:33,590 --> 00:07:37,100 if I go ahead and click on this icon to add a new file, 116 00:07:37,490 --> 00:07:42,490 let's say I call it my_module.py and I create a new Python file. 117 00:07:45,650 --> 00:07:50,270 And inside my module, I'm going to maybe work on something else. 118 00:07:50,300 --> 00:07:53,270 Let's say I want into the store, the value of PI. 119 00:07:55,850 --> 00:07:57,260 Okay. I think that's all I remember. 120 00:07:57,680 --> 00:08:02,360 So I know the value of PI and I want to be able to use it in my different 121 00:08:02,360 --> 00:08:06,080 programs. Now that I've created my_module.py, well, 122 00:08:06,080 --> 00:08:11,080 now I can use my module wherever I want just by importing it. So I could import 123 00:08:13,250 --> 00:08:17,480 my_module. And now down here, I can say, 124 00:08:17,900 --> 00:08:22,900 let's go ahead and print my_module.pi. 125 00:08:24,440 --> 00:08:28,610 And now if I go ahead and comment out of this code and hit run, 126 00:08:29,060 --> 00:08:29,810 then you'll see, 127 00:08:29,810 --> 00:08:34,810 we get that value of PI that got dragged in because I imported my module, 128 00:08:35,780 --> 00:08:40,370 but now we've got our code separated out into separate modules that are 129 00:08:40,370 --> 00:08:42,110 responsible for different things. 130 00:08:42,650 --> 00:08:46,460 And that is how the random module works as well. 131 00:08:46,880 --> 00:08:51,590 So I'm going to go ahead and delete all of this stuff relating to PI, 132 00:08:51,890 --> 00:08:55,500 but you can keep yours if you want, if you wanna keep it for reference. 133 00:08:57,390 --> 00:08:59,910 Coming back to creating random numbers. 134 00:09:00,300 --> 00:09:03,840 We've seen how we can create random whole numbers, 135 00:09:04,080 --> 00:09:08,730 but what if I wanted to create a random floating point number? Well, 136 00:09:08,730 --> 00:09:12,390 it tells me how to do it in the AskPython documentation. 137 00:09:12,780 --> 00:09:17,780 And all I have to do is use the random module that contains the random function 138 00:09:18,180 --> 00:09:23,180 and it will return a random floating-point number between 0 and 1. 139 00:09:24,480 --> 00:09:29,130 But it's really important to note that in this case it doesn't actually include 140 00:09:29,130 --> 00:09:34,050 1. So it goes up to like 0.9999999, but not including 1. 141 00:09:34,590 --> 00:09:36,150 Let's go ahead and try that out. 142 00:09:36,510 --> 00:09:41,190 So we'll say random_float = random.random 143 00:09:41,250 --> 00:09:45,990 and then I set of parentheses. And this will give me output some sort of number 144 00:09:46,320 --> 00:09:50,040 in the interval between 0 and 1, but not including 1. 145 00:09:50,910 --> 00:09:53,430 So let's go ahead and see if it works. 146 00:09:56,820 --> 00:09:57,210 First, 147 00:09:57,210 --> 00:10:01,650 we print a random integer between 1 and 10 and then we print our random float 148 00:10:01,710 --> 00:10:06,210 between 0 and 1. And every time we run the code, 149 00:10:06,240 --> 00:10:09,210 you'll notice that we get different random numbers. 150 00:10:10,290 --> 00:10:11,610 Now here's a question. 151 00:10:12,420 --> 00:10:17,420 This random function always generates a number between 0 and 1 and it has 152 00:10:18,210 --> 00:10:19,560 many decimal places. 153 00:10:20,160 --> 00:10:25,050 But what if I wanted a random floating-point number between 0 and 5? 154 00:10:25,980 --> 00:10:28,620 How might we do that? Now 155 00:10:28,680 --> 00:10:33,510 it's not as complicated as you think it is and you'll be able to do it just by 156 00:10:33,510 --> 00:10:35,190 looking at the code you've got here. 157 00:10:35,880 --> 00:10:39,210 Have a think about it and see if you can come up with the answer. 158 00:10:39,330 --> 00:10:42,420 I'll go through it with you afterwards. Pause the video now and give that a go. 159 00:10:44,430 --> 00:10:44,850 All right. 160 00:10:44,850 --> 00:10:49,850 So we know that this random float can be anything between 161 00:10:50,230 --> 00:10:51,300 0.000000 162 00:10:51,370 --> 00:10:56,370 to 0.999999..., effectively repeating right? Now 163 00:10:58,050 --> 00:11:03,050 what if we were able to multiply this random number by a number? 164 00:11:05,970 --> 00:11:10,620 Let's say that I multiply the random_float by 5. 165 00:11:11,310 --> 00:11:15,150 Well, what if this random_float was no 0.1? Well, 166 00:11:15,180 --> 00:11:19,050 0.1 times 5 would be 0.5. 167 00:11:20,070 --> 00:11:25,070 But what if the random_float was 0.4? 0.4 times 5 would be 2. 168 00:11:28,290 --> 00:11:30,090 Or what if it was 0.9? 169 00:11:30,120 --> 00:11:33,330 0.9 times five is 4.5. 170 00:11:33,840 --> 00:11:38,840 So effectively by multiplying this random_float by 5, 171 00:11:39,840 --> 00:11:42,540 I will end up with random numbers, 172 00:11:42,810 --> 00:11:46,920 but of course they're now floats, right? So it could be 0.000 173 00:11:46,920 --> 00:11:50,940 ... all the way to 4.999999 174 00:11:51,360 --> 00:11:53,010 and et cetera, et cetera. 175 00:11:53,410 --> 00:11:58,410 So this is how we can expand that range from 0 to 1 all the way to 0 to 176 00:11:59,650 --> 00:12:02,050 5, but not including 5. 177 00:12:03,130 --> 00:12:05,950 So what can you do with random numbers? Well, 178 00:12:06,010 --> 00:12:10,870 if we think back to our love calculator that we made in the last lesson, 179 00:12:11,380 --> 00:12:15,070 um, I mean, its kind of based on pseudo-science right? 180 00:12:15,070 --> 00:12:20,050 Like just because you have a certain number of letters that exist in the word 181 00:12:20,050 --> 00:12:20,890 true and love, 182 00:12:20,890 --> 00:12:24,160 it doesn't mean that you're actually going to be more compatible. 183 00:12:24,950 --> 00:12:29,590 I'm sorry to break anyone's heart out there. But if it's random anyways, 184 00:12:29,620 --> 00:12:34,270 then why don't we just use a random number generator saving ourselves all of 185 00:12:34,270 --> 00:12:37,510 that trouble from counting Ts and counting Us. 186 00:12:37,900 --> 00:12:42,900 We can instead just simply say love_score = random.randint between 187 00:12:47,830 --> 00:12:52,830 1 and 100. And then go ahead and just print "Your love score is", 188 00:12:56,620 --> 00:13:01,420 and then let's insert our love score and turn this into an Fstring. 189 00:13:02,230 --> 00:13:06,310 Let's print that. And you can see that we're getting a different love score 190 00:13:06,340 --> 00:13:10,540 every single time I run this code. It's between 1 and a hundred 191 00:13:10,660 --> 00:13:12,400 and you know, 192 00:13:12,520 --> 00:13:16,300 who can tell that this is any different from the previous method, right? 193 00:13:16,660 --> 00:13:21,490 So we can use our random number generator for this. We can use it for, 194 00:13:21,520 --> 00:13:22,180 um, 195 00:13:22,180 --> 00:13:27,180 creating a dice or flipping a coin or we can use it in games that we create. 196 00:13:28,540 --> 00:13:33,010 If you head over to the next lesson, I've got a code challenge for you 197 00:13:33,310 --> 00:13:37,990 where you are going to be building a program in order to pick from heads or 198 00:13:37,990 --> 00:13:42,990 tails and help the user out when they don't have access to a coin. For all of 199 00:13:43,030 --> 00:13:45,280 that and more, I'll see you on the next lesson. 19843

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