没有学不会的python--控制结构

没有学不会的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语句块。

但这个只能判断出困难家庭阶层以及非困难家庭阶层,如果要再细分穷苦家庭阶层,可以这样写:

这里因为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的迭代等,如果日后从事大数据或者数据分析方向的,会接触到。但这些基础打牢了,学习那些也是很快的事情。

好了,这篇文章就到这里。

如果你对我的系列文章刚兴趣,可以关注我的公众号:

 

 

如果有什么意见或者建议,可以私聊我:

 

 

谢谢大家,下一章讲异常处理。再见。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值