Python 如何创建列表中对象的字符串表示形式?

Python 如何创建列表中对象的字符串表示形式?,python,python-3.x,class,multiple-instances,Python,Python 3.x,Class,Multiple Instances,我正在尝试用Python创建一个国王杯游戏(涉及纸牌的饮酒游戏)。目前,当我打印卡片组和参与者列表时,控制台似乎正在打印内存地址。我将感谢任何帮助、指点、提示和建议。谢谢你 import random class Participant: def __init__(self, name, gender): self.name = name self.gender = gender self.cards = [] def drawC

我正在尝试用Python创建一个国王杯游戏(涉及纸牌的饮酒游戏)。目前,当我打印卡片组和参与者列表时,控制台似乎正在打印内存地址。我将感谢任何帮助、指点、提示和建议。谢谢你

import random

class Participant:
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
        self.cards = []
    def drawCard(self):
        self.cards += deck.pop()
    def showCards(self):
        print(self.name) 
        print(self.cards) 


class Card:
    def __init__(self, value, suite):
        self.value = value
        self.suite = suite
    def getValue(self):
        return self.value
    def getSuite(self):
        return self.suite
    def __str__(self):
        return ("{0} of {1}".format(self.value, self.suite))

deck = []
participants = []

def shuffleDeck():
    for suite in ["Clubs", "Diamonds", "Hearts", "Spades"]:
        for num in ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]:
        deck.append(Card(num, suite))
    random.shuffle(deck)
    return deck 


players = input("Enter the number of players: ")
numPlayers = int(players)
if numPlayers < 3:
    print(players)
    print("Not enough players.")
elif numPlayers > 12:
    print(players)
    print("That's too many players.")
else:
    for player in range(numPlayers):
        player += 1
        name = input("Player %s's Name: " %player) 
        gender = input("Player %s's Gender: " %player)
        participants.append(Participant(name, gender))

deck = shuffleDeck()

print(deck)
print(participants)
随机导入
学员:
定义初始(自我、姓名、性别):
self.name=名称
self.gender=性别
self.cards=[]
def提款卡(自助):
self.cards+=deck.pop()
def显示卡(自):
打印(self.name)
打印(自助卡)
班级卡:
定义初始(自我、价值、套件):
自我价值=价值
self.suite=suite
def getValue(自身):
回归自我价值
def getSuite(自我):
返回自助套房
定义(自我):
返回({1}.format(self.value,self.suite)中的({0})
甲板=[]
参与者=[]
def shuffleDeck():
对于[“梅花”、“钻石”、“红心”、“黑桃”中的套房]:
对于[“A”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“杰克”、“女王”、“国王”中的数字]:
卡片组。附加(卡片(数量,套件))
随机。洗牌(牌组)
返回甲板
玩家=输入(“输入玩家数量:”)
numPlayers=int(玩家)
如果层数小于3:
打印(玩家)
打印(“没有足够的玩家。”)
elif numPlayers>12:
打印(玩家)
打印(“玩家太多了。”)
其他:
对于范围内的玩家(多玩家):
玩家+=1
名称=输入(“玩家%s的名称:”%Player)
性别=输入(“玩家%s的性别:”%Player)
参与者。追加(参与者(姓名、性别))
deck=shuffleDeck()
印刷品(甲板)
打印(参与者)

为每个实例定义一个表示。例如:

class Card:
    def __init__(self, value, suite):
        self.value = value
        self.suite = suite
    def getValue(self):
        return self.value
    def getSuite(self):
        return self.suite
    def __str__(self):
        return ("{0} of {1}".format(self.value, self.suite))
    def __repr__(self):
        return ("{0} of {1}".format(self.value, self.suite))
然后


也就是说,请参见@abarnerts关于格式化repr的注释定义每个实例的表示形式。例如:

class Card:
    def __init__(self, value, suite):
        self.value = value
        self.suite = suite
    def getValue(self):
        return self.value
    def getSuite(self):
        return self.suite
    def __str__(self):
        return ("{0} of {1}".format(self.value, self.suite))
    def __repr__(self):
        return ("{0} of {1}".format(self.value, self.suite))
然后


也就是说,请参见@abarnerts关于格式化repr的注释。Python使用指针将信息存储在内存中。当您创建一个变量时,您会说:嘿,python,记住这个变量指向这段内存

当您打印字符串或数字时,python将为您自动设置其格式,但当涉及到更复杂的对象时,它不知道该做什么

要通知python要做什么,您需要创建神奇的函数
\uuuu str\uuuu>(两边各有2个下划线),您已经这样做了

问题是,当您打印列表时,您不会打印每个单独的对象,而是打印列表代表每个对象的内容。这样更有用,因为您存储的不是字符串或int之类的简单对象,而是复杂的定义结构

要告诉python要表示什么,您需要创建神奇的函数
\uuuu repr\uuu
。我强烈建议您不要复制
\uuu str\uu
函数。最好打印类似于
卡(*value*,*suite*)
。换句话说:您的init函数

礼品代码:

def __repr__(self):
    return '{}({}, {})'.format(self.__name__, self.value, self.suite)

Python使用指针将信息存储在内存中。当您创建一个变量时,您会说:嘿,python,记住这个变量指向这段内存

当您打印字符串或数字时,python将为您自动设置其格式,但当涉及到更复杂的对象时,它不知道该做什么

要通知python要做什么,您需要创建神奇的函数
\uuuu str\uuuu>(两边各有2个下划线),您已经这样做了

问题是,当您打印列表时,您不会打印每个单独的对象,而是打印列表代表每个对象的内容。这样更有用,因为您存储的不是字符串或int之类的简单对象,而是复杂的定义结构

要告诉python要表示什么,您需要创建神奇的函数
\uuuu repr\uuu
。我强烈建议您不要复制
\uuu str\uu
函数。最好打印类似于
卡(*value*,*suite*)
。换句话说:您的init函数

礼品代码:

def __repr__(self):
    return '{}({}, {})'.format(self.__name__, self.value, self.suite)

您只需要定义一个
\uuuu repr\uuuu
以及一个
\uuu str\uuuu
。或者,不要尝试打印卡片列表,而是单独打印每张卡片,因为列表总是显示其内容的repr,而不是str,因为列表不是真正用于“人类”(与程序员相反)消费的。通常,你的repr应该看起来像
卡片(“2”,“心”)
。换句话说,就像一个Python表达式,如果你将它粘贴到交互式解释器中,它将创建一个相等的对象,因为你通常只打印repr以进行调试。你的缩进在append
shuffleDeck
函数中是关闭的。append方法需要嵌套在第二个循环中。谢谢大家。我只是出于测试的目的打印了整副牌。我的代码仍在进行中。我感谢你们的帮助。@nicholishen你说得对。谢谢你!您只需要定义一个
\uuuu repr\uuuu
以及一个
\uuu str\uuuu
。或者,不要尝试打印卡片列表,而是单独打印每张卡片,因为列表总是显示其内容的repr,而不是str,因为列表不是真正用于“人类”(与程序员相反)消费的。通常,你的repr应该看起来像
卡片(“2”,“心”)
。换句话说,就像一个Python表达式,如果你将它粘贴到交互式解释器中,它将创建一个相等的对象,因为你通常只打印repr以进行调试。你的缩进在append
shuffleDeck
函数中是关闭的。append方法需要嵌套在第二个循环中。谢谢大家。我只是出于测试的目的打印了整副牌。我的代码仍在进行中。我感谢你们的帮助。@nicholishen你说得对。谢谢你!字符串是o