[Tutor] Variables and Functions
Michael H. Goldwasser
goldwamh at slu.edu
Thu Nov 29 04:18:11 CET 2007
Hello Devon,
Here's a quick [untested] push in the direction of taking the code
you gave below and modeling it as a class using an object-oriented
design. With this code, you could then create an instance of a puzzle as:
toughOne = Sudoku()
toughOne.play_game()
Within the class definition, variables that you need to have shared
between the differnt functions are qualified as instance variables
using the syntax self.blah (as in self.puzzle and self.new_puzzle).
Unqualified variables are local to an individual function and
cannot be shared.
With regard,
Michael
class Sudoku:
def __init__(self):
self.puzzle = [[1,2,3,4,5,6,7,8,9],
[4,5,6,7,8,9,1,2,3],
[7,8,9,1,2,3,4,5,6],
[2,3,4,5,6,7,8,9,1],
[5,6,7,8,9,1,2,3,4],
[8,9,1,2,3,4,5,6,7],
[3,4,5,6,7,8,9,1,2],
[6,7,8,9,1,2,3,4,5],
[9,1,2,3,4,5,6,7,8]]
num_of_swap = random.randint(10,20)
for i in range(num_of_swap):
row1 = random.randint(0,8)
row2 = random.randint(0,8)
if row1/3 == row2/3:
self.swap_row(row1,row2)
self.new_puzzle = copy.deepcopy(puzzle)
sparseness = 0.85
for i in range(9):
for j in range(9):
if random.uniform(0,1) < sparseness:
self.new_puzzle[i][j] = ''
def swap_row(self,row1,row2):
temp = self.puzzle[row1]
self.puzzle[row1] = self.puzzle[row2]
self.puzzle[row2] = temp
def play_game(self):
'''Here is where I need the variables 'puzzle' and 'new_puzzle' to be brought.'''
pass
+-----------------------------------------------
| Michael Goldwasser
| Associate Professor
| Dept. Mathematics and Computer Science
| Saint Louis University
| 220 North Grand Blvd.
| St. Louis, MO 63103-2007
|
| Office: Ritter Hall 6
| Email: goldwamh at slu dot edu
| URL: euler.slu.edu/~goldwasser
On Wednesday November 28, 2007, Devon MacIntyre wrote:
> Hi,
>
> I have two functions, 'new_sudoku' and 'play_game'. In new_sudoku, I have a
> pre-determined puzzle (I wasn't able to get a randomly generated puzzle
> working), as a matrix in the variable 'puzzle'. I imported the 'copy' module
> and made a deep-copy of 'puzzle' to make 'new_puzzle', which randomly has
> 85% of the digits replaced by an empty string. Now that 'new_puzzle' is only
> 15% filled with numbers, I use turtle to place the numbers on a grid that I
> made (also with turtle). After the grid and 'new_puzzle' are generated, I
> ask the player if he/she wants to begin playing. If yes, then the function
> 'play_game' is started. Here, I'm going to let the player choose spots to
> input their own numbers to fill in the board. My problem is that I can't get
> the variables 'puzzle' and 'new_puzzle' into that function (to be compared)
> because they are not globally defined; only in 'new_sudoku' function. Here's
> some selected code from my program:
>
> def swap_row(puzzle,row1,row2):
> temp = puzzle[row1]
> puzzle[row1] = puzzle[row2]
> puzzle[row2] = temp
>
> def new_sudoku():
> puzzle = [[1,2,3,4,5,6,7,8,9], \
> [4,5,6,7,8,9,1,2,3], \
> [7,8,9,1,2,3,4,5,6], \
> [2,3,4,5,6,7,8,9,1], \
> [5,6,7,8,9,1,2,3,4], \
> [8,9,1,2,3,4,5,6,7], \
> [3,4,5,6,7,8,9,1,2], \
> [6,7,8,9,1,2,3,4,5], \
> [9,1,2,3,4,5,6,7,8]]
> num_of_swap = random.randint(10,20)
> for i in range(num_of_swap):
> row1 = random.randint(0,8)
> row2 = random.randint(0,8)
> if row1/3 == row2/3:
> swap_row(puzzle,row1,row2)
> new_puzzle = copy.deepcopy(puzzle)
> sparseness = 0.85
> for i in range(9):
> for j in range(9):
> if random.uniform(0,1) < sparseness:
> new_puzzle[i][j] = ''
>
> def play_game():
> '''
> Here is where I need the variables 'puzzle' and 'new_puzzle' to be
> brought.
> '''
More information about the Tutor
mailing list