python中的类、属性和方法



嗨,我是python的新手,在网上做这个练习,我卡住了。这是练习和我已经做的,有人可以帮助我。

定义一个Case类,它只包含一个occupy属性。

此属性将在实例化过程中自动取值' '。

在Case类中定义一个play1方法,如果Case未被占用,则将值'X'赋给被占用的属性。

在Case类中定义一个play2方法,如果Case未被占用,则将值'O'赋给被占用的属性。

这是我的代码的第一部分:

class Case: 
def __init__(self, occupe):
self.occupe = ' '

def jouer1(self):
if self.occupe == ' ':
self.occupe = 'X'
def jouer2(self):
if self.occupe == ' ':
self.occupe = 'O'

定义一个有两个属性的Terrain类:grid和tower。grid属性是一个包含9个元素的列表,类型为Case。

turn属性是一个整数,如果轮到玩家1,则等于1,如果轮到玩家2,则等于2。

lap属性将自动初始化为值1。在Terrain类中定义方法str这将允许你在这个类的对象上使用print函数。

打印函数应该在第一行显示第0到2框的内容,然后在第二行显示第3到5框的内容,最后在第三行显示第6到8框的内容。

这些方框将被字符'|'分隔,每行将以与行结束字符匹配的 n字符结束。

在类Terrain中定义一个方法play,它将以0到8之间的整数作为参数。根据轮到哪个玩家玩,这个方法将调用与参数传递的整数对应的单元格的play1或play2方法。

然后有必要修改turn属性的值,以便下一个玩家可以玩。

class Terrain():
def __init__(self, tour , grille = [0,1,2,3,4,5,6,7,8]):
self.grille = grille
self.tour = 1
def __str__(self):
for i in range(3):
return self (" | ".__str__() +str(grille[i+3]), end='')  
print("     0)  1)  2)")
for i in range(3,6):
print(" | "+str(grille[i+3]), end='')  
print("     0)  1)  2)")   
for i in range(6,9):
print(" | "+str(grille[i+3]), end='')  
我不理解str方法有人可以帮助我。

str接受一个类似整数或浮点数的参数,并将其转换为String(单词)。要将string和数字相加,首先需要将该数字转换为string(一个单词)。

__str__方法用于指定当您的类被视为字符串时的样子. 例如,考虑这样一个类:

class myClass:
def __init__(self, x, y) -> None:
self.x = x
self.y = y

当你调用print(myClass(2, 3))时,你会得到类似的结果:

& lt;__main__.myClass对象在0x00....>

但是,如果你有这样一个类:

class myClass:
def __init__(self, x, y) -> None:
self.x = x
self.y = y
def __str__(self) -> str:
return f"x: {self.x}ny: {self.y}"

然后,当你调用print(myClass(2, 3))时,你将得到

x: 2

y: 3

在你的例子中,我认为代码应该是这样的:

class Case:
def __init__(self) -> None:
self.occupy = ' '
def play1(self) -> None:
if self.occupy == ' ':
self.occupy = 'X'
def play2(self) -> None:
if self.occupy == ' ':
self.occupy = 'O'
class Terrain:
def __init__(self, turn: int) -> None:
self.grid = [Case(), Case(), Case(),
Case(), Case(), Case(),
Case(), Case(), Case()]
self.turn = turn
self.lap = 1
def __str__(self) -> str:
line1 = [x.occupy for x in self.grid[:3]]
line2 = [x.occupy for x in self.grid[3:6]]
line3 = [x.occupy for x in self.grid[6:]]
final_string = 'n'.join(['|'.join(line) for line in [line1, line2, line3]])
return final_string

或者,如果你像我一样,喜欢写俏皮话:

class Case:
def __init__(self) -> None:
self.occupy = ' '
def play1(self) -> None:
if self.occupy == ' ':
self.occupy = 'X'
def play2(self) -> None:
if self.occupy == ' ':
self.occupy = 'O'
class Terrain:
def __init__(self, turn: int) -> None:
self.grid = [Case() for _ in range(9)]
self.turn = turn
self.lap = 1
def __str__(self) -> str:
return 'n'.join(map(lambda x: '|'.join(map(lambda y: y.occupy, self.grid[3*x:3*x+3])), range(3)))

另外,请记住__str__返回的值必须是字符串。

和我们能做什么

在类Terrain中定义一个方法play,它将以0到8之间的整数作为参数。该方法将调用与参数传递的整数对应的单元格的play1或play2方法。

相关内容

  • 没有找到相关文章

最新更新