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

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

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


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


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


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


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开发者工具 去获取它的接口。


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


感谢各位同学的参与。

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


【福利时间】


上周的极客时间送券活动已结束,恭喜 历尽千帆 同学获得VIP年卡,以及 skolly、文锋、JakeWang、陈振荣、- Zy@ 五位同学获得专栏阅码。

没拿到奖品的同学们注意啦,今天的二条又有留言送书活动,一共 5 本,欢迎大家参与!


回复关键字:

python :零基础入门课程目录

新手 :初学者指南及常见问题

资源 :超过500M学习资料网盘地址

项目 :十多个进阶项目代码实例

如需了解视频课程及答疑群等更多服务,请号内回复 码上行动

代码相关问题可以在论坛上发帖提问 bbs.crossincode.com

推荐阅读:

爬抖音 |押韵工具 | 虎扑 | 如何debug | 苹果 | 查天气 | 我用Python | 知乎 | 排序 | 电影票 | 技术宅 | 单词表 | 新手建议

相关文章
牛客竞赛21842 正方形检测
牛客竞赛21842 正方形检测
|
机器学习/深度学习 人工智能 自然语言处理
【每周一坑】三国演义中谁的存在感最强 +【解答】暴力计算圆周率
当然,精确统计是比较复杂的,比如同样是刘备,可以是 刘备、玄德、刘豫州、刘皇叔、使君、先主、备,而同样的 主公、丞相、将军 这些称谓在不同语境下指的又是不同的人。这里我们就只粗略算个大概即可,统计哪些个名字出现次数最多。你可以尽量让结果更接近实际值。
|
C语言
【C语言刷题】喝汽水问题、上三角矩阵判定以及矩阵相等判定
【C语言刷题】喝汽水问题、上三角矩阵判定以及矩阵相等判定
79 0
【C语言刷题】喝汽水问题、上三角矩阵判定以及矩阵相等判定
|
算法 网络架构
代码随想录算法训练营第三十三天 | LeetCode 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
代码随想录算法训练营第三十三天 | LeetCode 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
55 0
|
算法
【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字
【算法挨揍日记】day03——双指针算法_有效三角形的个数、和为s的两个数字
52 0
|
存储 算法 开发工具
【每周一坑】图像的指纹:数字水印 + 【解答】鸡兔同笼
有人可能好奇,仅凭截图就能知道是谁干的吗?这里就是用到了“数字水印”技术。
|
机器学习/深度学习 算法 安全
【Python 百练成钢】时间调整、二进制数、回文素数、字母距离、CTF、Huffuman树、抽奖、前后缀最值、纯质数求解、花园灌溉
【Python 百练成钢】时间调整、二进制数、回文素数、字母距离、CTF、Huffuman树、抽奖、前后缀最值、纯质数求解、花园灌溉
【Python 百练成钢】时间调整、二进制数、回文素数、字母距离、CTF、Huffuman树、抽奖、前后缀最值、纯质数求解、花园灌溉
第十二届蓝桥杯决赛JavaC组真题——详细答案对照(全网唯一:异或变换100%数据)-1
第十二届蓝桥杯决赛JavaC组真题——详细答案对照(全网唯一:异或变换100%数据)
184 0
第十二届蓝桥杯决赛JavaC组真题——详细答案对照(全网唯一:异或变换100%数据)-1
|
测试技术 Windows
第十二届蓝桥杯决赛JavaC组真题——详细答案对照(全网唯一:异或变换100%数据)-2
第十二届蓝桥杯决赛JavaC组真题——详细答案对照(全网唯一:异或变换100%数据)
143 0
第十二届蓝桥杯决赛JavaC组真题——详细答案对照(全网唯一:异或变换100%数据)-2
|
存储 算法 Java
第十二届蓝桥杯A组省赛填空题Java思路及代码合集(相乘直线货物摆放路径回路计数)
第十二届蓝桥杯A组省赛填空题Java思路及代码合集(相乘直线货物摆放路径回路计数)
277 0