我正在编写二十一点游戏。我附加了所有卡片,包括皇室和王牌以及2到10。我遇到的麻烦是王牌。我的问题是能够在计算A之前计算所有纸牌,以澄清这一点,我的意思是我想在列表中的所有A之前计算所有纸牌,这样我就能知道总数是否大于11,如果是,那么只需为1加1如果没有,请添加11。到目前为止,我的代码:
import random
def dealhand(): #This function appends 2 cards to the deck and converts royals and aces to letters.
player_hand = []
for card in range(0,2):
card = random.randint(1,13)
if card == 1:
card = "A"
if card == 11:
card = "J"
if card == 12:
card = "Q"
if card == 13:
card = "K"
player_hand.append(card)
return player_hand
#this function sums the given cards to the user
def sumHand(list):
total = 0
for card in list:
card = str(card)
if card == "J" or card == "Q" or card== "K":
total+=10
continue
elif card == "2" or card == "3" or card == "4" or card == "5" or card == "6" or card == "7" or card == "8" or card == "9" or card == "10":
total += int(card)
elif card == "A":
if total<11:
total+=11
else:
total+=1
return total
我建议总数+ = 1,王牌+ = 1,然后在末尾,如果需要为每个王牌加10。
一些问题的提示:不要发布dealhand函数,因为这完全不相关。发布输入,输出和预期输出
def sumHand(hand):
...
hand = ['A', 'K', 'Q']
expected 21
actual 31
这是我建议的解决方法(此特定问题的最小更改)
def sumHand(hand):
total = 0
aces = 0
for card in hand:
card = str(card)
if card == "J" or card == "Q" or card== "K":
total+=10
continue
elif card == "2" or card == "3" or card == "4" or card == "5" or card == "6" or card == "7" or card == "8" or card == "9" or card == "10":
total += int(card)
elif card == "A":
total += 1
aces += 1
for _ in range(aces):
if total <= 11:
total += 10
return total
我将“ list”更改为“ hand”,因为这隐藏了内置类的名称,但除此之外没有造成混乱。我建议添加一个(经过单元测试的)函数以获取卡的价值。也许是一个用作名称-值映射的字典。您可以使用“ in”运算符简化某些条件。通过将int转换为string然后再返回int来处理int是很奇怪的。但是,这些都不与计数王牌的问题直接相关。