2017-08-02 34 views
2

我正在試着製作洗牌紙牌套牌,爲了做到這一點,我必須檢查生成的牌是否與先前牌相同。到目前爲止,我已經試過這樣:如何檢查列表中的多個元素是否等於變量?

for i in range(51): 
a=card() 
while(deck[:i]==a): 
    a=card() 
deck[i]=a 

卡是生成一個隨機卡 我認爲這個問題是在函數[我] 附:該名單已經有52個元素,它們都被設置爲「空」

+4

爲什麼不建立所有卡的列表,然後在代表甲板的列表上調用'random.shuffle'? – ctj232

+0

因此,我使用兩個while循環(一個用於數字,一個用於正式)創建列表,然後如何使用random.shuffle? – user8407045

+0

一旦你有了一切的列表,假設你稱它爲'deck',只需使用'random.shuffle(deck)'。你也可以在這裏查看文檔:https://docs.python.org/3/library/random.html –

回答

4

要回答你的問題,你可以這樣做:用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庫洗牌它們。

+0

這解決了OP正面臨的同樣的問題,但並沒有回答他的特定問題。至少回答這個問題,然後提供替代方案。 – Don

+1

@Don你說得對,我也會加上 –

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) 
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 
相關問題