Как сравнить переменную с набором (чтобы увидеть, есть ли дубликаты), и если есть, как мне их удалить и повторить процесс?

#python #set #python-3.7

#python #установить #python-3.7

Вопрос:

Я новичок здесь, поэтому прошу прощения, если это не очень хороший способ задать вопрос…

Это мой код:

 import random
i = 0
#the numbers of the cards
numbers = ["A","2","3","4","5","6","7","8","9","10","Jack","Queen","King"]
#the suits of decks
suits = ["Spades","Hearts","Clubs","Diamonds"]
#empty list
used = []
#Generate random Number and Suit
while i != 5:
    number = random.choice(numbers)
    suit = random.choice(suits)
    print (number " of " suit)
    used.append(number   " of "   suit)
    i  = 1
  

чего я пытаюсь добиться, так это того, чтобы код генерировал серию из 5 карточек (без дубликатов), а затем печатал их…

Но я не знаю, как избавиться от дубликатов (и повторить код)

в настоящее время я получаю следующее:

Король пик Король пик Дама червей A треф 6 червей [‘Король пик’, ‘Король пик’, ‘Дама червей’, ‘A треф’, ‘6 червей’]

Заранее спасибо!

Комментарии:

1. Вместо того, чтобы пытаться генерировать случайные карты, обычно лучше перетасовать колоду.

2. да, но моя домашняя работа по CS такова…

Ответ №1:

Чтобы избавиться от дублирующих карточек, попробуйте добавить строку следующим образом:

 # Generate random Number and Suit
while i != 5:
    number = random.choice(numbers)
    numbers.remove(number) ###
    suit = random.choice(suits)
    print(number   " of "   suit)
    used.append(number   " of "   suit)
    i  = 1
  

Комментарии:

1. Если вы удалите номер, вы не сможете получить тот же номер из другого набора.

Ответ №2:

Попробуйте это:

 import itertools
import random
numbers = ["A","2","3","4","5","6","7","8","9","10","Jack","Queen","King"]
#the suits of decks 
suits = ["Spades","Hearts","Clubs","Diamonds"]
deck=list(itertools.product(numbers,suits))
random.shuffle(deck)
for i in range(5):
    print( deck[i][0],'of' ,deck[i][1])
  

Комментарии:

1. После четырех карт масти заканчиваются.

2. @Shadowcodder Спасибо, но я хочу знать, что именно вы поставили, чтобы удалить дубликат? (что привело к удалению дубликата?)

3. Я ничего не делал для удаления дубликатов, строка deck= something создает все возможные комбинации в повторяющемся типе данных. Я просто печатаю первые пять ее значений после их перетасовки.

4. @Shadowcodder Есть ли какой-нибудь способ напечатать, например, следующие 5 карт ПОСЛЕ первого раза (скажем, я должен был повторить это), мой код в настоящее card = 0 print(deck[i][card 1], deck[i][card]) card = 5 время Так работает или это как-то неправильно?

5. @s11010 Deck — это список кортежей, поэтому вы можете делать с ним все, что угодно, как вы делаете со списком. Вы можете запустить для этого цикл for . for i in range(5,10): print(deck[i][0],deck[i][1]) . То, как вы пытаетесь это сделать, неверно.