2016-08-12 109 views
1

我目前工作的一个的Yahtzee板,但我走进的问题我有一个很难搞清楚,我的代码是这样看现在:的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

您需要使用单个不包含其他列表的字符串/数字的单个列表。目前: ['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来存储每个玩家的名字。 A player变量应该是Player(class)类型。

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

*您目前创建变量spelarlista作为播放器的列表,在第一位置的字符串“name”的对象。这是不一致的和无益的。上面的列表理解在开始时假定没有“名称”。相反,当你需要在你的桌子,像是刚加入“名”:

table_data = [["Name"] + spelarlista, 

您当前的代码回路创建一个表,则仅使用最后一个。循环是多余的。

我希望有帮助。

+1

现在管理解决问题,非常感谢你! – wertyle