Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成以前未生成的数字或字符串?_Python_Random - Fatal编程技术网

Python 生成以前未生成的数字或字符串?

Python 生成以前未生成的数字或字符串?,python,random,Python,Random,我正在创建一款灵感源自黑杰克的游戏,并使用以下代码生成牌组和手牌: suits = 'SCHD' values = '23456789TJQKA' deck = tuple(''.join(card) for card in itertools.product(values, suits)) dealershand = random.sample(deck, 1) yourhand = random.sample(deck, 2) 问题是,同一张卡很可能被“经销商”和“你的手”拉入。

我正在创建一款灵感源自黑杰克的游戏,并使用以下代码生成牌组和手牌:

suits = 'SCHD'
values = '23456789TJQKA'

deck = tuple(''.join(card) for card in itertools.product(values, suits))

dealershand = random.sample(deck, 1)
yourhand    = random.sample(deck, 2)
问题是,同一张卡很可能被“经销商”和“你的手”拉入。我想检查该卡是否已经存在,如果已经存在,则生成另一张卡。大概是这样的:

while yourhand is in dealershand:
    yourhand=random.sample(deck,2)

你可以使用
random.shuffle(牌组)
来洗牌(需要是
列表而不是
元组),然后你可以使用
deck.pop()
一次抽一张牌。

你可以使用
random.shuffle(牌组)
来洗牌(这需要是一个
列表,而不是
元组),然后您可以使用
deck.pop()
一次抽一张卡。

有一种安全的方法:

from itertools import product
from random import sample
suits = 'SCHD'
values = '23456789TJQKA'

deck = tuple(''.join(card) for card in product(values, suits))

dealershand = sample(deck, 1)
yourhand    = sample(tuple([x for x in deck if x not in dealershand]), 2)

有一种安全的方法:

from itertools import product
from random import sample
suits = 'SCHD'
values = '23456789TJQKA'

deck = tuple(''.join(card) for card in product(values, suits))

dealershand = sample(deck, 1)
yourhand    = sample(tuple([x for x in deck if x not in dealershand]), 2)

如何将我的转换为列表?您可以首先将其创建为列表:
deck=[''.join(card)for card in itertools.product(values,suits)]
或使用
deck=list(deck)
将当前元组转换为列表。顺便说一句,您还可以创建“笛卡尔乘积”不使用itertools直接列出:
deck=[value+suit for value-in-value-in-value-in-suit-in-value-in-suit]
。如何将我的转换为列表?您可以首先将其创建为列表:
deck=[''。为itertools.product(values,suits)中的卡加入(卡片)]
或使用
deck=list将当前元组转换为列表(deck)
。顺便说一句,您也可以直接创建“笛卡尔乘积”列表,而无需使用itertools:
deck=[value+suit for value-in-values-for-in-suit]
。在玩纸牌游戏时,非常传统的做法是,当你向一名玩家发牌时,你会在下一名玩家发牌之前从牌堆中取出该张牌。换句话说,一副牌应该表示为一个可以从中取出牌的结构,而不仅仅是选择它们。在玩纸牌游戏时,非常传统的做法是当你发牌时对一个玩家来说,在处理下一张牌之前,你可以从牌上移开牌。换句话说,一张牌应该被表示为一个从中移除牌的结构,而不仅仅是选择牌。这只不过是一个根本上有缺陷的方法的创可贴。在真实世界中处理牌意味着不只是把它分配给一个玩家,而是在物理上移除。把它从甲板上移到玩家的手上。这些动作应该通过移除卡片集合中的卡片对象并将其添加到手部集合来模拟。这仅仅是一个根本上有缺陷的方法的创可贴。在现实世界中处理一张卡片意味着不只是把它分配给一个玩家,而是在物理上移除它。他将牌组移动到玩家手中。这些动作应该通过从牌组集合中移除牌对象并将其添加到手牌集合中来模拟。