将列表中的随机值分配给变量时是否为TypeError?

时间:2011-05-17 02:42:55

标签: python

我有一个列表,我想将该列表中的随机元素分配给一个新变量五次,以生成一手牌。我已经搜索过了,我似乎无法理解为什么我的random.choice会导致错误。

import random

cards = { '2' '3' '4' '5' '6' '7' '8' '9' 'J' 'Q' 'K' 'A' }

for newCard in range(5):
        newDraw = random.choice(cards)
        playerdeck.append(newDraw)
        if newDraw in playerdeck:
                playermatches = playermatches + 1
        newDraw = oldDraw

当我尝试运行它时,我收到此错误:

Traceback (most recent call last):
  File "C:\Users\Nathaniel\Desktop\Fcard.py", line 6, in <module>
    newDraw = random.choice(cards)
  File "C:\Python32\lib\random.py", line 253, in choice
    return seq[i]
TypeError: 'set' object does not support indexing

3 个答案:

答案 0 :(得分:2)

您使用{}而不是[]来定义cards。因此,它是setset没有被排序,因此尝试索引它是没有意义的。 random.choice需要索引到集合中以从中拉出项目。无论如何,快速解决方法是替换它:

random.choice(cards)

有了这个:

random.choice(list(cards))

编辑:还要在集合中的元素之间添加逗号。

答案 1 :(得分:1)

所以使用清单:

>>> cards = ['2', '3', '4', '5', '6', '7', '8', '9', 'J', 'Q', 'K', 'A']
>>> random.choice(cards)
'9'

答案 2 :(得分:1)

您的设置定义存在问题。 当你有多个字符串并排时,python就像你'A' + 'B'一样连接起来。所以你生成了一个只有一个元素'23456789JQKA'

的集合

你真的不需要一套或一个列表来做到这一点:

>>> cards = '23456789JQKA'
>>> random.choice(cards)

PS: 尽管无法对集合建立索引,但可以对它们进行迭代:

>>> [int(i) for i in {'1','2','3'}]
[1, 3, 2]

请注意,订单可能无法保留。