我正在尝试制作一张洗牌的扑克牌,为了做到这一点,我必须检查生成的牌是否与以前的牌相同。到目前为止,我已经尝试过这个:
for i in range(51):
a=card()
while(deck[:i]==a):
a=card()
deck[i]=a
卡是生成随机卡的功能 我认为问题出在[:i] 附:该列表已有52个元素,它们全部设置为"空"
答案 0 :(得分:4)
要回答您的问题,您可以执行以下操作:
for i in range(51):
a = card()
while a in deck:
a = card()
deck[i] = a
您可以使用a in deck
测试会员资格,因为您说该套牌已初始化为空,因此您不必检查第i个元素,因为我肯定会检查后面的元素不会包含一个。
然而,有一种更好的方法来创建一个洗牌的牌:使用random.shuffle
作为ctj232说。
>>> import random
>>> l = [1, 2, 3, 4, 5]
>>> random.shuffle(l)
>>> l
[3, 5, 4, 2, 1]
制作一个列表,按顺序代表所有52张卡片,制作自己的类或整数,然后使用random
库来重新排列它们。
答案 1 :(得分:0)
您还可以执行以下操作:
import random
cards = [ i for i in range(52)]
curentPosition = [ i for i in range(52)]
nextPosition = [ i for i in range(52)]
print('Positions before shufle:\n',curentPosition)
for i in cards:
randomPos = random.choice(nextPosition)
curentPosition[i] = randomPos
nextPosition.remove(randomPos)
print('Positions after shufle\n',curentPosition)
答案 2 :(得分:0)
使用random.shuffle
绝对是解决问题的最佳方式,正如其他答案所解释的那样,但回答原来的问题:
要检查列表的多个元素是否等于变量,可以使用variable in list
语法:
my_list = [51,47,2,29,6]
if 51 in my_list:
print("51 is already selected")
else:
print("51 isn't in my_list")
要将其应用于现有代码:
for i in range(51):
a=card()
while(a in deck):
a=card()
deck[i]=a