如何验证我的 beginSim() 是否正确生成了我的排行榜列表?

问题描述

我是 Python 新手,所以如果这个问题很基础,我深表歉意。我正在尝试编写游戏排行榜的模拟。我正在使用许多其他模拟示例来尝试将适合我的用例的东西拼接在一起。目前,我试图确认当我启动我的 sim 时,代码正确生成一个相对随机的 100 名玩家排行榜,其中包含定义的名称和“支付”的随机值。我正在尝试打印排行榜,期望看到我的每个 playerList 值,以及 0 到 23 之间随机生成的整数。但是,我只得到以字节为单位的结果:“ma​​in.Player对象在 0x000001DCC67F4640>"。

import random

num_in_chat = 24
num_not_in_chat = 76
num_battles = 1 #testing on 1 before adding more


playerList = []
for i in range(num_in_chat):
    playerList.append("F"+ str(i+1))
for i in range(num_not_in_chat):
    playerList.append("NF"+ str(i+num_in_chat+1))

leaderboard = []


class Player:
    def __init__(self,payout_hour):
        self.rank = range(1,num_in_chat+num_not_in_chat+1)
        self.payout = payout_hour

def beginSim():
    for i in playerList:
        leaderboard.append(Player(random.randint(0,24))) #I believe this line should randomly generate a payout hour between 0 and 23 for every player 

beginSim()  

print(leaderboard)

这里的重点是我最终要编写规则来模拟每个玩家如何在一天的过程中开始与其他玩家交换位置(按一天的每一分钟迭代)。如果我开始的排行榜不正确,其余的都无关紧要。

感谢您提供的任何帮助!

解决方法

您正在打印 Leaderboard,它是 Player 类型对象的列表。 当您给 print 一个对象时,它会尝试将其转换为 String 格式。 当你给 print 一个对象列表时,它会打印这些对象的字符串表示的列表。

问题的简化是,如果您有这样的列表:Leaderboard = [Player(1),Player(2)] python 将尝试打印:print([repr(Player(1)),repr(Player(2))])

由于 python 不知道如何将 Player 对象转换为字符串,所以它只是打印对象的表示。

您可以向您的 __str__ 类添加一个 Player 方法,以便它可以按照您希望的方式转换为 String,然后还可以添加一个 __repr__ 方法,以便它会知道如何以字符串格式表示您的对象。

例如:

class Player:
    def __init__(self,payout_hour):
        self.rank = range(1,num_in_chat+num_not_in_chat+1)
        self.payout = payout_hour

    def __str__(self):
        return "Player({},{})".format(self.rank,self.payout)

    def __repr__(self):
        return self.__str__()