[英]Class , attribute and method in python
嗨,我是 python 新手,在網上做這個練習我被卡住了。這是練習,我已經做了什么,有人可以幫助我。
定義一個包含單個占用屬性的 Case 類。
此屬性將在實例化期間自動采用值“”。
在 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'
定義一個具有兩個屬性的地形類:網格和塔。 grid 屬性是一個 Case 類型的 9 元素列表。
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__
方法用於指定類被視為字符串時的外觀。 例如, cionsider 一個這樣的類:
class myClass:
def __init__(self, x, y) -> None:
self.x = x
self.y = y
當您調用print(myClass(2, 3))
您會得到如下信息:
<
__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))
你會得到
×: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整數傳入參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.