簡體   English   中英

python中的類、屬性和方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM