Yahtzee游戏,没有工作

2024-04-18 01:20:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我意识到我最近在这个论坛上发了很多垃圾邮件,我只是想解决我的问题,因为我应该为任务创建一个yahtzee游戏。我的代码当前如下所示:

class Player:
    def __init__(self,name):
        self.name=name
        self.lista={"ones":0,"twos":0,"threes":0, "fours":0,"fives":0,"sixs":0,"abovesum":0,"bonus":0,"onepair":0,"twopair":0,"threepair":0,"fourpair":0,"smalladder":0,"bigladder":0,"house":0,"chance":0,"yatzy":0,"totalsum":0}
        self.spelarlista=[]

    def __str__(self):
        return self.name

    def welcome(self):
        print("Welcome to the yahtzee game!")
        players = int(input("How many players: "))
        rounds=0
        while not players==rounds:
            player=input("What is your name?: ")
            rounds=rounds+1
            self.spelarlista.append(Player(player))
            print(self.spelarlista)


def main():
    play=Player("Joakim")
    play.welcome()
    for key in ["names","ones","twos","threes","fours","fives","sixs","abovesum","bonus","onepair","twopair","threepair","fourpair","smalladder","bigladder","house","chance","yatzy","totalsum"]:
        print("%-20s"%key)


main()

我的目标是它看起来像这样:https://gyazo.com/26f997ed05c92898d93adaf0af57d024

如果你看我的方法“欢迎”,我想打印我的自述,只是想看看它会是什么样子,但我得到的只是“播放器对象在0x7fac824….”,我意识到我的str有问题,我应该如何更改它?你知道吗


Tags: nameselfdefonesplayerprint意识players
2条回答

如果您得到的是Player object at 0x7fac824或任何类似的东西,那么您似乎是在(间接地)调用对象上的repr,而该对象又调用了对象的__repr__方法。你知道吗

class Player:
    # ...

    def __repr__(self):
        return self.name

    # ...

由于没有定义__str__方法,因此__str__也将默认为调用__repr__。你知道吗

__repr__返回对象的字符串表示形式(通常可以转换回对象,但这只是一个约定),这正是您所需要的。你知道吗

打印对象列表时,python不会调用objects__str__方法,而是调用容器列表。如果你想把它们全部打印出来,可以调用__str__方法,方法是使用map()或列表理解对它们应用内置函数str(),然后用str.join()方法将它们连接起来。你知道吗

print(' '.join(map(str, self.spelarlista)))

或者作为另一种替代方法,您可以为对象定义^{}属性,该属性返回对象的正式字符串表示形式:

>>> class A:
...    def __init__(self):
...        pass
...    def __repr__(self):
...       return 'a'
... 
>>> l = [A()]
>>> 
>>> print l
[a]

相关问题 更多 >

    热门问题