首页 > 解决方案 > 如何在列表中创建对象的字符串表示形式?

问题描述

我正在尝试使用 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)

标签: pythonpython-3.xclassmultiple-instances

解决方案


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

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))

然后

>> a = [Card(3,'Diamonds'),Card(2,'Spades')]
>> print(a)
[3 of Diamonds, 2 of Spades]

也就是说,请参阅@abarnerts 关于格式化 repr 的评论


推荐阅读