2016-08-12 63 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