我一直在嘗試做一個紙牌游戲的程式,簡單總結一下:撰寫一個python腳本來創建一張隨機卡片,將卡片表示為一個元組,存盤卡片的值和顏色。
其中一個條件是,當我回圈 3 次時,我必須確保每張卡的值和顏色都與其他卡不同,以確保沒有 2 張卡是相同的。(創建第二張卡時,檢查它是否與第一張相同,如果相同,請重試。
創建第三張卡時,檢查它是否與第一張或第二張相同,如果相同,請重試。)
然后我必須創建一個函式,將 3 張卡片的值相加并回傳總和。
當然,除此之外還有更多內容,但我的問題很簡單。到目前為止我所做的:
import random
num = random.randint(0,9)
colour = random.choice(["red", "green", "blue", "yellow"])
card = (num, colour)
def get_uno_card(card):
for _ in range(1):
print(card)
if num and colour == card:
print(card)
return card
def convert():
a = str(card)
return a
def add():
b = num * 3
return b
a = convert()
b = add()
print(get_uno_card(card))
print(a)
print(b)
這輸出:
(6, 'blue')
(6, 'blue')
(6, 'blue')
18
我很難確保卡片不一樣,因此我一直在尋找在線執行此操作的方法,并且有一篇帖子解釋說我應該使用“/ r”。我沒有遇到過這種情況,也不知道在這種情況下我應該如何使用它,或者我是否應該使用它。
有人可以解釋我如何檢查 3 個元組是否相同,如果它們相同,我將如何生成另一張卡片來代替它?
非常感謝。
uj5u.com熱心網友回復:
\r是一個回車符,與你描述的問題沒有任何關系,這是一個沒有替換的采樣。
確保您沒有兩次擁有同一張卡片的一種簡單方法是制作所有卡片的“牌組”(在 Python 中很容易表示為 a list),而不是單獨生成每張卡片。
使用真正的一副牌,您不可能兩次獲得同一張牌,因為您在發牌時將其從牌堆中取出;通過ping 專案來使用list相同的方式。pop
>>> import random
>>> cards = [(num, color) for num in range(10) for color in ["red", "green", "blue", "yellow"]]
>>> random.shuffle(cards)
>>> cards.pop()
(3, 'blue')
>>> cards.pop()
(4, 'yellow')
>>> cards.pop()
(5, 'blue')
把它放在你已經嘗試實作的一些事情的背景下:
import random
deck = [
(num, color)
for num in range(10)
for color in ("red", "green", "blue", "yellow")
]
random.shuffle(deck)
def get_uno_card():
return deck.pop()
def add_cards(cards):
return sum(num for num, color in cards)
cards = [get_uno_card() for _ in range(3)]
print(cards)
print(add_cards(cards))
[(9, 'yellow'), (9, 'blue'), (3, 'yellow')]
21
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/432264.html
下一篇:如何將兩個字串字典發送到服務器?
