如何通过使用整数更改列表中的某些字母来对包含字母的列表求和?

2024-10-05 14:30:50 发布

您现在位置:Python中文网/ 问答频道 /正文

刚开始学习Python,我正在尝试创建一个21点游戏。我想找出玩家手中的牌值之和。我的方法是将字母“J”、“Q”、“K”的值改为10,将“A”的值改为11。我已经定义了类Card,但是当我运行代码时,我得到一个错误:“type object'Card'没有属性'value'”


import random


DEFAULT_SUITS = ("Clubs","Hearts","Diamonds","Spades")
DEFAULT_VALUES = ("A",2,3,4,5,6,7,8,9,10,"J","Q","K")


class Card():
    def __init__ (self, suit, value):
        self.suit = suit
        self.value = value
    
    def show(self):
        print(self.value, self.suit)

  
class Shoes():
    def __init__(self, decks, suits=DEFAULT_SUITS, values=DEFAULT_VALUES):
        self.cards = []
        for deck in range(decks):
            for suit in suits:
                for value in values:
                    self.cards.append(Card(suit,value))
        random.shuffle(self.cards) 
        
    def show(self):
        for card in self.cards:
            card.show()
    
    def drawcard(self):
        return self.cards.pop()
    
          
class Player():
    def __init__ (self, name):
        self.name = name
        self.hand = []
    
    def drawcard(self, shoes):
        self.hand.append(shoes.drawcard())
        return self
    
    def totalvalue(self):
        for card in self.hand:
            if Card.value == "J":
                self.hand = [10 if card=="J" else card for card in cards]
            if Card.value == "Q":
                self.hand = [10 if card=="Q" else card for card in cards]
            if Card.value == "K":
                self.hand = [10 if card=="K" else card for card in cards]
            if Card.value == "A":
                self.hand = [11 if card=="A" else card for card in cards]    
        self.totalvalue = sum(self.hand(Card.value))
    
    def showhand(self):
        for card in self.hand:
            card.show()
            
shoe = Shoes(int(input("Enter the number of deck used in a shoes: ")))

bob = Player("bob")
bob.drawcard(shoe)
bob.showhand()
bob.totalvalue()

我如何更改手中的值“J”、“Q”、“K”、“A”并将其相加以获得总值


Tags: inselfdefaultforifvaluedefshow
2条回答

您已经使用了Card.value,其中Card是一个类instace,只需在totalvalue函数中将Card更改为Card即可

接下来,我会建议做一本字典; 从偶数中取每一个值

dict = {'A':1, '2':2,.......}

诸如此类

def totalvalue(self):
   self.totalvalue =0;
   dict = {'A':1, '2':2,.......};
       for card in self.hand:
            self.totalvalue = self.totalvalue +dict[card.value]

我看到在使用卡片列表时有些混乱。这是你应该做的

def totalvalue(self):
    total = 0
    for card in self.hand:
        if card.value in ["J", "Q", "K"]:
            total = total + 10
        elif card.value == "A":
            total = total + 11
        else:
            total = total + card.value
        
    self.totalvalue = total

可以使用下面的列表理解进一步简化代码

def totalvalue(self):
    return  sum([10 if card.value in ['J', 'Q', 'K'] else 11 if card.value == 'A' else card.value for  card in self.hand])

相关问题 更多 >