我知道如何从例如7到14获取随机数,但也可能以某种方式获得从7到14 的随机数,除了之前写的列表中的某些数字?< / p>
示例:
Forbidden = [12, 13, 8, 7]
a = randint(7, 14)
a
应为随机数,但不用Forbidden
写的数字。
编辑:感谢您的建议,使用while循环或.choice实际上解决了我的问题。但最终@ user2357112是正确的,显然黑名单理念 是一个初学者陷阱,改组甲板解决了我的问题。
答案 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)