0

私は 2 回目の課題である Python での Go Fish ゲームのコードを作成しています。関数定義の 1 つとして、target_player カード リストから target_rank を取り出し、それを現在のプレイヤー カード リストに追加する必要があります。for ループを使用してみましたが、リストの長さを変更するとエラーが発生します。これまでのところ、私が持っているコードは

def Hit(player_number, target_player, target_rank, pHands):
    while str(target_rank) in pHands[target_player]:
       pHands[player_number].append(pHands[target_player].pop(target_rank))
    print pHands[player_number]
    print pHands[target_player]
pHands = [['a', '2', '3', '4', '4', '5', '6', '7', '7', 't'], ['2', 'q', '6', '9', '5', 'k', 'k', 'a', '3', '8'], ['j', '9', 't', 't', '2', 't', '7', 'j', '5', '9'], ['8', '8', 'a', 'q', 'k', '4', '6', '9', 'q', '2']]
Hit (0,1,'a',pHands)

pHands は、プレイヤー カードのリストのリストです。ターゲットランクは文字列であり、位の値ではないため、ポップを使用できないことは理解していますが、どんな助けでも大歓迎です。みんな、ありがとう!

4

2 に答える 2

3

popと をチェーンしないほうがわかりやすいと思いますappend。また、popカードの値自体ではなく、インデックス番号が必要なため、ここで使用するのは少し厄介です。代わりに、次を使用できますremove

def Hit(player_number, target_player, target_rank, pHands):
    while target_rank in pHands[target_player]:
        pHands[target_player].remove(target_rank)
        pHands[player_number].append(target_rank)
    print pHands[player_number]
    print pHands[target_player]

ただし、popremoveO(n)操作です。のカードごとに 1 回これを行うとpHands[target_player]while-loop O(n**2). でタスクを実行できればよりよいでしょう。これは、操作O(n)であるで可能です。したがって、の各カードに対して 1 回だけ行う必要がある場合、(以下) は次のようになります。appendO(1)appendpHands[target_player]for-loopO(n)

def Hit(player_number, target_player, target_rank, pHands):
    new_target_hand = []
    for card in pHands[target_player]:
        if target_rank == card:
            pHands[player_number].append(card)
        else:
            new_target_hand.append(card)
    pHands[target_player] = new_target_hand
    print pHands[player_number]
    print pHands[target_player]
于 2013-07-26T18:26:44.170 に答える
1

編集:私の作品は動作しますが、これはよりクリーンです。

def Hit(player_number, target_player, target_rank, pHands):
    try:
        while True:
           pHands[player_number].append(pHands[target_player].pop(pHands.index(target_rank)))
        print pHands[player_number]
        print pHands[target_player]
    except ValueError:
        pass # value no longer in hand
pHands = [['a', '2', '3', '4', '4', '5', '6', '7', '7', 't'], ['2', 'q', '6', '9', '5', 'k', 'k', 'a', '3', '8'], ['j', '9', 't', 't', '2', 't', '7', 'j', '5', '9'], ['8', '8', 'a', 'q', 'k', '4', '6', '9', 'q', '2']]
Hit (0,1,'a',pHands)
于 2013-07-26T18:25:30.257 に答える