专栏首页高渡号外极简是Python的灵魂 | Python代码找bug(10)

极简是Python的灵魂 | Python代码找bug(10)

Python代码找bug(10)

上期的代码设计需求:

两个 3 行 3 列的矩阵:

X = [[12,7,3],

[4 ,5,6],

[7 ,8,9]]

Y = [[5,8,1],

[6,7,3],

[4,5,9]]

请实现其对应位置的数据相加,并返回一个新矩阵。

代码如下:

请大家仔细阅读代码,找出其中的bug!

正确答案:共有2个问题。(对答案时间,看看答对了几个?)

(1)一个是真正的bug。请注意range()方法的参数,此处不仅是希望以X矩阵式列表长度为循环的最大次数,而且,也是循环变量i的取值范围,i将会是X列表的索引标号。所以,它的起始值不应该是1,而应该是0,因为索引都是从0开始计数的。相应地len(X)也就无需再加1了。后面的嵌套循环亦如是。

(2)另一个是需要代码优化的问题,这不能完全算是bug,因为程序是可以走通的。但是,我们说代码应该尽可能的简洁,包括不要写重复的代码。很多时候,我们解决问题的思维方式也会直接影响我们编写代码的复杂程度。在上面这段代码里,我们定义了一个空的列表R,用于存放矩阵运算后的返回值。于是,在后面的第一轮循环中,我们又定义了一个空的列表Z,用于在第2轮循环中存放X矩阵和Y矩阵的一个对应行相加的结果,循环结束,这个结果,可以添加到R列表中。看起来,思路是没有问题的,但是,能否更简洁一些呢?为什么不一开始就定义一个二维的R矩阵呢?这样我们不是可以直接将X矩阵和Y矩阵的计算结果直接更新到R中吗?没错,肯定可以这样。然而这两者的差别不是形式上的,而是思维的习惯性复杂度问题。我们总是习惯用一维线性的方式按顺序考虑问题,不习惯多维方式的并行思考模式。这个案例,恰好能够帮助我们去思考这样的问题。想想吧,X[i]和X[i][j]有什么区别?哪个效率更高?Python为什么总会定义一些相对复杂的数据结构,就是为了让处理问题的逻辑变得简单,毕竟处理问题才是目的。

所以,正确的代码应该是这样的:

点评:这个代码找bug问题,主要目的:

(1)学习矩阵,认识多维数据的表达式。

(2)巩固基础语法,熟练掌握range()方法的多种参数应用。

(3)训练对复杂数据结构的熟练应用能力。

对以上代码理解还有困难的同学,请翻阅和学习高渡号外前面发送的《Python入门》,或者高渡网站的《Python轻松入门》视频课程。

本期代码设计需求:互换两个变量的值。

代码如下:

经过了几期相对复杂问题的考验,本期来点简单的。当然,上面的代码还是有bug的。请找出来,发到留言里,明天对答案。

正确答案明天揭晓。

提醒:惯例所有代码都是基于Pythpn3 的哦。

本文分享自微信公众号 - 高渡号外(igaodu),作者:高渡号外

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

原始发表时间:2019-07-26

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python代码找bug(1)

    高一峰
  • Python代码找bug(4)

    (1)首先,第一个for循环,还是range()的参数问题,它的第二个参数表示数字序列取值到它前面(比它小1)的那一个,既然是9*9乘法口诀表,那就应该是取两个...

    高一峰
  • Python代码找bug(9)

    有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。...

    高一峰
  • 如何提高代码品味

    写代码虽然大多数时候是个体力活,但不可否认,也需要一点品位。我曾经觉得代码质量很重要,后来写业务写多了,又觉得如果连代码正确都做不到,又谈何代码质量。后来我又醒...

    Sheepy
  • 编程的智慧特点

      编程是一种创造性的工作,是一门艺术。精通任何一门艺术,都需要很多的练习和领悟,所以这里提出的“智慧”,并不是号称一天瘦十斤的减肥药,它并不能代替你自己的勤奋...

    用户1289394
  • 使用Eclipse插件提高Java编码质量

    代码质量概述 ? 怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行...

    大闲人柴毛毛
  • Google 鼓励的 13 条代码审查标准,建议收藏!

    在本文中,我们将简要介绍13条代码审查标准,希望能够通过这些标准极大地帮助改善软件的质量,同时让开发人员保持心情愉悦。

    Java技术栈
  • 聊聊我的HTTP框架近况:支持AOP,拦截器,配置文件读取...

    距离上一次给小伙伴们汇报简易版的“Spring Boot”的完成情况已经有半个月了。时间过得是真特么快啊!

    Guide哥
  • 他们说软件会吃掉世界,但是Bug还没解决掉

    “9月25日周二下午,我们的工程团队发现了一个影响近5000万个账户的安全问题,”Facebook的Guy Rosen在公司9月份的一次安全更新中表示到。

    人称T客
  • 超酷炫!5 款图像工具瞬间提高代码逼格!

    平时我们使用着漂亮的 IDE,编译器里的代码颜色丰富、支持高亮,但其实对外分享的时候,比如公众号、微博、Twitter 等社交平台,大部分都不支持代码排版,看代...

    GitHubDaily

扫码关注云+社区

领取腾讯云代金券