2016-08-12 22 views
1

プレイヤーポイントを割り当てる必要がありますが、私は考え出す苦労を持って問題に歩いている:ヤッツィー、私は現在ヤッツィーボードに取り組んでいます

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() 

「ジェームズ」、「アルフレッド」、「ピーター」の名前を入力すると、それぞれの名前のついた3つの列が表示されます。次の問題は、各コラムの下で、選手のコアを割り当てたいということです。問題は、たとえば私がspelarlista [1]の代わりにspelarlistaに行った場合、最初の列にリストを取得するだけです。ヘッダー行にすべての行を作成する方法はありますか?

ありがとうございます!

答えて

1

各行に他のリストを含まない単一の文字列/数字のリストを使用する必要があります。現在: ['Ettor',spelarlista[1:i],","],は、'Ettor', 0, 0, 0のようになりたい場合は'Ettor',['James', 'Alfred',","],のようになります。

は(私が右により英語でされていないにロジックを持っている場合、私は知らないことに注意してください!私は「ettors」==「もの」と仮定しています。)

をあなたがリストを持っているので、 Playerオブジェクトとあなたがそれらからスコアを使用したい、あなたは次のように、あなたが望む属性のみを選択して、オブジェクトからあなたの行を作成するには、リストの内包表記を使用します(ただし、*は、下記の注を参照)することができます

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

一部その他の問題:

名前を取得するには、whileループの代わりにforループを使用する必要があります。私はより良い変数名を使用します。playersは店舗のように聞こえます。プレーヤー(名前はおそらく)です。特に、各プレーヤーの名前を格納するのにplayerを使用しています。 player変数はPlayer(クラス)である必要があります。

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

あなたは現在プレーヤーのリストとして変数spelarlistaが第一の位置にある文字列「名前」を持つオブジェクトを作成*。これは一貫性がなく、役に立たない。上記の私のリスト内包は、最初は「名前」を仮定していません。あなたのテーブルにそれを必要とするとき代わりに、同じように、「名前」を追加します。

table_data = [["Name"] + spelarlista, 

あなたの現在のコードは、唯一、最終的なものを使用して、ループのためにテーブルを作成します。ループは冗長です。

私は役立つことを願っています。

+1

今問題を解決するために管理され、あなたに多くのおかげで! – wertyle

関連する問題