面向对象的Python Tic-Tac-Toe更新类

2024-09-28 20:45:35 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个使用OOP的井字游戏的开始。我在更新类的实例变量时遇到了麻烦(如果我的术语正确的话)。在遍历while循环时,我没有存储条目。在

我已经阅读了文档并对OOP有一点经验,我也尝试过一些其他的方法,但是我不能判断我的前提是错误的,我需要往另一个方向发展,或者我离解决方案只有一线之遥。(希望格式正确!)在

class Board:

    def __init__(self, square1=' ', square2=' ', square3=' ', square4=' ', square5=' ', square6=' ', square7=' ', square8=' ', square9=' '):
        self.square1 = square1
        self.square2 = square2
        self.square3 = square3
        self.square4 = square4
        self.square5 = square5
        self.square6 = square6
        self.square7 = square7
        self.square8 = square8
        self.square9 = square9
        self.grid = '\nSQUARES ARE 0-8, TOP LEFT TO BOTTOM RIGHT, TRAVEL HORIZONTALLY\n   |   |   \n '+square1+' | '+square2+' | '+square3+'  \n___|___|___\n   |   |   \n '+square4+' | '+square5+' | '+square6+'  \n___|___|___\n   |   |   \n '+square7+' | '+square8+' | '+square9+'  \n   |   |   '


game=Board()

print(game.grid)

while True:
    entry = input('Please enter a number\n')
    if entry == '0':
        update = Board(square1='X')

    elif entry == '1':
        update = Board(square2='X')

    elif entry == '2':
        update = Board(square3='X')

    elif entry == '3':
        update = Board(square4='X')

    elif entry == '4':
        update = Board(square5='X')

    elif entry == '5':
        update = Board(square6='X')

    elif entry == '6':
        update = Board(square7='X')

    elif entry == '7':
        update = Board(square8='X')

    elif entry == '8':
        update = Board(square9='X')

    print(update.grid)

Tags: selfboardupdategridentryelifsquare1square2
3条回答

以下是我认为从当前代码到工作示例的最短方法。在

这绝对不是我推荐从头开始编写这段代码的方式—其他答案展示了如何使用Python列表和方法/函数来干净地编写代码。在

不过,看看我所做的改变,并与你原来的版本进行比较,可能会很有用。我认为您在如何使用类方面遇到了困难(在update = Board(square2='X')这样的地方)。在

class Board:

    def __init__(self, square1=' ', square2=' ', square3=' ', square4=' ', square5=' ', square6=' ', square7=' ', square8=' ', square9=' '):
        self.square1 = square1
        self.square2 = square2
        self.square3 = square3
        self.square4 = square4
        self.square5 = square5
        self.square6 = square6
        self.square7 = square7
        self.square8 = square8
        self.square9 = square9

    def grid(self):
        message = '\nSQUARES ARE 0-8, TOP LEFT TO BOTTOM RIGHT, TRAVEL HORIZONTALLY\n   |   |   \n ' + self.square1+' | '+self.square2+' | '+self.square3+'  \n___|___|___\n   |   |   \n '+self.square4+' | '+self.square5 + ' | ' + self.square6+'  \n___|___|___\n   |   |   \n ' + self.square7 + ' | ' + self.square8+' | ' + self.square9+'  \n   |   |   '
        print(message)


game=Board()

print(game.grid)

while True:
    entry = raw_input('Please enter a number\n')
    if entry == '0':
        game.square1='X'

    elif entry == '1':
        game.square2='X'

    elif entry == '2':
        game.square3='X'

    elif entry == '3':
        game.square4='X'

    elif entry == '4':
        game.square5='X'

    elif entry == '5':
        game.square6='X'

    elif entry == '6':
        game.square7='X'

    elif entry == '7':
        game.square8='X'

    elif entry == '8':
        game.square9='X'

    print(game.grid())

您可以尝试以下方法:

class Board:
    def __init__(self):
        self.fields = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

    def update(self, n, seed):
        self.fields[(n / 3)][n % 3] = seed

    def printBoard(self):
        print
        for l in self.fields:
            for e in l:
                print e,
            print

b = Board()

b.printBoard()

b.update(1, 'X')
b.printBoard()

>>> 0 0 0
    0 0 0
    0 0 0

    0 X 0
    0 0 0
    0 0 0

OOP代表面向对象编程。在本例中,您的对象是Boardclass与您用于创建其他板的模板类似,使用:

new_board = Board()

从那时起,您必须使用您的new_board,这是一个Board实例。我这里的意思是,在你的while循环中,当你做update = Board...而不是修改之前的一个时,你会创建新的电路板。在

为了做到这一点,你应该把方法添加到你的板上。这些功能可以修改电路板。此外,您应该使用其他类型的数据结构(如列表)在类中存储数据。例如:

^{pr2}$

我希望你能感觉到。在

相关问题 更多 >