Presentation is loading. Please wait.

Presentation is loading. Please wait.

EECS 110: Lec 15: Classes and Objects (2)

Similar presentations


Presentation on theme: "EECS 110: Lec 15: Classes and Objects (2)"— Presentation transcript:

1 EECS 110: Lec 15: Classes and Objects (2)
Aleksandar Kuzmanovic Northwestern University

2 Fri., 5/28: recitation (LR5) Tue., 6/1: recitation, W. lab
EECS 110 important dates Projects Projects Final! Fri., 5/21: online Fri., 5/28: recitation (LR5) Tue., 6/1: recitation, W. lab Wed., 5/26: rev. for final Wed., 6/2, final Mon., 5/24: class

3 (1) A class is a type of variable.
Classes & Objects An object-oriented programming language allows you to build your own customized types of variables. (1) A class is a type of variable. (2) An object is one such variable. There will typically be MANY objects of a single class.

4 Objects An object is a data structure (like a list), except
(1) Its data elements have names chosen by the programmer. (2) Data elements are chosen & organized by the programmer (3) An object can have behaviors built-in by the programmer.

5 usually called "methods" instead of functions
Objects An object is a data structure (like a list), except (1) Its data elements have names chosen by the programmer. (2) Data elements are chosen & organized by the programmer (3) An object can have behaviors built-in by the programmer. usually called "methods" instead of functions

6 The Date class class Date: """ a blueprint (class) for objects
that represent calendar days """ def __init__( self, mo, dy, yr ): """ the Date constructor """ self.month = mo self.day = dy self.year = yr def __repr__( self ): """ used for printing Dates """ s = "%02d/%02d/%04d" % (self.month, self.day, self.year) return s The Date class

7 EECS 110 Today Connect Four | | | | | | | | | | | |X| | | |
| |X| |X|O| | | |X|O|O|O|X|O| | X to move. Is there a way to win?

8 Aargh! Python has no Connect-four datatype… | | | | | | | |
| | | |X| | | | | |X| |X|O| | | |X|O|O|O|X| |O| … but we can correct that!

9 Designing classes 1) What data? (Data Members)
Not limited to 7x6! 2) What are objects' crucial capabilities? (Methods)

10 Designing classes What data? (Data Members)
- height, width - Where the chips are - Whose turn it is - Winning condition - End condition (number of chips played) Not limited to 7x6! 2) What are objects' crucial capabilities? (Methods)

11 Designing classes What data? (Data Members)
- height, width - Where the chips are - Whose turn it is - Winning condition - End condition (number of chips played) Not limited to 7x6! 2) What are objects' crucial capabilities? (Methods) creates a new object check for win print get the next move/switch turn check for full board

12 Connect Four: the object b
int str str str str list width Board b data int str str str str height str str str str data What is the name of the method that will construct this data?

13 Connect Four: the object b
int str str str str list width Board b data int str str str str height str str str str data What is the name of the method that will construct this data? __init__(…)

14 Connect Four: constructor
class Board: """ a datatype representing a C4 board with an arbitrary number of rows and cols """ def __init__( self, width, height ): """ the constructor for objects of type Board """ self.width = width self.height = height self.data = [] # this will be the board for row in range( height ): # 6 boardRow = [] for col in range( width ): # 7 boardRow += [' '] # add a space to this row self.data += [boardRow]

15 Connect Four: the object b
int str str str str list width Board b data int str str str str height str str str str | | | | | | | | | | | |X| | | | | |X| |X|O| | | |X|O|O|O|X| |O| What is the name of the method that will print this data?

16 Connect Four: __repr__
def __repr__(self): """ this method returns a string representation for an object of type Board """ s = '' for row in range( self.height ): s += '|' for col in range( self.width ): s += self.data[row][col] + '|' s += '\n' return s which row is row 0, row 1, and so on? To remove? To add?

17 Connect Four: __repr__
def __repr__(self): """ this method returns a string representation for an object of type Board """ s = '' for row in range( self.height ): s += '|' for col in range( self.width ): s += self.data[row][col] + '|' s += '\n‘ s += '--'*self.width + '-\n‘ s += ' ' + str(col%10) s += '\n' return s which row is row 0, row 1, and so on?

