1

カードを配り、各プレイヤーに 5 枚のランダムなカードを割り当てるプログラムを作成しています。各プレイヤーの手札 (showHand 関数) を印刷しようとするまで動作します。特定のプレイヤーが持っているカードを印刷しようとしていますが、「カード」はグローバル属性ではないと言っています。そうではないことはわかっていますが、それ以外の方法でプレーヤーのカードを印刷する方法がわかりません。ヘルプ?

import random

NUMCARDS = 52
DECK = 0
PLAYER = 1
COMP = 2

cardLoc = [0] * NUMCARDS
suitName = ("hearts", "diamonds", "spades", "clubs")
rankName = ("Ace", "Two", "Three", "Four", "Five", "Six", "Seven",
            "Eight", "Nine", "Ten", "Jack", "Queen", "King")
playerName = ("deck", "player", "computer")


#assigns random card to given player
def assignCard(str):

    #generates random card number to assign to player
    randomNum = random.randrange(0, NUMCARDS-1)

    #makes sure card being picked for player is not already assigned to another player
    while cardLoc[randomNum] != 0:
        randomNum = random.randrange(0, NUMCARDS-1)

    cardLoc[randomNum] = str


#shows all the cards in the deck
def showDeck():
    print "#      Card       Location"
    print "---------------------------"

    cardNum = 0

    for x in rankName:
        #assigns all ranks
        rank = x

        for y in suitName:
            #assigns all suits
            suit = y

            cards = "%s of %s" % (rank, suit)
            cardNum += 1

            location = cardLoc[cardNum-1]
            location = detLocation(location)

            print "%s  %s %s" % (cardNum, cards, location)
            global cards


#has program print out appropriate location instead of number
def detLocation(location):
    if location == PLAYER:
        return "Player"
    elif location == COMP:
        return "Computer"
    else:
        return "Deck"


#shows given player's hand... but not their foot (;
def showHand(str):
    global cards
    location = detLocation(str)
    print "Displaying %s Hand:" %location

    for i in range(5):
        cardLoc[cards] = str
        print "%s" % cardNum


#calls all functions necessary
def main():
    clearDeck()

    for i in range(5):
        assignCard(PLAYER)
        assignCard(COMP)

    #showDeck()
    showHand(PLAYER)
    showHand(COMP)
4

4 に答える 4

2

初期化され、ラベルを含むグローバル カード オブジェクトが必要だと思います。で行うことと同様ですshowDeck。の単なる配列である可能性がありNUMCARDSます。次に、showHandcardLoc を繰り返し処理し、ユーザーに与えられたものだけを出力します。

for i in NUMCARDS:
    if cardLoc[i] == str:
        print cards[i]

オブジェクト階層がこのケースに最も適しているかどうかはわかりませんが、コードを大幅に変更せずに問題を解決しようとしています.

于 2013-06-15T23:23:17.063 に答える
2

まず第一に、あなたのassignCard関数はグローバル変数を変更しません (私はそれがあなたが実際に行うことはないと思います) ので、global cardLoc このグローバル変数を変更したような行をそこに追加する必要があります。次のコードでカードを印刷できます

for i in range(NUMCARDS-1):
    if cardLoc[i] == str:

iあなたのデッキの の位置に割り当てられているカードを印刷します。

于 2013-06-15T23:51:18.363 に答える