随机选择的想法

3 投票
3 回答
762 浏览
提问于 2025-04-15 17:23

我在考虑给我部门的人开一系列入门讲座,介绍Python和相关的科学工具,就像我去年夏天做的那样,具体可以看看这个链接 py4science @ UND

为了让会议更有趣,吸引更多人的注意,我通过以下方式给其中一位幸运的观众送出了两份Python学习资料:

1-) 收集大家的名字,然后给每个人分配一个号码,从中随机抽取一个作为获胜者。

import random 
lucky = {1:'Lucky1',...}
random.choice(lucky.keys())

2-) 和上面的方法类似,不过这次是从名单中逐个抽取,这样最后剩下的那个人就成了最幸运的。

import random 
lucky = {1:'Lucky1',...}
lucky.pop(random.choice(lucky.keys())) 

现在,我还在寻找至少一个新的点子,能够加入一些随机性,并展示一个有用的编程特性,帮助我在某次讲座结束时搞一个更有趣的抽奖活动。

3 个回答

0

计算圆周率(Pi)总是很有趣的 ;-)

import random

def approx_pi( n ):
    # n random (x,y) pairs (as a generator)
    data = ( (random.random(),random.random()) for _ in range(n) )
    return 4.0*sum( 1 for x,y in data if x**2 + y**2 < 1 )/n

print approx_pi(100000)
1

随机数字在中等规模的人群中有一个非常有趣的用法,就是找出循环关系。我会先介绍这个物理方法,然后再聊聊一些探索的内容。用Python写代码其实很简单。

首先,准备一群大约100人的名字,写在纸条上放在一个碗里。大家一起去碗那儿,随机抽取一张纸条。每个人根据纸条上的名字去找对应的人。这会导致人们聚在一起,形成不同大小的小组,结果往往和大家预期的不一样。

比如说,如果爱丽丝抽到鲍勃,鲍勃抽到查理,而查理又抽到爱丽丝,那么这三个人就会聚成一个小团体。为了更好地观察,可以让每个人和自己抽到的名字牵手,这样就能看到大家是如何被拉到一起的,也能看到这些匹配是如何形成链条或小团体的。

接下来,可以写个软件来观察这些小团体的数量。比如,可以问“最大的团体有多少人?这个人数是否少于总人数的一半?”对于N个学生来说,平均会有1/N的人抽到自己的名字。

需要代码吗?

3

扑克牌也是一些流行且大家都熟悉的机会游戏的来源。也许你可以展示一下生成、洗牌和抽取扑克牌是多么简单:

#!/usr/bin/env python
import random
import itertools

numname={1:'Ace',11:'Jack',12:'Queen',13:'King'}
suits=['Clubs','Diamonds','Hearts','Spades']
numbers=range(1,14)
cards=['%s-%s'%(numname.get(number,number),suit)
       for number,suit in itertools.product(numbers,suits)]
print(cards)
random.shuffle(cards)
print(cards)
hand=random.sample(cards,5)
print(hand)

撰写回答