没有学不会的python
先放个屁
我们都是懒人,技术发展到了现在,什么东西都朝着自动化进行,从以前只能简单的替代重复劳动力到现在可以自学习的机器人、无人驾驶等众多神经网络自动学习技术,可以说,技术已经远远比我们想象的发展要快。
为什么程序可以自动化呢,就是因为它也可以拥有自己的大脑,拥有自己的判断,而且它的运转比人脑多了不止一个量级,最关键是,它可以一直重复运算,不带出错的那种,而且没有任何脾气。
控制结构就是在程序中起到了这样的作用。控制结构主要有循环控制结构和条件控制结构,外加一个出错处理机制,异常控制结构。
它们的作用如下:
- 循环控制结构:循环重复的做某件事,比如循环执行某段代码。
- 条件控制结构:根据条件判断应该执行哪个代码块,从而起到判断逻辑的作用。
- 异常控制结构:代码和人类也一样。有时候可能因为输入源或者写代码的逻辑,产生一些错误和异常,这个时候就需要异常控制结构出手,防止系统崩溃。也就是我们常说的系统健壮性。(本章节不讲这个,下一章节讲)
说说条件控制结构
不要以为条件控制结构很简单,如果你不仔细理解它的执行逻辑,总是会发生一些代码执行逻辑和你预算的不一样的请况,而你确摸不着头脑。因为你对条件控制结构理解的太浅了。
为了让我们更好的理解条件控制结构,我们先假定一个需求。我们一般根据家庭存款判断一个家庭的生活条件,先给出一个表格如下:
上图无根据,纯属我的yy,不用在意真实性。
首先,我们看下条件控制结构一般用法:
# 条件控制结构的用法 money = 5000 if money < 10000: print("存款小于1万,是困难家庭")
如果我们只需要判断一个条件,那么就跟上面一样就够用了,但是现实情况往往复杂的多。比如,存款3万的家庭怎么写判断逻辑呢。
我们知道3万是比1万多,但是低于5万,所以是穷苦家庭。
我们可以这样写:
# 条件控制结构的用法 money = 30000 if money < 10000: print("存款小于1万,是困难家庭") else: print("存款大于1万,不是困难家庭")
这个比上面的多了一个else语句块,它的作用是,如果if成立就执行if的语句块,如果不成立就执行else语句块。
但这个只能判断出困难家庭阶层以及非困难家庭阶层,如果要再细分穷苦家庭阶层,可以这样写:
# 条件控制结构的用法 money = 30000 if money < 10000: print("存款小于1万,是困难家庭") elif money < 50000: print("存款大于1万小于5万,是穷苦家庭") else: print("存款大于5万,不穷!")
这里因为30000大于10000小于50000,所以执行了elif语句块,elif的作用是进一步做条件判断,就是只有elif前面的条件判断不成立时,才会进行判断。所以elif的顺序非常重要!我们根据前面的表格需求写一个完整的例子:
# 条件控制结构的用法 money = 80000 if money < 10000: print("存款小于1万,是困难家庭") elif money < 50000: print("存款大于1万小于5万,是穷苦家庭") elif money < 100000: print("存款大于5万小于10万,是一般家庭") elif money < 500000: print("存款大于10万小于50万,是小康家庭") elif money < 5000000: print("存款大于50万小于500万,是中产家庭") else: print("存款大于5万,不穷!")
上述代码可以正确判断出,8万属于一般家庭。记住elif的条件顺序非常重要,不信我们可以看个例子,假如我这样写:
# 条件控制结构的用法 money = 80000 if money < 10000: print("存款小于1万,是困难家庭") elif money < 50000: print("存款大于1万小于5万,是穷苦家庭") elif money < 500000: print("存款大于10万小于50万,是小康家庭") elif money < 100000: print("存款大于5万小于10万,是一般家庭") elif money < 5000000: print("存款大于50万小于500万,是中产家庭") else: print("存款大于5万,不穷!")
这个跟前面的例子比,就是调换了判断顺序,就是先判断500000再判断100000。我们看下输出结果:
存款大于10万小于50万,是小康家庭
发生了什么?8万存款怎么就是小康家庭了呢?他应该是一般家庭才对。还记得我前面强调了什么吗?
elif只有是做进一步判断处理的,也就是前面的条件不成立,才会用到它来进行判断。
这里因为8万是小于50万的,所以条件成立了,就不继续往下进行了也就是小于10万大于5万的存款永远不会被判断正确。
你以为到了这里就结束了吗,不,too young,我们再接着研究。
我想问问你们,你们知道if和elif的区别吗?我们看下下面的两段代码:
# 条件控制结构的用法 money = 3000 if money < 10000: print("存款小于1万,是困难家庭") elif money < 50000: print("存款大于1万小于5万,是穷苦家庭") else: print("存款大于5万,不穷!")
强调一下,不要看花眼了,这里的存款是3000。我们接着看第二段代码:
# 条件控制结构的用法 money = 3000 if money < 10000: print("存款小于1万,是困难家庭") if money < 50000: print("存款大于1万小于5万,是穷苦家庭") else: print("存款大于5万,不穷!")
这两段代码的不同之处就是,下面我用if替换了elif。小伙伴们猜猜,这两段代码是一样的处理逻辑吗?
看下输出结果:
第一段代码输出: 存款小于1万,是困难家庭 第二段代码输出: 存款小于1万,是困难家庭 存款大于1万小于5万,是穷苦家庭
是不是跟我们预想的不一样,因为第二段代码中,两个if之间是没有任何关联的,所以,第一个if成立不影响第二个if成立,导致两个条件都成立,从而跟我们要的业务逻辑不一样。
记住了哦,elif不可以用if来代替
最后,要说的就是,else总是匹配离他最近的那个if,上面的那个else,匹配的是if money<50000这个条件,跟if money<10000是没有任何关系的。
好了,如果你把上面的例子吃透了,基本来说你再条件控制语句这块就不会犯毛病了。
还有就是条件控制结构有简写方法,就是我前面讲运算符中逻辑运算符一节提到的三目运算,有兴趣的朋友可以看一下。
接着说循环控制结构
循环控制结构相对条件控制结构来说,就简单的多,注意事项比较少。用于循环控制结构的两个关键词是for以及while。
关于for和while的用法比较简单,只是针对不同的数据类型可能会有不同的表现。看下面的几种用法,没什么特别的,我们只需要照着敲一下就行,注意事项基本没有。
循环列表
# 循环控制结构的用法 #循环输出每个元素 list_1 = [1, 2, 3, 4, 5] sum_1 = 0 # for的用法 for item in list_1: sum_1 += item # while的用法 index = 0 sum_2 = 0 while index < len(list_1): sum_2 += list_1[index] index += 1
循环字符串
对,不要怀疑,字符串也可以循环,其实字符串中的每个字符单独抽出来,也可以成为一个字符串。
# 循环控制结构的用法 name = "James Harden" #循环输出每个字符 # for的用法 for s in name: print(s) # while的用法 index = 0 while index < len(name): print(name[index]) index += 1
循环字典对象
字典对象,主要是不仅每个键值对是可迭代的,每个键组成的序列以及每个值组成的序列也是可迭代的。
# 循环控制结构的用法 dict_1 = {"name": "james harden", "age": 30, "sex": "female"} # 循环输出dict_1的每个元素 # for的用法 # 迭代键值对 for key, value in dict_1.items(): print("key:{0},value:{1}".format(key, value)) # 迭代键 for key in dict_1.keys(): print(key) # 迭代值 for value in dict_1.values(): print(value) # while的用法 字典一般不用while
字典一般不用while循环,这操作太骚了!
关于python基础,基本上用到的循环就上面几种居多,实际操作中会有更负杂的,比如panda库的series和frame的迭代等,如果日后从事大数据或者数据分析方向的,会接触到。但这些基础打牢了,学习那些也是很快的事情。
好了,这篇文章就到这里。
如果你对我的系列文章刚兴趣,可以关注我的公众号:
如果有什么意见或者建议,可以私聊我:
谢谢大家,下一章讲异常处理。再见。