设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 7811|回复: 0
打印 上一主题 下一主题

【每周一坑】双色球选号器

[复制链接]

169

主题

1

好友

733

积分

版主

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2017-2-27 10:31:15 |只看该作者 |倒序浏览
本帖最后由 江水滔滔 于 2017-2-27 10:34 编辑

【每周一坑】双色球选号器2017-02-24 Crossin的编程教室
说到做到,每周一坑 没有跳票,今天又来了!
我反复说,学会语法只是编程的开始,不断地写代码才是提升技能的必经之路。所以这个栏目我们肯定是要做下去的,哪怕它的阅读量注定不会很高。┑( ̄Д  ̄)┍
网上也有大量的编程练习,不管什么形式什么语言,你都可以尝试用 Python 或其他你正在学习的语言来实现。不过我们当然不想只做互联网的搬运工咯。我们的每周一坑挑选的题目将秉持有趣实用两个特点,力求让编程不再枯燥。

双色球选号器
1.webp (5).jpg
本周的题目很简单:写一个小程序,帮你随机挑选一组或几组双色球彩票的号码。然后你就可以拿着去投注啦~
你说这算出来的号码有用吗?那当然并没有什么卵用啦。不过如果你身边有人沉迷于彩票,你不妨在这个程序的基础上,去结合双色球的开奖历史,算一算买彩票的投资回报,让他趁早打消一夜暴富的念头。(要致富,还是学编程更靠谱些[手动捂脸])
附双色球彩票规则:
双色球由红球和蓝球两部份组成,从33个红球号码(01~33)中选择6个,再从16个蓝球号码(01~16)中选择1个。开奖时,在红色球中随机摇出六个红号,在蓝色球中随机摇出一个蓝号。
要求:
  • 生成一组或多组彩票号码
  • 附加题1:模拟开奖结果,用你自己手选的号码,去计算中奖的概率
  • 附加题2:加入购买费用(2元一注)和奖金返还,算算看你玩一百年彩票能赚(kui)多少钱

中奖规则和奖金设置本文略过。有兴趣挑战附加题的同学可自行搜索“双色球”。
示例:红球:02 05 10 22 32 33蓝球:09
三门问题解答
昨晚试了下水,尝试小范围直播了这道题的解答。以后我们会经常干这种事的,欢迎大家去斗鱼上关注 Crossin的编程教室
这道题,可以通过数学方法去计算概率。不过我们不需要这么做。计算机其实是很“笨”的,我们只要让它去暴力模拟N多次情景,直接统计最终的结果即可。
我们给三个门编上号:0,1,2(计算机里通常都是从 0 开始)
通过之前课程【Python 第9课】 random 里介绍过的 randint 方法,随机设定一扇有汽车的门:
import randomcar_door = random.randint(0, 2)
再随机从三个编号中选出一个作为参赛者的选择:
my_door = random.randint(0, 2)
用 random 模块的另一个方法 choice,来决定是否要换门:
change = random.choice([True, False])
如果换门,之前的选择是错的,那么反倒赢了汽车:
  1. if change:
  2.     # 记录次数
  3.     switch += 1
  4.     if my_door != car_door:
  5.         # 一开始选错了
  6.         switch_win += 1
复制代码
否则如果不换门,之前的选择是对的,就赢汽车:
  1. else:
  2.     stay += 1
  3.     if my_door == car_door:
  4.          # 一开始选对了
  5.          stay_win += 1
复制代码
最后,统计结果并输出即可。Python2 里,两个整数相除会得到整除值,在计算概率时需小心这个坑。
# 乘上 1.0 转为浮点数
print 1.0 * switch_win / switch
某次结果示例:
换门 49976换门赢 33324, 66.68%不换门 50024不换门赢 16543, 33.07%
公众号里回复 三门 可以获取完整参考代码地址,其中还包括另一份推广到 N 扇门的通用解法。
上一期有不少同学提交了解答,都挺不错的。其中 Sega 的解法比较简洁,并且如果扩展至更多的门,也容易修改。代码地址:
https://github.com/segalou/python_projects/blob/master/three_doors/three_doors.py
本期的双色球问题,依然欢迎大家踊跃提交。虽然暂时提交了也没啥奖励,不过要啥自行车,你把咱们的题都做了,还怕没自行车?!








Crossin的编程教室
编程世界的新手村
加群请联系微信:crossin11
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-8 00:26 , Processed in 0.019439 second(s), 25 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部