修改自己的内部函数(8字谜游戏)是错误的做法吗?

2024-09-30 01:27:50 发布

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

我试着为8字谜游戏做我自己的解决方案。我在网上找到的解决方案大多是返回语句。这样编码是错误的做法吗?你知道吗

import numpy as np


class Game(object):

    def __init__(self, n, config):
        array = np.array(config)
        self.board = array.reshape((n, n))
        blank = np.where(self.board == 0)
        self.blanky = int(blank[0])
        self.blankx = int(blank[1])
        self.n = n

    def move_up(self):
        if self.blanky - 1 < 0:
            return None
        ay, ax = self.blanky, self.blankx
        by, bx = self.blanky - 1, self.blankx
        self.board[ay, ax], self.board[by, bx] = self.board[by, bx], self.board[ay, ax]
        self.blanky = self.blanky - 1

    def move_down(self):
        if self.blanky + 1 > n:
            return None
        ay, ax = self.blanky, self.blankx
        by, bx = self.blanky + 1, self.blankx
        self.board[ay, ax], self.board[by, bx] = self.board[by, bx], self.board[ay, ax]
        self.blanky = self.blanky + 1

    def move_left(self):
        if self.blankx - 1 < 0:
            return None
        ay, ax = self.blanky, self.blankx
        by, bx = self.blanky, self.blankx - 1
        self.board[ay, ax], self.board[by, bx] = self.board[by, bx], self.board[ay, ax]
        self.blankx = self.blankx - 1

    def move_right(self):
        if self.blankx - 1 < 0:
            return None
        ay, ax = self.blanky, self.blankx
        by, bx = self.blanky, self.blankx + 1
        self.board[ay, ax], self.board[by, bx] = self.board[by, bx], self.board[ay, ax]
        self.blankx = self.blankx + 1

    def visualise(self):
        return(self.board)

Tags: selfboardnonemovebyreturnifdef
1条回答
网友
1楼 · 发布于 2024-09-30 01:27:50

在面向对象编程的世界中,您使用的是设计好的类。所有的实例变量(self.blanky等等)都是用来跟踪类的状态的。你知道吗

但是,如果您正在考虑其他编码方法,特别是函数编码,那么您就已经了解了一些东西。在函数编码中,我们希望避免所有的副作用。它们可以修改函数中的变量并返回一个值,但是不应该修改来自外部世界的任何内容(因此如果您正在进行函数编程,就不会使用类)。有关详细信息,请参阅本文:https://dzone.com/articles/side-effects-1

但是,对于您正在执行的编码类型,类方法修改类的状态没有问题。你知道吗

相关问题 更多 >

    热门问题