如何通过用整数更改列表中的某些字母来对包含字母的列表求和?
How to sum a list that contains letters by changing certain letters in a list with integers?
刚开始学习 Python,我正在尝试制作二十一点游戏。我想找到玩家手中牌值的总和。我的方法是将字母“J”、“Q”、“K”的值更改为 10,将“A”的值更改为 11。我已经定义了 class 卡片,但是当我 运行代码,我收到一条错误消息“type object 'Card' has no attribute '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”,然后将其相加得到总值?
你用过Card.value,其中Card是一个class实例,只需将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])