Python 为[字符串]/[列表中的项目]赋值

Python 为[字符串]/[列表中的项目]赋值,python,arrays,list,python-3.x,Python,Arrays,List,Python 3.x,我正在创建一个纸牌游戏-21点-并且需要向用户显示一个字符串,但是要跟踪每张纸牌的计算值。因此,我创建了一个包含卡的所有值的列表: cards = [1,1,1,1,2,2,2,2,3,3,3,3,...] 但是对于用户,例如,如果列表中的项目是13,我想显示King。如何制作包含这些值的字典/键或数组?我不能根据位置使用字典,因为一旦发了卡,我会将其从列表中删除/牌组您只需定义一个字符串列表: cardnames = ["Ace","2","3","4","5","6","7","8","9

我正在创建一个纸牌游戏-21点-并且需要向用户显示一个字符串,但是要跟踪每张纸牌的计算值。因此,我创建了一个包含卡的所有值的列表:

cards = [1,1,1,1,2,2,2,2,3,3,3,3,...]

但是对于用户,例如,如果列表中的项目是
13
,我想显示
King
。如何制作包含这些值的字典/键或数组?我不能根据位置使用字典,因为一旦发了卡,我会将其从
列表中删除
/
牌组

您只需定义一个字符串列表:

cardnames = ["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"]
现在,如果卡的值为
v
,则可以使用
cardnames[v-1]
获得相应的名称。例如:

v = 5
print("I have a %s"%cardnames[v-1])
在这种情况下,插孔的值为11,王后为12,国王为13。例如(使用python的交互式shell):

或者使用python3:

$ python3
Python 3.4.3 (default, Mar 26 2015, 22:03:40) 
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> cardnames = ["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"]
>>> v=12
>>> print("I have a %s"%cardnames[v-1])
I have a Queen
>>> v=7
>>> print("I have a %s"%cardnames[v-1])
I have a 7
>>> v=1
>>> print("I have a %s"%cardnames[v-1])
I have a Ace
>>> v=13
>>> print("I have a %s"%cardnames[v-1])
I have a King

在内部,您可以将卡表示为其值。王牌1分,国王13分,等等

你可以像你期望的那样建造你的“甲板”。[1,1,1,1,2,2,…]的列表,并根据需要进行操作

要向用户实际显示卡片,请使用Willem提到的卡片名列表。这将起作用,因为卡值1将对应卡名列表第一(零)位的卡名:“Ace”

例如:

Python 3.4.1 |Anaconda 2.1.0 (64-bit)| (default, Sep 10 2014, 17:10:18) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> cardnames = ["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"]
>>> hand = [1,1,2,4,6,3,11,8]
>>> for x in hand:
...  print(cardnames[x-1])
... 
Ace
Ace
2
4
6
3
Jack
8
>>> faces = {1: 'Ace', 11: 'Jack', 12: 'Queen', 13: 'King'}
>>> faces[1]
'Ace'
>>> faces[13]
'King'
>>> cards = [1,1,1,1,2,2,2,2,3,3,3,3,11]
>>> cards[1]
1
>>> faces[cards[1]]
'Ace'

你可以用字典把数字翻译成卡片名称。像这样:

faces = {
    1: 'Ace',
    2: '2',
    3: '3',
    ...
    11: 'Jack',
    12: 'Queen',
    13: 'King'
}
然后,你可以相应地给他们打电话。比如:

faces[cardnames[13]]
将等同于“国王”

详细说明一下,因为评论中有问题:

dict(faces是什么)是一组键值对。在这种情况下,“键”是卡的数值,“值”是卡的面(字符串)。通过dict的键引用dict中的值

比如说。如果我有一个像上面那样的口述,我会说:

faces[1]
那就是“王牌”。例如:

Python 3.4.1 |Anaconda 2.1.0 (64-bit)| (default, Sep 10 2014, 17:10:18) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> cardnames = ["Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"]
>>> hand = [1,1,2,4,6,3,11,8]
>>> for x in hand:
...  print(cardnames[x-1])
... 
Ace
Ace
2
4
6
3
Jack
8
>>> faces = {1: 'Ace', 11: 'Jack', 12: 'Queen', 13: 'King'}
>>> faces[1]
'Ace'
>>> faces[13]
'King'
>>> cards = [1,1,1,1,2,2,2,2,3,3,3,3,11]
>>> cards[1]
1
>>> faces[cards[1]]
'Ace'

那么基本上你是在寻找字符串的位置?另外,为什么要使用
[v-1]
而不是
[v+1]
,因为列表编号从
0开始。您的卡系统的值似乎从
1
开始。为了将
1
映射到
0
2
映射到
1
等,您可以使用
1
进行减法。谢谢您的回答!我需要python3
3.4
,而不是python2。这不是问题。您可以使用Python 3.4完全复制该示例。谢谢!还有两件事。1.我需要每张卡的
4张,而不是1张。那么,我如何使用它来找到卡片的位置呢?另外,我会重新整理这份名单,所以这个职位不会真的很好地发挥作用。我还没有完全理解。如果玩家的手是
[2,2,6,12]
,该怎么办?或有2+的同一张卡。我觉得我需要一本字典,因为卡片使用后,我会把它从卡片组中删除。我的新编辑应该有助于解释事情。基本上,你保持你的名单和你的卡名单分开。你可以洗牌或者编辑你的名单,但是你的名单应该是静态的。太好了,非常感谢!为什么
cardnames
在那里?@retep-这是您在问题中引用的卡值列表。我不知道代码的其余部分是什么样子,所以我假设您需要引用该列表。因此,dict(faces是什么)是一组键值对。在这种情况下,“键”是卡的数值,“值”是卡的面(字符串)。通过dict的键引用dict中的值。