列表中的随机选择

时间:2019-04-02 07:24:25

标签: python python-3.x

我想从列表中随机选择某项,但是,如何制作它,这样如果调用它便无法再次选择它?

这是一款纸牌游戏,我想选择一套西服的值显示在左上角和右下角,但该套西服的每张纸牌只能选择一个值

card_value = ['A', 'K', 'Q', 'J','10', '9', '8', '7', '6', '5', '4', '3', '2', '1']
card_value = choice(card_value)

我想选择一个西服值显示在左上角和右下角,但是每张卡中只能选择一个西服值

6 个答案:

答案 0 :(得分:1)

目前,您的代码无法执行任何操作,因为您正在重新分配值card_value

但是,您可以通过两种方法随机执行所需的输出

from random import choice, shuffle

choices = ['A', 'K', 'Q', 'J','10', '9', '8', '7', '6', '5', '4', '3', '2', '1']

shuffle(choices)

def pick_a_card(l):
    return l.pop()

card_value = pick_a_card(choices)
print(card_value)
card_value = pick_a_card(choices)
print(card_value)
print(choices)


# Or use choice and remove

def pick_a_card(l):
    card = choice(l)
    l.remove(card)
    return card

choices = ['A', 'K', 'Q', 'J','10', '9', '8', '7', '6', '5', '4', '3', '2', '1']


card_value = pick_a_card(choices)
print(card_value)
card_value = pick_a_card(choices)
print(card_value)
print(choices)

shuffle将列表随机排序,您只需要执行pop

choice带有一个随机元素,之后您只需要删除它即可

答案 1 :(得分:0)

您可以使用内置的python random库执行此操作。您应该在documentation中阅读有关选项的更多信息,在其中可以选择该选项和更多功能

import random

card_value = ['A', 'K', 'Q', 'J','10', '9', '8', '7', '6', '5', '4', '3', '2', '1']
print(random.choice(card_value))

答案 2 :(得分:0)

import random

items = ['here', 'are', 'some', 'strings', 'of',
         'which', 'we', 'will', 'select', 'one']

rand_item = items[random.randrange(len(items))]

答案 3 :(得分:0)

您可以编写一个函数来对card_value中的值进行采样,并将其从中删除:

def pick_a_card(deck):
    import numpy as np

    # index of the card to pick
    i = np.random.randint(low = 0, high = len(deck)-1)

    # value of the card picked
    pick = deck[i]

    # remove only that card from the deck
    del deck[i]

    # the returns the card picked and the deck without it
    return pick, deck

然后您可以致电:

choice, card_value = pick_a_card(card_value)

如果这不适合您的问题,请告诉我。

答案 4 :(得分:0)

而不是使用choice函数,您可以获得一个随机整数作为索引并在列表上使用pop()

import random

card_value = ['A', 'K', 'Q', 'J','10', '9', '8', '7',
              '6', '5', '4', '3', '2', '1']
random_card = card_value.pop(random.randint(0, len(card_value)-1))

但是请注意,如果列表为空,则会抛出ValueError

答案 5 :(得分:0)

我将列出所有卡片等。'kh'=心中之王,依此类推。然后这样做,将拾取的卡移动到另一个阵列,这样就不会从卡组中拾取它们。

import random
def random_card():
    # Clubs = c, Spades = s, Hearts = h, Diamonds = d
    deck = ['kc', 'ks', 'kh', 'kd', 'qc']
    picked_cards = []
    selected_card = random.choice(deck)
    print('selected card ' + selected_card)
    picked_cards.append(selected_card)
    deck.pop(deck.index(selected_card))