【每周一坑】暴力计算圆周率 +【解答】生成/识别二维码

我们之前有出过一些和概率相关的问题。我讲过,用计算机程序来解编程题有个很有意思的思路,就是暴力解法。就是利用电脑的计算能力,去模拟大量的情况(甚至所有情况),得出统计数据。这种方法虽然从数学角度来说不是绝对和精确的,但可以很方便地应付很多需求,以及作为计算结果的辅助验证。

更重要的一点,这种方法是非常的程序员思维,没接触过编程的人往往不会想到还可以用这种方式来解决问题。因此我也经常会提及此类问题。

今天我就再来抛一个问题:计算圆周率 π

古人发明了“割圆法”求圆周率。学过高等数学应该知道,π 可以通过无穷级数来精确计算。而有了计算机之后,我们还可以有更多种尝试。比如之前我也写过一篇 一个略奇葩的计算圆周率的程序,就是通过模拟布丰投针实验来粗略计算 π。除此之外,还可以有其他方法,这里给两个思路:

1、假设 R 为半径,生成 2R x 2R 的点阵,即 x = [-R, R], y = [-R, R],根据圆的定义:在同一平面内,到定点的距离等于定长的点的集合。可以计算出这些点里,哪些点属于圆的内部。当点数足够多时,这些点的数量就可以近似地看做圆的面积。再根据圆面积公式 S = π R²,就可以反推出 π 的近似值。

2、思路同上一条类似,但不再使用规则点阵,而是在 [-R, R] 的范围内生成大量随机的点。最后根据圆内与圆外点的数量比例,推算 π 的近似值。这种采样方法也就是大名鼎鼎的蒙特卡洛方法(Monte Carlo method)

你可以用上述的方式,也可以用你自己的方式,尝试算一下 π。

期待各位同学提交解答。详细解答和参考代码将在下次栏目中给出,也可以其他同学在留言中的代码。

提交代码可以使用 paste.ubuntu.com

codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。


【解答】生成/识别二维码

上一次的题目 生成/识别二维码,包括两部分,生成和识别。这两个步骤都可以通过第三方库实现。

生成部分比较简单,使用 qrcode 库即可:

import qrcode
img = qrcode.make('learn python with Crossin')
img.show()
img.save('qrcode.png')

识别的部分,稍微有点麻烦,因为实际当中,拍摄到的二维码是会有各种角度变形和干扰的。所以二维码的识别库比生成库要更复杂。常用的库有 zxing、zbar、zbarlight,安装时候需要找下教程,并不是直接 pip 就可以。但装好后代码也挺简单,这里以 zxing 为例:

import zxing
zx = zxing.BarCodeReader()
code = zx.decode('qrcode.png')
print(code.raw)

上次提交解答的三位同学就恰好分别用了这三个库: ☁(pyzbar)、王文亚(zbarlight)、小布(zxing)

其实还有种解决方法,就是使用在线的编解二维码 API。有的是直接提供了开放接口,有的是在线服务,但你可以用我们之前讲过的 Chrome开发者工具 去获取它的接口。

而实际开发时,如果你有此需求,我还有个建议,就是直接使用微信小程序提供的扫码功能,非常方便。我在之前的小程序开发案例 扫码入库小程序 中就有使用。

感谢各位同学的参与。

期待在下一期中看到你的代码!

原文发布于微信公众号 - Crossin的编程教室(crossincode)

原文发表时间:2018-10-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spark学习技巧

Kylin及数据仓库的技术概念详解

一 cube 1, Table cube数据源的hive表的定义,在build cube之前需要进行同步。 2, Data Model 这描述了一个星型...

3208
来自专栏FreeBuf

浅析基于用户(角色)侧写的内部威胁检测系统

*本文原创作者:木千之,本文属FreeBuf原创奖励计划,未经许可禁止转载 从“谍影重重”谈起 最近Jason Bourne再次归来,围绕自己进入“踏脚石计划”...

2506
来自专栏生信技能树

Bioconductor的质谱蛋白组学数据分析

4475
来自专栏IT派

常用python组件包

$ pip list Package Version ---------------------- ------------- a...

3222
来自专栏机器人网

机器人在什么情况下遇到奇异点?

在调试机器人时,如果机器人处于下图状态(处于J4轴和J6轴同轴),会发生报警:MOTN-023或者MOTN-063,在此情况下,机器人只能在关节坐标系下移动。以...

1071
来自专栏人工智能头条

深度 | 图计算系统进展和展望

5344
来自专栏快乐八哥

数据可视化-EChart2.0.0使用中遇到的2个问题

之前项目中都是使用FusionChart和HighChart,基本都是没有购买商业许可。然后现在开发的系统需要交付给客户使用。所以现在图表控件不能直接使用Fus...

2922
来自专栏量子位

少年,这有套《街霸2》AI速成心法,想传授于你……

千平 发自 LZYY 量子位 出品 | 公众号 QbitAI ? “ 少年,我看你骨骼精奇,是万中无一的武学奇才。我这有套《街霸2》心法,见与你有缘,就十块钱卖...

4146
来自专栏大数据和云计算技术

智能调度:Stanford的Quasar

智能、自动化是对系统孜孜不倦的追求,尤其是在资源调度这块。传统的YARN/MESOS有各种资源分配算法,如DRF,capacity scheduler,fair...

3585
来自专栏AI黑科技工具箱

0.伏笔:图像读取方式以及效率对比

入职了之后挺忙,已经好久没有做一些科普性的更新了。近期已做了些学术要求不高的工作,所以刚好有时间写写总结。

68111

扫码关注云+社区

领取腾讯云代金券