0

ユーザーと一緒にブラックジャックをプレイする次のプログラムを作成しましたが、プレーヤーがジャック、クイーン、またはキングを獲得するたびに、total_value 関数の if ステートメントはそれらを検出しません。これを修正するにはどうすればよいですか? また、コードをクリーンアップしたり、構文を改善したりするための一般的な指針はありますか?

import random
from random import randint

class deck():
    """This class holds the deck information"""
    clubs = ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"]
    spades = ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"]
    hearts = ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"]
    diamonds = ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"]
    suites = ["clubs", "spades", "hearts", "diamonds"]

    def drawcard(self):
        #This method removes a card from the deck and returns it.
        #Do not draw cards when there are none left.
        if self.suites:
            suite = random.choice(self.suites)
            suite_number = randint(0, len(self.suites) - 1)
            if suite == "clubs":
                card = (self.clubs).pop(randint(0, len(self.clubs) - 1))
                if not self.clubs:
                    (self.suites).remove("clubs")
            elif suite == "spades":
                card = (self.spades).pop(randint(0, len(self.spades) - 1))
                if not self.spades:
                    (self.suites).remove("spades")
            elif suite == "hearts":
                card = (self.hearts).pop(randint(0, len(self.hearts) - 1))
                if not self.hearts:
                    (self.suites).remove("hearts")
            elif suite == "diamonds":
                card = (self.diamonds).pop(randint(0, len(self.diamonds) - 1))
                if not self.diamonds:
                    (self.suites).remove("diamonds")
            return card, suite
        else:
            return "OUT", "CARDS ERROR"

def total_value(hand):
    #This function returns the current total value of a player's hand.
    #For example, ["A", "K"] would return 21.
    value = 0
    aces = 0
    for card in hand:
        if card == "A":
            aces = aces + 1
        elif card == "J":
            value == value + 10
        elif card == "Q":
            value == value + 10
        elif card == "K":
            value == value + 10
        else:
            value = value + card
    if aces == 1:
        if value <= 10:
            value = value + 11
        elif value > 10:
            value = value + 1
    elif aces == 2:
        if value <= 9:
            value = value + 12
        elif value > 9:
            value = value + 2
    elif aces == 3:
        if value <= 8:
            value = value + 13
        elif value > 8:
            value = value + 3
    elif aces == 4:
        if value <= 7:
            value = value + 14
        elif value > 7:
            value = value + 4
    return value

new_deck = deck()
player_hand = [ ]
card1 = new_deck.drawcard()
card2 = new_deck.drawcard()
print "You have drawn a " + str(card1[0]) + " of " + card1[1] + " and a " + str(card2[0]) + " of " + card2[1] + "!"
player_hand.append(card1[0])
player_hand.append(card2[0])

dealer_hand = [ ]
card3 = new_deck.drawcard()
card4 = new_deck.drawcard()
dealer_hand.append(card3[0])
dealer_hand.append(card4[0])

gameover = False
win = False
dealer_finished = False
player_finished = False
while not gameover:
    while dealer_finished == False:
        if total_value(dealer_hand) < 17:
            card = new_deck.drawcard()
            dealer_hand.append(card[0])
        elif total_value(dealer_hand) >= 17:
            dealer_finished = True
    if total_value(dealer_hand) > 21:
        print "Dealer Busts!"
        win = True
        gameover = True
        break
    while player_finished == False:
        choice = raw_input("Hit or Stay? ")
        choice.capitalize()
        if choice == "Hit":
            card = new_deck.drawcard()
            player_hand.append(card[0])
            print "You drew a", card[0], "of " + card[1]
            if total_value(player_hand) > 21:
                player_finished = True
                break
        elif choice == "Stay":
            player_finished = True
            gameover = True
            break
        else:
            print "Invalid Option"
    if total_value(player_hand) > 21:
        win == False
        gameover == True
        break
    gameover == True

if win == True:
    print "Congratulations!"
else:
    print total_value(player_hand), total_value(dealer_hand)
    if total_value(player_hand) > 21:
        print "You bust!"
    elif total_value(dealer_hand) > total_value(player_hand):
        print "The dealer had", str(total_value(dealer_hand)), "but you only had", str(total_value(player_hand)) + "."
        print "You lose!"
    elif total_value(dealer_hand) == total_value(player_hand):
        print "You tie the dealer with", total_value(dealer_hand)
    elif total_value(dealer_hand) < total_value(player_hand):
        print "The dealer had", str(total_value(dealer_hand)), "and you had", str(total_value(player_hand)) + ", so you win!"
4

1 に答える 1

0

JQ、およびKケースの二重等号があります。

    if card == "A":
        aces = aces + 1
    elif card == "J":
        value == value + 10    #xxx
    elif card == "Q":
        value == value + 10    #xxx
    elif card == "K":
        value == value + 10    #xxx
    else:
        value = value + card

これが行うのは、 であるかどうかをチェックvalueし、またはvalue + 10に評価することだけです。次の値を割り当てます。TrueFalse

    if card == "A":
        aces = aces + 1
    elif card == "J":
        value = value + 10
    elif card == "Q":
        value = value + 10
    elif card == "K":
        value = value + 10
    else:
        value = value + card

またはさらに良い:

    if card == "A":
        aces = aces + 1
    elif card == "J":
        value += 10
    elif card == "Q":
        value += 10
    elif card == "K":
        value += 10
    else:
        value += card
于 2013-03-18T22:07:55.263 に答える