Python for Absolute Beginners Transcripts
Chapter: Problem solving techniques for writing software
Lecture: Demo: Create the board
0:00 It's time to create the board
0:01 but real quick before we do, let's just create a little bit
0:04 of a function that we're going to be able
0:05 to run here, like this.
0:09 I always like to put my code inside functions
0:12 even to help us organize it
0:13 because maybe you want to break them out later
0:15 and that turns out to be easier to do
0:16 if you have a higher level organizing function.
0:19 So, here we go board equals, well what?
0:22 What are we going to put here for the board?
0:25 This brings us back to another one of my pieces
0:28 of advice, is to think about data structures.
0:31 How might we store this information in here?
0:35 And, it really comes down to how we want
0:37 to think about the board, one way
0:39 let's think more about how we're going to use the board.
0:43 Let's say it's none for a second.
0:44 What we could do is we could say
0:46 well how do we want to get this information back?
0:48 We could go to the board and we can get thing
0:50 at one comma two or something like that.
0:54 We could maybe go over here and say we want a first row
0:59 and then for the row, we'll have the columns.
1:02 There's other ways to store it, I'm sure
1:04 but we got to think about how we're going to do this.
1:07 Now this side, over here, this bit
1:11 this probably is something like a dictionary.
1:13 We could have a bunch of different keys.
1:15 We could define a dictionary like this.
1:17 We could say board is this and
1:18 that zero comma zero position.
1:22 Well, if you wanted you could have 1, 1
1:23 if you prefer that way of thinking about it
1:26 or you could have nothing for the moment.
1:28 And then, go across, maybe let's say that this is the row
1:32 this is the column, go across the top, end like that.
1:36 And, we're going to have 1, 0. 2, 0.
1:40 This is okay, but there's a couple of challenges here.
1:43 I can't easily ask how many items are in a given row
1:48 or in a given column.
1:49 That turns out to be something that's tricky to do.
1:52 This would work but also these strings
1:55 there's really weird situations
1:57 like if there's a space here, then that's not the same
2:00 as not having a space.
2:01 I mean to humans it looks the same
2:02 but to computers, it's like, I have the string zero
2:05 comma space zero, that's not the same as
2:07 the string zero comma zero, alright?
2:09 So, it's not quite probably the best data structure.
2:13 So, that was a possibility.
2:15 I'm going to say no for that one
2:18 which means that this use case here
2:19 doesn't make a lot of sense.
2:20 So, what about this one, if we come over here
2:22 and say give me the first row
2:25 and then from the row, we can get the first column element
2:28 cell one, cell two, cell three.
2:30 Remember you always count at zero
2:31 so it's off by one for humans.
2:33 So, to me this is a little bit nicer
2:36 because then I can just ask for the first row
2:38 and say well, how many items are in the row?
2:40 Or how many rows are there at all?
2:44 How many columns, how many rows at all?
2:46 It's a little more discoverable.
2:48 So if we want to put stuff in order like that
2:52 so we can have the first row
2:55 second row, third row going down.
2:58 That turns out to be a list.
3:00 We want something ordered, we can access it
3:02 by index and we go back to those data structures.
3:06 In that world, maybe a typical board would look like this.
3:10 It would have a list of row 1, row 2, row 3.
3:16 Yeah, well what is a row but a column of three columns
3:22 basically or three cells.
3:25 We know how to say three cells.
3:26 We can access in order by index.
3:28 Well, that's cell 1, cell 2, cell 3.
3:34 What we have is a list but instead of having
3:36 scalar items like numbers or strings in there
3:38 each element in the outer list
3:41 the list of rows is going to be a list of cells.
3:45 See down here, this will be like row 2
3:50 column 1, it's not great.
3:52 Just do an underscore.
3:55 That's the first item then row 2, cell 2.
3:58 Row 2, cell 3.
4:02 And down here, same thing but it's going to be row 3.
4:05 Cell 1, cell 2, cell 3.
4:07 Does that make sense?
4:09 This is one option.
4:10 This is also an option.
4:12 There are others still, we could just have a straight
4:15 list of cell 1, cell 2, cell 3, cell 4
4:17 cell 5, cell 6, cell 7, cell 8, cell 9
4:20 and then just do the math to figure out
4:22 if you want row 2, column 2, that's the fifth thing
4:27 in the list.
4:28 I really don't like that one.
4:29 I like either of these better than that, I think.
4:32 Yeah, so what we're going to go with.
4:33 This is what I've come up with.
4:35 This looks like Tic Tac Toe, like if we put
4:38 in numbers here, let me comma this out for a sec.
4:41 Make a copy.
4:45 Let's just put in, X, X, O
4:50 X, blank, O
4:53 X, O, blank.
4:56 That looks like a Tic Tac Toe board, doesn't it?
4:58 So to me, I like this structure best.
5:00 This one works but it doesn't look like Tic Tac Toe.
5:03 The one where it's like nine in a row
5:05 also works but doesn't look like Tic Tac Toe.
5:08 This one looks like Tic Tac Toe and it lets us
5:10 really easily answer questions like how many rows are there.
5:13 Well, that's the len of board.
5:15 That's how many rows.
5:17 If you want to know how many columns there are
5:19 you just go to any row and you ask how long that is.
5:22 If you want to get something in row 2, cell 3
5:28 and where everything's off by zero
5:29 so you would say one, two like that.
5:32 That's how you get it.
5:33 So it's really easy to get over there to those items.
5:36 I think this data structure of a list containing
5:40 a list of rows where each row is a list of cells
5:44 I think that that's what we're going to go with, okay?
5:46 So we're going to comma that out again for a minute.
5:50 Leave this here for a sec.
5:53 Let's go ahead and fill this out.
5:54 Now, what we need is we need the board to start out empty.
5:59 So there's a couple of things we could do.
6:00 Remember none is the programming way of saying empty.
6:04 What we'll do is we're going to say there's a board
6:07 it has three rows like this
6:10 but we got to put three things in here as well.
6:13 Now I could just do this.
6:14 This would be totally good.
6:16 Like this and do like that.
6:19 When we print out the board, I'll have to see.
6:22 It'll show up none, none, none unless we do something
6:24 to replace none with a different character.
6:27 I think actually, I'm going to go with this.
6:29 We're going to have a little function that'll say
6:30 show the board or some idea of showing the board
6:32 and it's just going to say is there going to be an X?
6:36 Is there going to be an O?
6:38 Or if it's none, we'll just put something like
6:41 a little underscore so that there's spaces
6:43 a little character.
6:44 But it needs to start out with no plays
6:45 so this is what we're going to use for our board.
6:48 I'm going to put like, this is NVA.
6:50 Board is a list of rows.
6:54 Rows are a list of cells.
6:57 This is a data structure I'm going to start from
6:59 and you're going to see over and over again.
7:01 It makes it really easy to play Tic Tac Toe
7:03 once we know how to record the entries for each player.