Python Programming
 
Forums: » Register « |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support | 
User Name:
Password:
Remember me
Go Back   Dev Shed ForumsProgramming LanguagesPython Programming
Receive the tools necessary to be the rock star of your field. Our 12-month program teaches you the evolving world of multi-channel marketing as well as the complex issues and opportunities found in the industry.

ASP Free and Iron Speed Designer are giving away $5,500+ in FREE licenses. Iron Speed's RAD CASE toolset can save up to 80% of your coding time. One free license per week, one perpetual license per month!
Download and Activate to enter!

Web development can be a daunting task, even for specialists. There is a lot of information to absorb and a lot of technologies to learn in order to manage a superior website. When trying to learn the ropes, developers need a reliable source to introduce new ideas that can be easily implemented. When working on large projects, even web veterans may run into a technology or an aspect of a technology that they are unfamiliar with.

Learn More!


Download to Enter
| Contest Rules

Tutorials | Forums

Reply
Add This Thread To:
  Del.icio.us   Digg   Google   Spurl   Blink   Furl   Simpy   Y! MyWeb 
Thread Tools Search this Thread Rate Thread Display Modes
 
Unread Dev Shed Forums Sponsor:
  #1  
Old February 12th, 2012, 04:09 AM
Memeportal Memeportal is offline
Registered User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Feb 2012
Posts: 16 Memeportal User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 3 h 25 m 10 sec
Reputation Power: 0
Copying an Object

With this function in board class.

def copy(self):
newBoard = Board()
return newBoard

How do I alter this function so newBoard satisfies

newBoard._board == self._board and at the same time

it should also hold

not (newBoard._board is self._board)

In other words returning a fresh copy of the board?

Reply With Quote
  #2  
Old February 12th, 2012, 01:56 PM
b49P23TIvg's Avatar
b49P23TIvg b49P23TIvg is offline
Contributing User
Click here for more information.
 
Join Date: Aug 2011
Posts: 1,075 b49P23TIvg User rank is Second Lieutenant (5000 - 10000 Reputation Level)b49P23TIvg User rank is Second Lieutenant (5000 - 10000 Reputation Level)b49P23TIvg User rank is Second Lieutenant (5000 - 10000 Reputation Level)b49P23TIvg User rank is Second Lieutenant (5000 - 10000 Reputation Level)b49P23TIvg User rank is Second Lieutenant (5000 - 10000 Reputation Level)b49P23TIvg User rank is Second Lieutenant (5000 - 10000 Reputation Level)b49P23TIvg User rank is Second Lieutenant (5000 - 10000 Reputation Level) 
Time spent in forums: 4 Weeks 1 Day 4 h 41 m 27 sec
Reputation Power: 98
Before we discover how to clone your object:

You have a couple functions like shown. That is, the __doc__ claims the function will raise some exception if conditions warrant. It's true that these functions do what they say, BUT they also trap the exception within the same function, and the function ends up returning None. Is that your intent?
Code:
    def is_valid_move(self, move):
        """Check if a proposed move is valid. 
        A valid move is a move to a location that does not already
        contain either an 'X' or an 'O'.
        The parameter move must be an integer between (and including)
        move.MIN_MOVE and move.MAX_MOVE, or a MoveValueError exception
        will be raised. 
        """
        try:
            if move > move.MAX_MOVE or move < move.MIN_MOVE:
                raise MoveValueError
            else:
                return self._board[move - 1] not in 'XO'
        except:
            pass

Reply With Quote
  #3  
Old February 12th, 2012, 02:25 PM
Memeportal Memeportal is offline
Registered User
Dev Shed Newbie (0 - 499 posts)
 
Join Date: Feb 2012
Posts: 16 Memeportal User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 3 h 25 m 10 sec
Reputation Power: 0
Yes, that was my intent. Would it not work if it traps the exception within the function?

Reply With Quote
  #4  
Old February 12th, 2012, 02:54 PM
b49P23TIvg's Avatar
b49P23TIvg b49P23TIvg is offline
Contributing User
Click here for more information.
 
Join Date: Aug 2011
Posts: 1,075 b49P23TIvg User rank is Second Lieutenant (5000 - 10000 Reputation Level)b49P23TIvg User rank is Second Lieutenant (5000 - 10000 Reputation Level)b49P23TIvg User rank is Second Lieutenant (5000 - 10000 Reputation Level)b49P23TIvg User rank is Second Lieutenant (5000 - 10000 Reputation Level)b49P23TIvg User rank is Second Lieutenant (5000 - 10000 Reputation Level)b49P23TIvg User rank is Second Lieutenant (5000 - 10000 Reputation Level)b49P23TIvg User rank is Second Lieutenant (5000 - 10000 Reputation Level) 
Time spent in forums: 4 Weeks 1 Day 4 h 41 m 27 sec
Reputation Power: 98
I give up. To clone an object you could recursively duplicate everything within it. Maybe the shelve module incorporates deepcopy. You won't have to duplicate the implementation effort.

What scares you? Anyone clever enough to bypass your code and change the state while taking their turn is also clever enough to detect your attempt to trap the cheater. I suppose you could also enforce time limits and use the operating system with file modification times to make cheating super-duper difficult.

Anyway, how about this sort of option which makes cheating a little bit more difficult. Make a copy of the board---this is easy, it's a list---and then after getting the move verify that the board copy agrees with the official game.board?

You've got so much unimplemented stuff I didn't figure out your intent. Passing self.game to select_next_move didn't stop the program. But then again, I can't determine that much because you've got unrestricted exception traps that block useful diagnostics.
Code:
        # make a copy of the board in case the player
        # modified it..
        board = self.game.board_copy()
        move = player.select_next_move(self.game)
        while not self.game.is_valid_move(move):
            message = "Invalid choice. Please choose again."
            self._ui.display_error_message(message)
            move = player.select_next_move(self.game)
        if self.game.board != board:
            raise CheatingException('You lose cheater')
        return move

Reply With Quote
Reply

Viewing: Dev Shed ForumsProgramming LanguagesPython Programming > Copying an Object


Thread Tools  Search this Thread 
Search this Thread:

Advanced Search
Display Modes  Rate This Thread 
Rate This Thread:


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
View Your Warnings | New Posts | Latest News | Latest Threads | Shoutbox
Forum Jump

Forums: » Register « |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support | 
  
 


Powered by: vBulletin Version 3.0.5
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.

© 2003-2012 by Developer Shed. All rights reserved. DS Cluster 2 - Follow our Sitemap