Yahtzee使用Asciitable,需要分配玩家积分

时间:2016-08-12 10:30:40

标签: python

我目前正在制作一个yahtzee板,但我正在解决我很难搞清楚的问题,我的代码目前看起来像这样:

from terminaltables import AsciiTable

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


    def __repr__(self):
        return self.name

    def __str__(self):
        return self.name


def welcome():
    print("Welcome to the yahtzee game!")
    players = int(input("How many players: "))
    rounds=0
    spelarlista=[]
    spelarlista.append("name")
    while not players==rounds:
        player=input("What is your name?: ")
        rounds=rounds+1
        spelarlista.append(Player(player))
    for i in range(len(spelarlista)):
        table_data = [spelarlista,
            ['Ettor',spelarlista[1:i],","],
            ['Tvåor'],
            ['Treor'],
            ['Fyror'],
            ['femmor'],
            ['sexor']]
    table = AsciiTable(table_data)
    table.inner_row_border = True
    print(table.table)
welcome()

让我们说,对于名字,我称“詹姆斯”,“阿尔弗雷德”和“彼得”,然后我将得到每个名称的三列,这实际上是我想要的。下一个问题是在每一栏下,我想分配球员核心。问题在于,如果我使用spelarlista而不是spelarlista [1],我将在第一列中获得一个列表,有没有办法让每一行都在一个可用的标题行中?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您需要使用单个字符串/数字列表,这些列表/数字不包含每行的其他列表。目前: ['Ettor',spelarlista[1:i],","],看起来像'Ettor',['James', 'Alfred',","],,看起来更像'Ettor', 0, 0, 0

(请注意,由于不是英语,我不知道我是否有正确的逻辑!我假设" ettors" =="些" ;)

由于您有Player个对象的列表,并且您想要使用这些对象的分数,您可以使用列表推导从对象创建行,只选择您想要的属性(但请参阅*请注意以下内容):

['Ettor'] + [player.ones for player in spelarlista],
['Tvåor'] + [player.twos for player in spelarlista],
...

其他一些问题:

您应该使用for循环而不是while循环来获取名称,因为您知道其中有多少名称。我会使用一个更好的变量名称,因为players听起来像存储...玩家(名字可能) - 特别是因为你使用player来存储每个玩家的名字。 player变量的类型应为Player(类)。

for i in range(number_of_players):
    name = input("What is your name?: ")
    spelarlista.append(Player(name))

*您当前创建变量spelarlista作为Player对象列表,其中包含字符串" name"在第一个位置。这是不一致和无益的。我上面的列表理解假设没有" name"在开始时。相反,只需添加" Name"当你在桌子上需要它时,比如:

table_data = [["Name"] + spelarlista,

您当前的代码在for循环中创建表,然后仅使用最后一个。循环是多余的。

我希望有所帮助。