簡體   English   中英

為什么我的代碼返回變量的地址而不是值?

[英]Why is my code returning the address of the variable instead of the value?

我發現很難理解為什么我的代碼返回我的 memory 地址。 我曾嘗試分別使用__str____repr__但也許我不熟悉它們的工作原理。

import random

class Card:
    def __init__(self, suit, value):
        self.suit = suit #['H','D','C','S']
        self.value = value #['A',2,3,4,5,6,7,8,9,10,'J','Q','K']
    
class Deck:
    def __init__(self):
        self.cards =[]
    
    def __repr__(self):
        return f'Card("{self.card}")'
    
    def build(self):
        for x in['H','D','C','S']:
            for y in range(1,14):
                self.cards.append(Card(x,y))
                if(y==1):
                    self.cards.append(Card(x,'A'))
                elif(y==11):
                    self.cards.append(Card(x,'J'))
                elif(y==12):
                    self.cards.append(Card(x,'Q'))
                elif(y==13):
                    self.cards.append(Card(x,'K'))
    def shuffle(self):
        for i in range(len(self.cards)-1,0,-1):
            r = random.randint(0,i)
            self.cards[i], self.cards[r]= self.cards[r], self.cards[i]
                
    def deal(self):
        card = self.cards.pop()
        print(repr(card))

d = Deck()
d.build()
d.shuffle()
d.deal()
<__main__.Card object at 0x7f836e0ed070>

以上是我收到的代碼和 output,如有任何幫助,我們將不勝感激。

您似乎忘記了為Card class 定義__repr__方法。應該是這樣的:

    def __repr__(self):
        return f"Card({self.value})"

而對於 Deck,我會將其定義為:

    def __repr__(self):
        return f'Deck("{self.cards}")'

結果 output 將是Card(<some-number>)

您的 Class Card需要__repr__ function,因為 python 試圖打印 Type Card 的實例,而不是卡片組:

class Card:
def __init__(self, suit, value):
    self.suit = suit  # ['H','D','C','S']
    self.value = value  # ['A',2,3,4,5,6,7,8,9,10,'J','Q','K']
def __repr__(self):
    return f'{self.suit}-{self.value}'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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