我正在尝试制作一个彩票机,从1-34生成7个中奖号码和3个奖励号码的列表。我希望奖金数字永远不会与中奖号码相同。
winning_numbers = random.sample(range(1, 34), 7)
bonus_numbers = random.sample(range(1, 34), 3)
是否有任何命令/代码可以排除上一个列表中已选择的数字?
答案 0 :(得分:2)
random
解决方案
如果您只想使用random
模块,可以使用:
import random
nums = random.sample(range(1,35), 10)
winning_numbers = nums[:7]
bonus_numbers = nums[7:]
>>> winning_numbers
[2, 23, 29, 34, 26, 16, 13]
>>> bonus_numbers
[8, 4, 19]
由于random.sample
是"用于随机抽样而无需替换。" (引自docs)
numpy
解决方案
您还可以使用numpy
,因为numpy.random.choice
有一个replace
参数,您可以设置为false
。 (我个人是粉丝或使用numpy
获取随机数,因为它比random
更复杂的任务提供了更大的灵活性
import numpy as np
nums = np.random.choice(range(1,35), 10, replace=False)
winning_numbers = nums[:7]
bonus_numbers = nums[7:]
>>> winning_numbers
array([27, 4, 17, 30, 32, 21, 23])
>>> bonus_numbers
array([15, 13, 18])
答案 1 :(得分:2)
一开始的一个小但不重要的评论:
你是先绘制7个数字,然后是剩下的3个数字,还是10个数字,然后将它们分成7个中奖号码,3个奖励数字在概率方面完全相同:
在第一种情况下,任何数字成为奖励数的概率为:
在第二个:
请注意,任何数字成为中奖号码概率的推理都是相同的。
实施第一个案例实际上稍微长一些,但在使用l1CoreCache.loadCache(null);
l1LookupCache.loadCache(null);
System.out.println(l1CoreCache.size(CachePeekMode.ONHEAP));
System.out.println(l1CoreCache.size(CachePeekMode.OFFHEAP));
System.out.println(l1LookupCache.size(CachePeekMode.ONHEAP));
System.out.println(l1LookupCache.size(CachePeekMode.OFFHEAP));
和set operations时仍然相当简单。
以下是它的外观:
set
第二种情况的实施很少,可能如下所示:
import random
# set of all potential numbers to draw from
all_numbers = set(range(1,35))
# draw the winners
winning_numbers = set(random.sample(all_numbers, 7)
# subtract the winners
remaining_numbers = all_numbers-winning_numbers
# draw the bonus from the remaining numbers:
bonus_numbers = set(random.sample(remaining_numbers, 3))
希望有帮助和快乐的编码!
答案 2 :(得分:0)
这样的东西?
import random
winning_numbers = random.sample(range(1, 34), 7)
bonus_numbers = []
while 1==1:
num = random.randint(1,34)
if len(bonus_numbers) == 3:
break
if num not in winning_numbers and num not in bonus_numbers:
bonus_numbers.append(num)