![](/img/trans.png)
[英]python-text based game- adding it to the inventory with no duplicates
[英]How to remove duplicates in card game- python
#-*- coding: UTF-8 -*-
import random
import time
NUM_CARDS = 5
CARD_WIDTH = 8
SUITS = [('Spades', '♠'), ('Hearts', '♥'), ('Clubs', '♣'), ('Diamonds', '♦')]
NAMES = {11: 'Jack', 12: 'Queen', 13: 'King', 14: 'Ace'}
def get_card_name(n): return NAMES.get(n, "%2d" % n)
def card_row(text=''): return "|" + text.center(CARD_WIDTH) + "|"
cards = [list() for _ in range(7)]
rem={}
if True:
for _ in range(NUM_CARDS):
cv = random.randint(2,14)#value
cs = random.randint(0,3)#suit
cards[0].append('_' * (CARD_WIDTH+2))
cards[1].append(card_row(''))
cards[2].append(card_row(get_card_name(cv)))
cards[3].append(card_row('of'))
cards[4].append(card_row(SUITS[cs][0]))
cards[5].append(card_row(SUITS[cs][1]*(CARD_WIDTH)))
cards[6].append(card_row("_" * CARD_WIDTH))
rem[cv]=cs
print 'Welcome to SANDCRAB. This is your deck of cards.'
for k in rem:
print k,rem[k]
for lst in cards:
print ''.join(lst)
你好。 我正在嘗試制作紙牌游戲,但是我不確定如何使所有紙牌都獨一無二,就像在紙牌中一樣。 換句話說,我不希望有任何重復的內容。 我遇到的另一個問題是,當我嘗試將信息添加到詞典rem時,不會打印具有相同值的所有卡片。 謝謝。
就個人而言,這就是我要做的:
card_type = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Joker", "Queen", "King"]
card_vals = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
card_suit = ["Spade", "Clubs", "Diamond", "Hearts"]
internal_deck = []
display_deck = []
for i in range(0, len(card_type), 1):
for j in range(0, len(card_suit), 1):
internal_deck.append((card_type[i], card_suit[j], card_vals[i]))
display_deck.append(card_type[i] + " of " + card_suit[j])
for cards in display_deck:
print(cards)
如果您想知道為什么有兩個列表,這就是為什么。 我希望一種功能更多,可以將卡打印到屏幕上,另一種功能則可以更好地處理用戶看不到的內部事物。
您應該將已挑選的卡片存儲在列表中,而不是字典中。 這樣,它可以跟蹤具有相同價值或相同花色的多張牌。
適應您當前代碼的最簡單方法是添加一個while循環,該循環使揀選卡尚未存儲在hand
(已揀選的卡列表)。
# ...
hand = []
for _ in range(NUM_CARDS):
while True:
cv = random.randint(2,14)#value
cs = random.randint(0,3)#suit
if (cv, cs) not in hand:
break
hand.append((cv, cs))
cards[0].append('_' * (CARD_WIDTH+2))
cards[1].append(card_row(''))
cards[2].append(card_row(get_card_name(cv)))
cards[3].append(card_row('of'))
cards[4].append(card_row(SUITS[cs][0]))
cards[5].append(card_row(SUITS[cs][1]*(CARD_WIDTH)))
cards[6].append(card_row("_" * CARD_WIDTH))
print 'Welcome to SANDCRAB. This is your deck of cards.'
for card in hand:
print card
for lst in cards:
print ''.join(lst)
或者,將卡片存儲在集合中而不是列表中:
hand = set()
while len(hand) < NUM_CARDS:
hand.add((random.randint(2,14), random.randint(0, 3))
您還可以簡化輸出,例如:
def card_output(value, suit_number):
suit, symbol = SUITS[suit_number]
return ['_' * (CARD_WIDTH + 2)] + map(card_row, [
'',
NAMES.get(value, "%2d" % value),
'of',
suit,
symbol * CARD_WIDTH,
'_' * CARD_WIDTH])
# method 1. randomly select until we have 5 unique values
hand1 = set()
while len(hand1) < NUM_CARDS:
hand1.add((random.randint(2, 14), random.randint(0, 3)))
# method 2. make a deck then sample 5 cards from it
deck = [(value, suit_number) for value in range(2, 14) for suit_number in range(3)]
hand2 = random.sample(deck, NUM_CARDS)
print 'Welcome to SANDCRAB. This is your deck of cards.'
for hand in [hand1, hand2]:
for row in zip(*[card_output(value, suit_number) for value, suit_number in hand]):
print ''.join(row)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.