我正在試着製作洗牌紙牌套牌,爲了做到這一點,我必須檢查生成的牌是否與先前牌相同。到目前爲止,我已經試過這樣:如何檢查列表中的多個元素是否等於變量?
for i in range(51):
a=card()
while(deck[:i]==a):
a=card()
deck[i]=a
卡是生成一個隨機卡 我認爲這個問題是在函數[我] 附:該名單已經有52個元素,它們都被設置爲「空」
我正在試着製作洗牌紙牌套牌,爲了做到這一點,我必須檢查生成的牌是否與先前牌相同。到目前爲止,我已經試過這樣:如何檢查列表中的多個元素是否等於變量?
for i in range(51):
a=card()
while(deck[:i]==a):
a=card()
deck[i]=a
卡是生成一個隨機卡 我認爲這個問題是在函數[我] 附:該名單已經有52個元素,它們都被設置爲「空」
要回答你的問題,你可以這樣做:用a in deck
for i in range(51):
a = card()
while a in deck:
a = card()
deck[i] = a
您可以測試成員,因爲你說,甲板被初始化爲空,所以你不必檢查第i個元素,因爲後面的元素絕對不會包含。
但是,有一個更好的方式來創建一個洗牌卡片:使用random.shuffle
作爲ctj232說。
>>> import random
>>> l = [1, 2, 3, 4, 5]
>>> random.shuffle(l)
>>> l
[3, 5, 4, 2, 1]
作出這樣的表示爲了所有的52張牌,使自己的類或只是整數的列表,然後使用random
庫洗牌它們。
這解決了OP正面臨的同樣的問題,但並沒有回答他的特定問題。至少回答這個問題,然後提供替代方案。 – Don
@Don你說得對,我也會加上 –
你也可以這樣做:
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)
使用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
爲什麼不建立所有卡的列表,然後在代表甲板的列表上調用'random.shuffle'? – ctj232
因此,我使用兩個while循環(一個用於數字,一個用於正式)創建列表,然後如何使用random.shuffle? – user8407045
一旦你有了一切的列表,假設你稱它爲'deck',只需使用'random.shuffle(deck)'。你也可以在這裏查看文檔:https://docs.python.org/3/library/random.html –