首页 > 解决方案 > 如何验证我的 beginSim() 是否正确生成了我的排行榜列表?

问题描述

我是 Python 新手,如果这个问题是基本的,我深表歉意。我正在尝试编写游戏排行榜的模拟。我正在使用许多其他模拟示例来尝试将适合我用例的东西拼接在一起。目前,我正在尝试确认当我启动我的 sim 卡时,代码正确地生成了一个由 100 名玩家组成的相对随机的排行榜,其中包含已定义的名称和“支付”的随机值。我正在尝试打印排行榜,期望看到我的每个 playerList 值,加上随机生成的 0 到 23 之间的整数。但是,我只得到字节的结果:“< main .Player object at 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)

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

谢谢你尽你所能的帮助!

标签: pythonsimulationleaderboard

解决方案


您正在打印类型对象Leaderboard列表。Player当您提供print一个对象时,它会尝试将其转换为字符串格式。当您提供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__()

推荐阅读