栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

那些年python踩的坑-for循环

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

那些年python踩的坑-for循环

新学python的小白,记录一下码代码犯的低级错误,供大佬们放松一下。

先看一下我们Java和C中的for循环用法:

public class Test {
   public static void main(String[] args) {
 
      for(int x = 10; x < 20; x = x+1) {
         System.out.print( x );
         System.out.print("n");
      }
   }
}

很普通的一个for循环,打印10-19一共十个数字,有一点编程基础的同学都能看明白。

那么现在我们来看一段求最大公约数的python代码:

    for i in range(1,min + 1):
        if((a % i == 0) and (b % i ==0)):
            find = i
    return find

小白对于for循环的敏感程度只存在于{........},突然没有了大括号对于for循环结构的意识一下子就淡化了,于是将代码改造成下面这样:

 for i in range(1,min + 1):
        if((a % i == 0) and (b % i ==0)):
            return i

区别在哪?区别在于我觉得把 i 的值赋给另一个参数再返回很多此一举,想耍小聪明的我将代码“升级”成第二段的样子,好了,结果就不对了,我们分别看一下两段代码输出的结果(求最大公约数):

第一段:

第二段:

 为什么“简化”后的代码求不出最大公约数呢?拿着这样的问题,自己傻傻的去问了这本书的作者,数据挖掘领域某大佬,得到了大佬的解答,化解成一句话就是:注意代码的缩进!

都是以前写代码不规范给自己挖的坑,再看一下这段代码中for循环的范围

    for i in range(1,min + 1): //第一步,循环开始
        if((a % i == 0) and (b % i ==0)): // 第二部,判断 i 是不是a和b的公约数(不一定是最大公约数)
            find = i //第三步,如果 i 是公约数,值赋给find,回到第一步!
    return find // 当for全部循环结束,此时find中存的就是最大公约数,返回该值

而我耍小聪明“化简”成了什么呢?

 for i in range(1,min + 1): // 第一步,循环开始
        if((a % i == 0) and (b % i ==0)): //第二部,同样的判断逻辑
            return i //第三步,将符合逻辑的 i 返回,循环结束

于是乎,不管我输入两个数字是多少,得到的结果都是1。

搞清楚了整个逻辑之后,突然觉得自己好傻,在以后没有大括号的日子里,只有冒号和缩进规范陪着我了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/674605.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号