我有一个列表,我想将该列表中的随机元素分配给一个新变量五次,以生成一手牌。我已经搜索过了,我似乎无法理解为什么我的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
答案 0 :(得分:2)
您使用{
和}
而不是[
和]
来定义cards
。因此,它是set
。 set
没有被排序,因此尝试索引它是没有意义的。 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]
请注意,订单可能无法保留。