python实践小程序

今天的面试题,用python实现。python3.4;使用工具pythoncharm!

#从1000人中随机抽取10个人,被抽中的人会被杀死。只有一个硬币决定抽取谁;写个程序实现,一定要保证每个人被抽中的概率相等
import random
#模拟抛硬币
def  coin():
   if  random.randint(0,1) == 1 :
       return  True
   else:
       return False


#递归实现,从一组人中选出一个人,被杀害。每个人都抛硬币,如果抛到反面(false),就可能被杀害;最终只有自己抛出反面,就会被杀害
def loser(people):
    #挑选出抛掷反面的人
    unlucky = []
    #抛到反面的人,就被放入不幸运的队列
    for i in people:
        if coin()==False:
            unlucky.append(i)

    #如果大家都是幸运的,那就重新大家都再抛一次
    if len(unlucky) == 0:
        return loser(people)
    #如果大于1个人抛到反面,那就所有抛到反面的人再抛一次
    if  len(unlucky) > 1 :
        return loser(unlucky)
    #如果抛到反面的人只有一个,那就是这个人,是倒霉蛋了
    if  len(unlucky) ==1:
        return unlucky[0]



if __name__ == '__main__':


    #一共有1000人,分成10组;每一组有100个人,每一组进行抛硬币选中一个倒霉蛋
    for i in range(0,10):
         person  = []
         #每个人都用编号来标注,从1到1000
         for j  in range(1,101):
              person.append(i*100+j)


         # 一组100个人,调用loser函数找到倒霉蛋
         a=loser(person)
         print("被选中的是"+str(a))


总结:

1.关于递归函数,开始实现的时候,因为没有在所有的可能都返回return,导致最后拿到的参数是none;感谢百度,找到了原因!!

2.另外,实现过程中忘记了数组是从0开始的,有越界,不过这个问题很容易定位的

3.发现了python递归的深度是900多层,也是百度知道的。一开始递归函数没有写正确,就会导致一直递归的问题~














你可能感兴趣的:(python)