我知道標題聽起來很無聊,因爲很多人已經問過這個話題。我希望它能幫助我深入瞭解隨機模塊的工作原理。問題是,我寫了兩個不同的函數,我認爲它們應該是相同的,但是我得到的結果並不完全相同,我不明白爲什麼。調試:在Python中亂序卡片/隨機
我希望最後得到一個「洗好的甲板」。我只關心卡片是紅色還是黑色,所以我的卡組非常簡單。我叫「1」紅色和「0」黑色。
我的想法是通過附加1(紅色)if if random.random()是> .5或者0(黑色)來構建套牌,否則當我達到26時自動附加1或0 (一半甲板)的一種顏色。但有些事情出錯了。 deckmaker()不能正常工作,雖然deckmaker2()會。誰能提供見解?
import random
def deckmaker():
deck = []
for i in range(52):
if deck.count(0) == 26:
deck.append(1)
elif deck.count(1) == 26:
deck.append(0)
elif random.random() > .5:
deck.append(0)
else:
deck.append(1)
return deck
def deckmaker2():
newdeck = []
for i in range(26):
newdeck.append(0)
for i in range(26):
newdeck.append(1)
deck = []
for i in range(52):
x = random.randint(0,len(newdeck)-1)
deck.append(newdeck.pop(x))
return deck
注:在寫這個問題,我發現了random.shuffle列表運算符,它做同樣的事情作爲我的第二個功能,所以當然獲得洗牌甲板原來是容易的。但我仍然想知道爲什麼我的原始代碼不會做同樣的事情。
修改日期:抱歉,對於deckmaker()的確切問題含糊不清。事情是,我不完全明白什麼是錯的。這與它產生的套牌有關,在你逐一「翻牌」時,有一些策略可以讓你預測「下一張牌」是紅色還是黑色,而不是與使用random.shuffle創建的套牌一起工作
編輯2: [很多信息]我將解釋我如何確定甲板製造者不工作,以防重要。 我在寫這個程序,在此發佈的拼圖模式:http://www.thebigquestions.com/2013/12/17/tuesday-puzzle-4/
我的策略將是記得的最後幾張卡處理,並使用該信息來確定何時決定採取下一張卡片。我想也許在連續得到5張「黑色」牌後,現在是預測「紅色」的好時機。我實現了它,像這樣:
mycards = []
for j in range(1000):
mydeck = deckmaker(52)
mem_length = 5
mem = []
for c in range(mem_length):
mem.append(4)
for i in range(len(mydeck)):
if mem.count(0) == mem_length:
mycards.append(mydeck[i])
break
elif i == len(mydeck)-1:
mycards.append(mydeck[i])
break
else:
mem.append(mydeck[i])
mem.pop(0)
x = float(mycards.count(1))
print x/len(mycards)
結果超過一半,我正在(投入列表mycards)爲「紅色」,因此我採取了卡後,5個紅色卡在實現卡一排被畫出來。這沒有意義,所以我尋找不同的方式來創建甲板,並得到更正常的結果。但我仍然不知道我原來的套牌有什麼問題。
「甲板製造商不能正常工作」...它有什麼問題?它似乎爲我工作。 – mgilson
對不起,我絕對應該更具體一些,但我自己並不完全明白這個問題。如果有幫助,我將添加我用來確定問題存在的代碼。 – wbruntra
這是另一種提問方式:當你說「甲板製造者不能正常工作」時,是什麼讓你得出這個結論?該程序產生的輸出是否與您期望的不同,如果是,輸出是什麼,您認爲它會做什麼? –