我正在为我的一个项目制作一个BlackJack游戏。我在列表中制作了一副牌,包括等级和套装,但是当我尝试添加玩家的牌时,我只返回一个值,而不是总和。
我不知道如何管理它。首先,我必须得到列表中的所有元素,然后移除套装以获得一个数字,但我的一些数字是字母(杰克,女王,国王,王牌......)并且具有特定值。我该如何将它们加在一起?我和其他人一起尝试过,但是徒劳无功。
有关如何实现这一目标的任何提示?
以下是我的代码示例:
def create_deck(): #this creates the deck of cards
suit_string = 'hdcs'
rank_string = '23456789TJQKA'
global deck
deck = []
for suit in range(4):
for suit in range(13):
cards = rank_string[rank] + suit_string[suit]
deck.append(cards)
random.shuffle(deck)
return deck
def deal_cards(): #This takes one card from the deck and gives it to the player
return deck.pop(0)
def hand(): #Initial two cards
global player1_hand
player1_hand = []
print "Player's hand:"
for i in range(2): #initial cards
player1_hand.append(deal_cards())
print player1_hand
print value()
def value():
i = 0
while i < len(player1_hand):
card = player1_hand[i]
value = card[i]
if value in ('T','J','Q','K'):
return 10
elif value == 'A':
print "Please choose between 1 and 11."
value_a = input("---> ")
return value_a
else:
return value
i += 1
现在这就是它给我的东西:
Player's hand:
['Ks','Th']
Value 10
我知道我并没有真正添加这些值,但我不知道如何管理它。
任何帮助都将不胜感激。
希望我很清楚,因为英语不是我的主要语言。
答案 0 :(得分:0)
您编写的函数value()
看起来像是要计算player1_hand
的总值。但该函数只返回它看到的第一张卡的值:
while i < len(player1_hand):
if value in ('T','J','Q','K'):
return 10
elif value == 'A':
...
return value_a
else:
...
return value
return
语句会导致value()
立即返回,而不会继续循环。我想你想要做的就是让循环的每一步都将卡的值加到手的总价值中:
total_value = 0
for card in player1_hand:
rank = card[0]
if rank in ('T', 'J', 'Q', 'K'):
total_value += 10
elif rank == 'A':
print "Please choose between 1 and 11."
value_a = input("---> ")
total_value += int(value_a)
else:
total_value += int(rank)
return total_value
答案 1 :(得分:0)
首先,首先,代码中存在一些可能导致某些问题的错误。
1)在你的create_deck方法中,两个for循环都使用变量suit作为它们的迭代器,我假设第一个应该设置为排名吗?
2)你应该用return语句结束所有方法,即使它们什么也没有返回。这将迫使该方法退出并且是良好的编码实践。
好的,为了解决您的问题,您应该让您的值方法读取这样的内容。现在你退出方法,然后返回手牌中的总值,只返回一个值。要解决这个问题,请在while循环之外创建一个全局值,并将值元素添加到其中:
def value():
i = 0
total_value = 0
while i < len(player1_hand):
card = player1_hand[i]
value = card[i]
if value in ('T','J','Q','K'):
total_value += 10
elif value == 'A':
print "Please choose between 1 and 11."
value_a = input("---> ")
total_value += value_a
else:
total_value += value
i += 1
print(value)
return
答案 2 :(得分:0)
通过使用dict
的“排名值”,你可以循环播放玩家的手并总计价值。
def value():
hand_total = 0
# Add in a dict of "rank values" (excluding the Ace)
rank_values = {'2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8,
'9':9, '10':10, 'J':10, 'Q':10, 'K':10}
# No need for the while loop
for i in xrange(len(player1_hand)):
card = player1_hand[i][0] # the added index will get the card
if card == 'A': # without the suit.
print "Please choose between 1 and 11."
value_a = input("---> ")
hand_total += int(value_a) # add a type check before this
else:
hand_total += rank_values[card]
return hand_total
使用dict
您无需区分面部卡或编号卡,只需使用键(卡)值和总金额。