18 Step through this mystery method.
"Quiz" class Board { def mystery(self, col, ox): for row in range( self.height ): if self.data[row][col] != ' ': self.data[row-1][col] = ox self.data[self.height-1][col] = ox def allowsMove(self, col): } a C4 board col # 'X' or 'O' Step through this mystery method. What is each line doing? What's going wrong? Write allowsMove to return True if col is a valid move; False otherwise.

19 Step through this mystery method.
"Quiz" class Board { def mystery(self, col, ox): for row in range( self.height ): if self.data[row][col] != ' ': self.data[row-1][col] = ox self.data[self.height-1][col] = ox # Adds ox at the top of a column # But at the same time overwrites the existing # elements in the column… # Does not check if it is possible to write in a column… def allowsMove(self, col): } a C4 board col # 'X' or 'O' Step through this mystery method. What is each line doing? What's going wrong? Write allowsMove to return True if col is a valid move; False otherwise.

20 Step through this mystery method.
"Quiz" class Board { def mystery1(self, col, ox): if allowsMove(col): for row in range( self.height ): if self.data[row][col] != ' ': self.data[row-1][col] = ox return self.data[self.height-1][col] = ox def allowsMove(self, col): } a C4 board col # 'X' or 'O' Step through this mystery method. What is each line doing? What's going wrong? Write allowsMove to return True if col is a valid move; False otherwise.

21 Step through this mystery method.
"Quiz" class Board { def mystery1(self, col, ox): if allowsMove(col): for row in range( self.height ): if self.data[row][col] != ' ': self.data[row-1][col] = ox return self.data[self.height-1][col] = ox def allowsMove(self, col): if 0 <= col < self.width: return self.data[0][col] == ' ' } a C4 board col # 'X' or 'O' Step through this mystery method. What is each line doing? What's going wrong? Write allowsMove to return True if col is a valid move; False otherwise.

22 C4 Board class: methods Which of these will require the most thought?
the “constructor” __init__( self, width, height ) checks if allowed allowsMove( self, col ) places a checker addMove( self, col, ox ) removes a checker delMove( self, col ) __repr__( self ) outputs a string isFull( self ) checks if any space is left winsFor( self, ox ) checks if a player has won hostGame( self ) play! Which of these will require the most thought?

23 winsFor( self, ox ) b b.winsFor( 'X' ) or 'O' X O Thoughts?

24 winsFor( self, ox ) b Thoughts? X O def winsFor(self, ox):
# check for horizontal wins for row in range(0,self.height): for col in range(0,self.width-3): if self.data[row][col] == ox and \ self.data[row][col+1] == ox and \ self.data[row][col+2] == ox and \ self.data[row][col+3] == ox: return True # check for vertical wins X O Thoughts?

25 The Player class (Extra credit)
Details Player pForX (data and methods) What data and methods are needed to construct and implement a Player object?

26 Player Picture of a Player object DATA 3 'X' 'LEFT' METHODS string
ox string tbt int ply Player pForX checker, O or X tiebreakType __init__(self, ox, tbt, ply) __repr__(self) oppCh(self) METHODS scoreBoard(self, b) scoresFor(self, b) tiebreakMove(self, scores) nextMove(self, b)

27 scoreBoard ‘X’ ‘O’ Assigns a score to any board, b A simple system:
100.0 50.0 0.0 for a win for anything else for a loss Score for Score for Score for Score for

28 scoreBoard ‘X’ ‘O’ Assigns a score to any board, b A simple system:
100.0 50.0 0.0 for a win for anything else for a loss Score for 100.0 Score for Score for 0.0 Score for

29 scoreBoard ‘X’ ‘O’ Assigns a score to any board, b A simple system:
100.0 50.0 0.0 for a win for anything else for a loss Score for 100.0 Score for 50.0 Score for 0.0 Score for 50.0

30 What class is this method in?
scoreBoard Assigns a score to any board, b A simple system: 100.0 50.0 0.0 for a win for anything else for a loss Implementation ideas… scoreBoard(self, b) What methods that already exist will come in handy? This doesn't seem to be looking very far ahead ! How can there be no 'X' or 'O' input? What class is this method in?

31 Looking further ahead…
scoreBoard looks ahead 0 moves 0-ply If you look one move ahead, how many possibilities are there to consider? A 1-ply lookahead player will "see" an impending victory. to move… 1-ply score

32 Looking further ahead…
scoreBoard looks ahead 0 moves 0-ply If you look one move ahead, how many possibilities are there to consider? A 1-ply lookahead player will "see" an impending victory. to move… 1-ply score -1 50 50 50 100 50 50

33 Looking further ahead…
scoreBoard looks ahead 0 moves 0-ply If you look one move ahead, how many possibilities are there to consider? A 2-ply lookahead player will also "see" an opponent's impending victory. to move… 2-ply -1 50 score

34 Looking further ahead…
scoreBoard looks ahead 0 moves 0-ply If you look one move ahead, how many possibilities are there to consider? 1-ply 2-ply scoresFor( self, b ) returns a LIST of scores, one for each column you can choose to move next…

35 Example 1-ply and 2-ply lookahead scores
It is O’s move. What scores does a 1-ply lookahead for O assign to each move? |O| | | | | | | |X| | | |O| |X| |O| | | |X|O|X| |X| | | |O|O|X| |X| |X| |X|O|O| |X| |O|O|O|X|X| col 0 col 1 col 2 col 3 col 4 col 5 col 6 Which change at 2-ply?

36 Example 1-ply and 2-ply lookahead scores
It is O’s move. What scores does a 1-ply lookahead for O assign to each move? |O| | | | | | | |X| | | |O| |X| |O| | | |X|O|X| |X| | | |O|O|X| |X| |X| |X|O|O| |X| |O|O|O|X|X| col 0 col 1 col 2 col 3 col 4 col 5 col 6 -1 100 50 100 50 100 50 Which change at 2-ply?

37 Example 1-ply and 2-ply lookahead scores
It is O’s move. What scores does a 1-ply lookahead for O assign to each move? |O| | | | | | | |X| | | |O| |X| |O| | | |X|O|X| |X| | | |O|O|X| |X| |X| |X|O|O| |X| |O|O|O|X|X| col 0 col 1 col 2 col 3 col 4 col 5 col 6 -1 100 50 50 50 100 50 1-ply col 0 col 1 col 2 col 3 col 4 col 5 col 6 -1 100 100 100 50 2-ply

38 Example 1-ply and 2-ply lookahead scores
|X| |X|O| | |O| |X|O|O|X| |X|X| |X|O|O|O| |O|X| It is X’s move. What scores does a 2-ply lookahead for X assign to each move? col 0 col 1 col 2 col 3 col 4 col 5 col 6

39 Example 1-ply and 2-ply lookahead scores
|X| |X|O| | |O| |X|O|O|X| |X|X| |X|O|O|O| |O|X| It is X’s move. What scores does a 2-ply lookahead for X assign to each move? col 0 col 1 col 2 col 3 col 4 col 5 col 6 100 50 -1

40 Practice b ‘X’ ‘O’ 0-ply scores for O: 1-ply scores for O:
col 0 col 1 col 2 col 3 col 4 col 5 col 6 0-ply scores for O: col 0 col 1 col 2 col 3 col 4 col 5 col 6 1-ply scores for O: col 0 col 1 col 2 col 3 col 4 col 5 col 6 2-ply scores for O: col 0 col 1 col 2 col 3 col 4 col 5 col 6 3-ply scores for O:

41 Solutions b ‘X’ ‘O’ col 0 col 1 col 2 col 3 col 4 col 5 col 6 0-ply scores for O: -1 50 50 50 50 50 50 col 0 col 1 col 2 col 3 col 4 col 5 col 6 1-ply scores for O: -1 50 50 100 50 50 50 col 0 col 1 col 2 col 3 col 4 col 5 col 6 2-ply scores for O: -1 100 50 col 0 col 1 col 2 col 3 col 4 col 5 col 6 3-ply scores for O: -1 100 100


Download ppt "EECS 110: Lec 15: Classes and Objects (2)"

Similar presentations


Ads by Google