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



