如何给列表中的字符串赋值?



非常不熟悉Python,也不熟悉编程。我目前的项目创建一个"bot"我可以在命令提示符或终端上发送消息,并与之一起玩赌场游戏。

我在编码21点时遇到了问题,特别是列表和该列表中字符串的值。


这是我的变量&列表现在的样子:

card = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]
value = [1,2,3,4,5,6,7,8,9,10] #not sure what you do with this line

我是这样选择一张随机卡片的:

card1 = card[randint(0,12)]

这是我如何找到随机选择的两张牌的和:

cardTotal = int(card1) + int(card2)

如果我不使用"int(x)"这两个数字没有相加,它只是把两个字符串放在一起,这是有意义的。我如何纠正这个问题?

Your previous cards were 7 and 3. The newest dealt card is 7 for a total of 737.
The house's previous total was 7.
The house is dealt another card 4, which comes to a total of 74.
Sorry, you lost.
PS C:UsersrDesktoppython>
You were dealt K and 7.
Traceback (most recent call last):
File "c:UsersrDesktoppythonCasinoBot.py", line 66, in <module>
cardTotal = int(card1) + int(card2)     # Sum of both cards
ValueError: invalid literal for int() with base 10: 'K'
PS C:UsersrDesktoppython> 

不确定牌的实际值,所以我将a设置为1,j设置为11,皇后设置为12,国王设置为13。根据需要更改字典中的值并添加其他文本。这只是打印两张牌的和。你的问题是,如果它选择了一张不是数字的牌,它将不起作用,等等,将'Jack'添加到11并得到一个数字是没有意义的。

import random
card = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]
cards = {
'Ace': '1',
'Jack': '11',
'Queen': '12',
'King': '13'
}
card1 = random.choice(card)
if card1 in cards:
card1 = cards[card1]
card2 = random.choice(card)
if card2 in cards:
card2 = cards[card2]
cardTotal = int(card1) + int(card2)
print(cardTotal)

你可以试试字典。试试这个:

from random import randint
card = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]
special_cards = {
'Ace': '1',
'Jack': '22',
'Queen': '33',
'King': '44'
}
card1 = card[randint(0, 12)]
card2 = card[randint(0, 12)]
if card1 in special_cards.keys():
card1 = special_cards[card1]
if card2 in special_cards.keys():
card2 = special_cards[card2]
cardTotal = int(card1)+int(card2)
print(cardTotal)

您可以通过枚举列表来为列表的元素赋值。

cards = [
"Ace", "1", "2", "3", "4", "5", "6", "7", 
"8", "9", "10", "Jack", "Queen", "king"]
# select random card
card = random.choice(cards)
# Get value of selected card
card_val = 0
for i, j in enumerate(cards, 1):
if j == card:
card_val = i

然而,这个方法对于您的用例来说是有缺陷的。我相信"杰克"、"皇后"one_answers"国王"。卡都是应该有一些特殊的值在21点,不correpsond从枚举值。而且,每次想要进行选择时都必须创建一个枚举,这既嘈杂又低效。

我建议你使用元组列表。

cards = [
("Ace", 1), ("1", 1), ("2", 2), ("3", 3), 
("4", 4), ("5", 5), ("6", 6), ("7", 7), 
("8", 8), ("9", 9), ("10", 10), ("Jack", 10), 
("Queen", 10), ("King", 10)]
# Select a random card
card = random.choice(cards)
# Get string representation of selected card
card_string = card[0]
# Get value of selected card
card_value = card[1]
# The sample game run shown in your question might look like this
card1 = random.choice(cards)
card2 = random.choice(cards)
card_total = card1[1] + card2[1]  

每个人都有自己的方法。它使用字典的get方法,如果没有找到,它允许使用默认选项。在本例中,我只返回值本身:

import random
card_faces=["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"]
card_values={"Ace":1,"Jack":10,"Queen":10,"King":10} # special cases
for _ in range(20):   # some examples
card = random.choice(card_faces)
card_value = int(card_values.get(card,card))
print (f"Card {card}, value {card_value}")

最新更新