亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

玩家 1 總是贏。這是因為 random.shuffle 不是真正隨機的還是我犯了邏輯錯誤?

玩家 1 總是贏。這是因為 random.shuffle 不是真正隨機的還是我犯了邏輯錯誤?

墨色風雨 2021-12-17 16:59:03
盡管 random.shuffle 每次都會使賠率隨機化,但代碼始終顯示玩家 1 為贏家。在如何洗牌或玩家 1 如何總是贏得比賽方面,我沒有任何直接的模式,因為他們并不總是每輪都贏。不管怎樣,他們總是贏得整場比賽。我想知道這是否是我使用 sudo-random shuffling 的問題,或者我是否在某個時候犯了一個我沒有注意到的邏輯錯誤。我曾嘗試在不同的點放置打印件,以嘗試查看我是否在不同的點得到了無法預料/不希望的結果,但沒有注意到任何奇怪的輸出。我嘗試對值進行雙重洗牌,看看是否有任何改變,但結果仍然總是玩家 1。當我不洗牌時,玩家 2 確實贏了,所以我假設所有的數學和檢查都是正確的。cards = ['r1','r2','r3','r4','r5','r6','r7','r8','r9','r10','b1','b2','b3','b4','b5','b6','b7','b8','b9','b10','y1','y2','y3','y4','y5','y6','y7','y8','y9','y10']#cardShufflerdef cardShuffler(cards):    from random import shuffle    shuffle(cards)    print(cards)    return(cards)#cardArrayDeciphers#colourdef cardColour(selectedCard):    colour = selectedCard[0] #takes the letter on the card intidacting colour    return colour#numberdef cardNum(selectedCard):    number = int(selectedCard[1]) #takes number in a card and convert str to int    return number#winnerCalcdef winnerCalc(p1Card, p2Card):    colour1 = cardColour(p1Card)    colour2 = cardColour(p2Card)    num1 = cardNum(p1Card)    num2 = cardNum(p2Card)    #pattern should go red > black > yellow > red    if(colour1 == "r")and(colour2 == "b"):        winner = ("p1")    elif(colour1 == "b")and(colour2 == "y"):        winner = ("p1")    elif(colour1 == "y")and(colour2 == "r"):        winner = ("p1")    elif num1 > num2:        winner = ("p1")    else:        winner = ("p2")    print("winner "+str(winner)) #debug    return winner#gameValssearchVal = -1p1WinCards = []p2WinCards = []cards = cardShuffler(cards) #function = cardShuffle#gameLoop [player 1 always wins!]while (searchVal != 29):    p1Given = searchVal + 1 #where the code looks for p1 card    p2Given = searchVal + 2    p1Card = cards[p1Given]    p2Card = cards[p2Given]    searchVal = p2Given    winner = winnerCalc(p1Card, p2Card) #function = winnerCalc    if winner == "p1": #giving the winner all the cards        p1WinCards.append(p1Card)        p1WinCards.append(p2Card)我希望winnerAbsolute 的輸出是sudo_random,但結果總是玩家1。
查看完整描述

2 回答

?
達令說

TA貢獻1821條經驗 獲得超6個贊

您的 if 語句非常有利于 p1 獲勝。我希望 'p2' 獲勝的示例代碼,因為 p2 具有優越的顏色:


colour1 = 'b'

colour2 = 'r'

num1 = 2

num2 = 1


if(colour1 == "r")and(colour2 == "b"):

    print("p1")

elif(colour1 == "b")and(colour2 == "y"):

    print("p1")

elif(colour1 == "y")and(colour2 == "r"):

    print("p1")

elif num1 > num2:

    print("p1")

else:

    print("p2")


>>> p1

玩家 1 在這里獲勝,因為沒有檢查玩家 2 是否具有更好的顏色。要正確檢查正確的獲勝者,您可以將 if 語句修改為以下邏輯:


colour1 = 'b'

colour2 = 'r'

num1 = 2

num2 = 1


if (colour1 == "r" and colour2 == "b") or (colour1 == "b" and colour2 == "y") or (colour1 == "y" and colour2 == "r"):

    print("p1")

elif (colour2 == "r" and colour1 == "b") or (colour2 == "b" and colour1 == "y") or (colour2 == "y" and colour1 == "r"):

    print("p2")

elif num1 > num2:

    print("p1")

else:

    print("p2")


>>> p2

您可以在其中將最后一個 elif 和 else 重構為以下代碼行:


colour1 = 'b'

colour2 = 'r'

num1 = 2

num2 = 1


if (colour1 == "r" and colour2 == "b") or (colour1 == "b" and colour2 == "y") or (colour1 == "y" and colour2 == "r"):

    print("p1")

elif (colour2 == "r" and colour1 == "b") or (colour2 == "b" and colour1 == "y") or (colour2 == "y" and colour1 == "r"):

    print("p2")

else:

    print("p1" if num1 > num2 else "p2")


>>> p2


查看完整回答
反對 回復 2021-12-17
?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

首先,玩你的游戲很有趣。其次,正如我所懷疑的,錯誤總是出在多個 if 語句中,這特別棘手,因為您認為自己是徹底的,并且在 ned 中它會咬你!


為了清楚起見,讓我們舉個例子:


p1Card = y8 ,p2Card = b1

讓我們運行它:


if(colour1 == "r")and(colour2 == "b") # False

    winner = ("p1")

elif(colour1 == "b")and(colour2 == "y")# False

    winner = ("p1")

elif(colour1 == "y")and(colour2 == "r")# False

    winner = ("p1")

elif num1 > num2: # True

    winner = ("p1")

else:

    winner = ("p2")

因此,贏家 P1 而它應該是 P2。有多種方法可以避免這種情況,但這應該留給您自己解決:)


查看完整回答
反對 回復 2021-12-17
  • 2 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號