Python for Absolute Beginners Transcripts
Chapter: Organizing and reusing code with functions
Lecture: Selecting the roll quickly
0:00 Let's look at what I consider to be a bit
0:02 of a drawback for our game here.
0:03 If I run it, I have to type scissors.
0:06 And if I misspelled scissors, like 'ssors
0:09 then, whoa, whoa, that's not a valid play
0:11 you got to go again.
0:12 Wouldn't it be nice, wouldn't it be easy, if it could just
0:15 press one for rock
0:16 two for paper
0:17 and three for scissors?
0:18 That would be cool.
0:19 That's what we're going to do now.
0:20 Also, going to let us look at a cool different type of loop
0:23 while we do it. Now, let's go back here and kind of go through this
0:26 higher view of our program that we have
0:29 because we're using functions.
0:30 So show header, we don't need to mess with that.
0:33 play_game, that's probably the place we have to go.
0:35 And then in here, this is the part that
0:38 asked the user to input something
0:40 and then it gets it back.
0:41 So all we have to do is change get_roll
0:43 and if this was used in many different places
0:45 this change would automatically be picked up everywhere.
0:48 That's cool.
0:49 So we're going to jump down here to this
0:51 and what we can do is instead of that doing that, there
0:57 Let's go and show them the rolls.
0:59 So I'd like to print out something...
1:02 I'd like to print out what various role options there are
1:05 so there's a really cool way to do that.
1:07 Anytime you have a list or some sort of collection
1:10 or sequence of things
1:12 you can go through it using what's called a for in loop.
1:15 And it's incredibly simple, all you do is say something
1:17 like this for r in rolls.
1:19 Each time, for each role, there's three...
1:22 So this sweep will run three times
1:25 you can just print r
1:27 Let's just print it like this for a second.
1:29 Let's go and run that and see what happened.
1:30 Here we go. Look how cool that is.
1:32 So all we got to do is, for thing in collection
1:34 now work with the thing.
1:36 Well, that's not a huge difference, is it?
1:38 It just puts them out, top to bottom
1:42 vertically instead of horizontally.
1:43 So let's not do exactly that.
1:45 Let's add a little bit more to it.
1:47 What I like to do is show a number.
1:49 Now, we could come over here and do this weird thing
1:52 where I have index equals one.
1:56 We could print a little f-string here.
1:58 So we could say curly, and we could say
2:00 index not, and then the roll.
2:03 And here we could have it get bigger by one.
2:06 Here we go. 123.
2:08 That works. But it's very much not the right way
2:11 to do things in Python.
2:13 So instead, let me just give a little head right here.
2:17 You can get spell checking, by the way, which is cool.
2:19 We go like this.
2:20 So instead of doing this, what we can do is we can say
2:23 I would like to get the object and it's index.
2:26 The way we do that is we say enumerate
2:28 and we pass the thing we would have looped over
2:30 and we get back here is two things.
2:32 We get the index and the role.
2:34 So forget that part right there.
2:37 If we run this, it's going to do exactly the same thing
2:39 but we don't have to do extra work
2:41 to do sort of bookkeeping of those numbers.
2:43 Close to what we want, but not quite.
2:45 012. All the numbers in Python start at 0
2:48 indexes start as 0, and so on.
2:50 So this might be fine but its a little weird for people
2:53 it's also not very handy for putting your
2:54 fingers near the numbers.
2:56 So what we can do is we can say start equals 1
3:00 and this is a way to pass data to this enumerate function
3:03 and be more explicit.
3:04 Say, there's a bunch of things that have default values
3:08 I don't care about them, but this one called start
3:10 let's set it to 1.
3:11 We try again. Boom. There we go. 123.
3:14 That's great but the input is still expecting us to type in
3:17 rock, papers, or whatever.
3:20 Instead, let's change this...
3:25 elected index or something like that.
3:28 And in order for this to be, remember, a number
3:30 not a string, that just looks like a number
3:32 we have to convert this input to there.
3:35 So we could either wrap it like that
3:37 or we can come over here and make a separate variable
3:40 so it's more obvious.
3:44 Actually, what did I call it?
3:45 I called it test. There we go. We could be like this.
3:48 Now we don't have to ask them for the roles
3:51 instead we have to ask something else.
3:53 So what we need to do, is we need to know that this number
3:56 is going to be between sort of one to the number of roles
4:00 but remember what did I just say?
4:01 That indexes start at zero and they actually go up to
4:05 1 - length, it's a little bit weird.
4:07 It takes some getting used to.
4:09 So we need to adjust that back to convert
4:12 from a human thinking, from 123
4:14 back to computer thinking, 012.
4:17 It's a weird thing but it happens in almost
4:19 all the programming languages, so we'll just go with it.
4:22 And then instead of this role thing here, we'll have to say
4:26 if selected index < 0, <= 0
4:31 or selected index is >=
4:37 Actually, zero is okay because we adjusted it.
4:39 But if it's great than the length of the roles...
4:42 That's how many lengths there are in that collection
4:44 the way we do is like so.
4:47 Let's change this to selected_index + 1
4:51 so that in their mind
4:53 Hey. They still see it as that one they've selected
4:55 and we could actually just put text.
4:57 That would be easy.
4:58 It'll say it's out of bounds.
5:02 And then here we need to return the role from the index.
5:06 The way we do that is we go to this collection.
5:08 We say, I know you're a bunch of things
5:10 I want to get one at a certain position that we've selected
5:12 but we'll just say selected index, like this.
5:16 Go to the collection.
5:17 Pull out the one that they typed in.
5:20 This way they don't have to type scissors, rock
5:22 or whatever we end up expanding this to in the future.
5:25 You just type 123.
5:26 Let's try that.
5:28 Which one do you roll?
5:29 How about two?
5:31 We say two, you roll, paper. Cool, right?
5:35 That was rock. Okay.
5:37 Score is we're up one, we haven't won one of these yet
5:39 so that's cool. Let's play scissors.
5:41 There we go, we rolled scissors.
5:43 We'll roll scissors again.
5:45 Oh, computer won. Let's roll scissors again.
5:48 Let's play one, throw some rocks
5:51 or else we're in trouble.
5:52 Hi. This is it for all the marbles, unless we tie.
5:56 Whew, it was a tie.
5:57 Let's throw rocks again.
5:58 Man, we haven't won one of these games yet, have we?
6:01 Crazy. But there it is, at this cool way of working with
6:04 four in loops, allows us to list out all the items.
6:08 Because we want to give them a number
6:11 we can use enumerate and say go 1234
6:14 and give me the item that goes with it.
6:19 Let's us ask the player for just some kind of number
6:23 in a one, or a five, or whatever the possible options are.
6:26 I guess we haven't tested our logic.
6:28 If you enter five right now, it's out of bounds.
6:31 We enter zero, it should be out of bounds.
6:34 Not for the computer, but remember we adjust
6:35 that to be one fewer.
6:37 We put minus 100, still out of bounds
6:40 but one, one works.