1

私は Sudoku パズル ソルバーを書き上げようとしていましたが、これまでのところ、パズルを表示するのに苦労しています。これまでの私のコードは次のとおりです。

class Cell:
'''A cell for the soduku game.'''
def __init__(self):
    #This is our constructor
    self.__done = False #We are not finished at the start
    self.__answer = (1,2,3,4,5,6,7,8,9) #Here is the tuple containing all of our possibilities
    self.__setnum = 8 #This will be used later when we set the number.
def __str__(self):
    '''This formats what the cell returns.'''
    answer = 'This cell can be: '
    answer += str(self.__answer) #This pulls our answer from our tuple
    return answer
def get_possible(self):
    '''This tells us what our possibilities exist.'''
    answer = ()
    return self.__answer
def is_done(self):
    '''Does a simple check on a variable to determine if we are done.'''
    return self.__done
def remove(self, number):
    '''Removes a possibility from the possibility tuple.'''
    if number == 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 or 9: #Checks if we have a valid answer
        temp = list(self.__answer) #Here is the secret: We change the tuple to a list, which we can easily modify, and than turn it back.
        temp.remove(number)
        self.__answer = tuple(temp)
def set_number(self, number):
    '''Removes all but one possibility from the possibility tuple. Also sets "__done" to true.'''
    answer = 8
    for num in self.__answer:
        if num == number:
            answer = number #Checks if the number is in the tuple, and than sets that value as the tuple, which becomes an integer.
    self.__answer = answer
    self.__done = True
    return self.__answer

これはセル用で、グリッドのコードは次のとおりです。

class Grid:
'''The grid for the soduku game.'''
def __init__(self, puzzle):
    '''Constructs the soduku puzzle from the file.'''
    self.__file = open(puzzle)
    self.__puzzle = ''
    self.__template = '   |   |   \n   |   |   \n   |   |   \n   |   |   \n   |   |   \n   |   |   \n   |   |   \n   |   |   \n   |   |   \n'
    for char in self.__file:
        if char == '.':
            self.__puzzle += ' '
        else:
            self.__puzzle += char
    count = 0
    self.__template_list = list(self.__template)
    for char in self.__puzzle:
        if char != '|':
            if char == '.' or ' ':
                self.__template_list[count] = ' '
            else:
                self.__template_list[count] = char
    self.__answer = ''
    for char in self.__template_list:
        self.__answer += char
    self.__file.close()
def __str__(self):
    '''Prints the soduku puzzle nicely.'''
    return self.__answer

印刷しようとすると、縦に 2 本のパイプ (|) が表示されます。誰かが私が間違っていることを教えてもらえますか?

4

2 に答える 2

2

これは間違っています (常に True になります)

if number == 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 or 9:

使用する

if 1 <= number <= 9:

これも間違い

for char in self.__file:
    if char == '.':
        self.__puzzle += ' '
    else:
        self.__puzzle += char

ファイルを反復すると、文字ではなくが生成されます。

コードを小さな部分に分けて記述し、テストすることをお勧めします。そこにいくつかprintの s を入れて、コードが期待どおりに動作していることを確認してください。

于 2013-06-05T07:37:17.410 に答える