随机数除了之前列在列表中的数字

时间:2018-06-13 16:40:03

标签: python algorithm random

我知道如何从例如7到14获取随机数,但也可能以某种方式获得从7到14 的随机数,除了之前写的列表中的某些数字?< / p>

示例:

Forbidden = [12, 13, 8, 7]
a = randint(7, 14) 

a应为随机数,但Forbidden写的数字。

编辑:感谢您的建议,使用while循环或.choice实际上解决了我的问题。但最终@ user2357112是正确的,显然黑名单理念 是一个初学者陷阱,改组甲板解决了我的问题。

5 个答案:

答案 0 :(得分:5)

你知道一个真正的纸牌游戏如何阻止你绘制已经绘制过的牌吗?它并没有涉及抽取卡的黑名单。这是一个套牌,你可以随意洗牌。

在你的程序中做同样的事情。而不是试图维持一张抽出的卡片黑名单,在程序开始时洗牌,并从牌组中抽出牌:

import random

deck = some_list
random.shuffle(deck)

# when you want to draw a card
card = deck.pop()

答案 1 :(得分:3)

您可以使用choice功能:

import random
total_data = [i for i in range(1,15)]
forbidden = [12, 13, 8, 7]
not_forbidden =[i for i in total_data if i not in forbidden] #make a list of not forbidden numbers
a = random.choice(not_forbidden) #select value which is between 7 and 14 and not in forbidden list
print(a)

或者您可以编写自己的自定义函数:

import random
Forbidden = [12, 13, 8, 7]
def get_number(forbidden_list):
    while True:
        a = random.randint(7,14)
        if a not in forbidden_list: #if this number if not forbidden list then break the loop and return the value
            return a
result = get_number(Forbidden)
print(result)

答案 2 :(得分:1)

您可以尝试random.choice()

import random
...
not_forbidden = [1,2,3,4]
a = random.choice(not_forbidden)

答案 3 :(得分:0)

from random import randint
Forbidden = [12, 13, 8, 7]
a = randint(7, 14)
while a in Forbidden: a = randint(7, 14)

使用while循环来获取新的随机数,直到该数字不在Forbidden

答案 4 :(得分:0)

我知道你可以在randindt命令中执行此操作,但是您可以在while循环中执行此操作:

while a in forbidden:
  a = randint(7, 14)