嗨,我是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))
时,你将得到
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方法。