专栏首页Crossin的编程教室【每周一坑】生成九宫格图片

【每周一坑】生成九宫格图片

我们的每N周一坑栏目又来了。

之前我们有过和图像处理相关的题目:

  • 【每周一坑】用代码给图片配上文字
  • 【每周一坑】缩小图片尺寸

今天再来一个和图片有关的:图片切割

非常简单的功能,但在开发中很常见,很多网页/应用里缩略图都是对图片进行缩放+切割得到的。

增加一点点趣味性,我们的要求是:

把一张图片切成 3 x 3 九张小图

这样就可以把它们发在朋友圈重新组成一张大图了。

示例: 原图

效果

当然,原图是正方形效果最好。

附加题

  1. 对于不是正方形的原图,截取中间尽可能大的正方形区域,再分割成九张小图(需考虑长>宽和长<宽两种情况)
  2. 切图时将朋友圈小图之间的间隔考虑进去,使拼接出的大图看起来更连续

提示:仍然用之前提到过的 PIL 库,里面的 crop 方法即可实现(py3 安装包名为 pillow)。

参考代码将在下周给出,或看看其他同学在留言中提交的代码。

期待各位同学提交解答。

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

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

往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。


【解答】蜥蜴流感与贝叶斯定理

案例本身是一个典型的条件概率,用贝叶斯定理即可算出概率,概率统计的书籍和网上都可以搜到详细解释。

P = (0.01 * 0.9) / (0.01 * 0.9 + (1 - 0.01) * 0.09) = 0.0917

而我们的问题是要模拟这个场景。所以我们可以循环10万次,用 random 模块根据已知的概率来“产生”病例和阳性结果,并统计最终实际的阳性患病率。

给出一份参考代码:

import random
# 定义个体
class Man:
    flu = False #是否患病
    test = False #是否阳性
# 产生10万个体,随机患病和检测状况
all_people = []
for i in range(100000):
    m = Man()
    # 患病概率
    if random.random() < 0.01:
        m.flu = True
    # 真阳性概率
    if m.flu and random.random() < 0.9:
        m.test = True
    # 假阳性概率
    if not m.flu and random.random() < 0.09:
        m.test = True
    all_people.append(m)
# 统计个数
positive_people = [m for m in all_people if m.test]
print(len(positive_people))
positive_flu = [m for m in positive_people if m.flu]
print(len(positive_flu))
# 实际患病者在阳性者中的比例
print(len(positive_flu)/len(positive_people))

这里先模拟生成了10万份数据,然后统计结果。当然也可以边生成边统计,@Mr. wang、@铭记、@L、@杀哥 就是用的类似方法,有的写得比我还更简洁。

同时提交解答的还有 @Jzy、@灿夜、@冬日炎炎。感谢各位同学的参与,希望下次继续。

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

本文分享自微信公众号 - Crossin的编程教室(crossincode),作者:crossin

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-25

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Python 第24课】 if的嵌套

    和for循环一样,if也可以嵌套使用,即在一个if/elif/else的内部,再使用if。这有点类似于电路的串联。 if 条件1: if 条件2: ...

    Crossin先生
  • 【Python 第8课】while

    学会了if,有一个好处,就是你能听懂下面这个笑话了: 老婆给当程序员的老公打电话:“下班顺路买一斤包子带回来,如果看到卖西瓜的,就买一个。” 当晚,程序员老公手...

    Crossin先生
  • 测试你的红包代码

    上周我们探讨了如何实现一个简单的微信红包算法。还没有看过,或者还未亲手在代码里尝试过的朋友,可移步: 用 Python 实现一个简单的微信红包算法 如果你已经实...

    Crossin先生
  • Java 线程同步组件 CountDownLatch 与 CyclicBarrier 原理分析

    在分析完AbstractQueuedSynchronizer(以下简称 AQS)和ReentrantLock的原理后,本文将分析 java.util.concu...

    田小波
  • bash 的条件和循环

    条件这块建议先去瞧瞧《bash 的 Test》。bash 中的条件语句,基础就是 Test 。

    IMWeb前端团队
  • bash 的条件和循环

    本文作者:IMWeb 江源 原文出处:IMWeb社区 未经同意,禁止转载 原文 条件语句和循环可以统称为流程控制,是一门语言最基础的部分。 bash ...

    IMWeb前端团队
  • 聊聊Elasticsearch的NodesSniffer

    elasticsearch-7.0.1/client/sniffer/src/main/java/org/elasticsearch/client/sniff/...

    codecraft
  • 聊聊Elasticsearch的NodesSniffer

    elasticsearch-7.0.1/client/sniffer/src/main/java/org/elasticsearch/client/sniff/...

    codecraft
  • Github项目推荐 | jupyterlab-dash:JupyterLab中Dash应用程序交互式开发的扩展程序

    这是一个JupyterLab扩展,用于将Plotly Dash应用程序渲染为JupyterLab中的单独窗口 ?

    AI研习社
  • if判断与比较操作符gt、lt、eq等的使用

    PS:使用if判断时,需要在判断结束处填入"fi",表示if语句块的结束 例如: if [ $ACTION = "add"] then .....

    张诺谦

扫码关注云+社区

领取腾讯云代金券