【Python不是大蟒蛇】 结构化编程 | 分支结构(if等)

Ⅰ. 结构化编程

0x00 假如现在只能用goto

上世纪五六十年代,高级语言还没普及,很多人用汇编写程序,汇编代码运行效率高,但是有个致命的缺点:不容易看懂,维护困难。

程序设计是少数聪明人干的事情,他们智力超群, 写代码也不讲什么规则,可以随意使用灵活而又强大的Goto,写出只有自己能懂的代码。

这样的代码不仅可读性极差,且效率极低。

如果让我回到那时候,我恐怕活不过1集。

0x01 大神相救

1968年,“北约软件工程大会”在风景如画的德国小镇Garmisch召开。NATO(北约)的科技委员会召集了近50名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。

每当危机到来,总会有大神出手相救,这一次是Dijkstra。相信各位对他肯定不陌生。

 这位大神经过研究,发布了一篇震惊世界的论文——《Go to 语句有害论》。他强烈要求废弃goto语句。

这篇论文一下是编程界炸了锅。Dijkstra这次准备充分,他搬出了一个著名的理论,也是现代编程的技术:

无论是什么程序,不管多么复杂,都可以用三种基本的结构来表达:顺序,分支,循环。

 

0x02 结构化编程 

Dijkstra还创造了一个词语:结构化编程

结构化编程包括如下元素:

控制结构:顺序,分支,循环

子程序:一系列封装的功能

这些就是现代编程语言的基本元素了。

对Go to 的争论一直没有停歇,包括高纳德这样的大神也卷入进来,发表文章《Structured Programming with go to Statements》,他分析了许多常见编程任务,然后发现其中的一些使用Go to 将得到最理想的结构。例如:跳出嵌套循环,多个分支的跳出等,所以现在很多编程语言依然保留着goto这个关键字(如永不过时的C语言)。

但是Python中已经删除了goto。

Ⅱ.分支结构

0x00 什么是分支结构

好了,跑的有点远了。我们回归正题吧。

迄今为止,我们写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构。但是只有顺序结构解决不了所有的问题,我们这时候就需要结构化编程里的分支结构了!

分支结构有什么运用场景:设计一个游戏,通过玩家的血量还有没有,没有就输出GameOver;登录系统,判断用户输入的密码真不真确........

我遇到了分支结构后,只能说一句:

0x01 单分支结构 

在python中单分支结构要使用if关键字

基本格式如下:

if 判断条件:
    代码块 # 代码为真就执行
# 否则就直接跳过

我们先解剖一下这段代码

什么样是为真呢?各位同学可以回去上一篇复习一下比较符 。在python中比较符有很多,如果比较符的两个数符合比较符那么就为真,比如说:

"a" == 1 # 输出:False
1 == 1 # 输出: True
1 > 1 # 输出:False
2 > 0.5 # 输出:True
not True # 输出:False

 很清楚了吧,要是这个条件为真。

实际上:

if 判断条件:
    代码块

相当于

if bool(判断条件):
    代码块

我们可以看到代码块着部分,我们会发现代码块前面多了一个缩进。

什么是缩进?

要求严格的代码缩进是python语法的一大特色,就像C语言家族(C、C++、Java等等)中的花括号一样重要,在大多数场合还非常有必要。在很多代码规范里面也都有要求代码书写按照一定的规则进行换行和代码缩进,但是这些要求只是纯粹是方便人(程序员)来阅读、使用或修改的,对于编译器或者解释器而言,完全是视而不见的。

但是对Python解释器而言,每行代码前的缩进都有语法和逻辑上的意义。Python的这个特性,也经常在Python使用者和非Python使用者中引起争论。

实际上,python这种强制的代码缩进,就像一把双刃剑,有好处也有坏处。显然,好处在于在严格要求的代码缩进之下,代码非常整齐规范,赏心悦目,提高了可读性,在一定程度上也提高了可维护性。

但是Python严格的代码缩进,对于从其他语言转过来的人,由于现在计算机和相关专业第一门语言一般都是C/C++或Java,他们的语法风格基本是一致的,所以可能要一段时间来适应。python代码缩进十分严格,如果不按其规则书写代码,就可能会出现语法错误,例如unexpected indent之类的,甚至有时也会出现逻辑错误。

                                —— 引用自知乎里的(作者忘了,如果有读者知道麻烦告诉我,我好标上)

简单来说,if执行的代码块就是通过缩进来识别的。这就说明下面这段代码也是可以的

if 判断条件:
    语句A
    
    语句B # 这段代码也属于if为真要执行的语句

注意:在Python中可以用4个空格或者一个tab表示一个缩进,但是不能混用,否则。。。

 

我们来试试这个单分支结构:

s = input()

if s == "666": #判断是否输入了666
    print('输入了666')

 实际上里面的if可以减化成这段代码

s = input()

if s == "666": print('输入了666')

这样也是可以的。

0x02 二分支语句

只靠单分支语句解决不了所有的问题,比如说:我们要判断学生的成绩是否合格

如果只用单分支语句,我们得这样:

if grade >= 60:
    print('及格')
if grade < 60:
    print('不及格,请家长!!!')

这样也太繁琐了吧!

编程大佬为了解决这个问题就发明了一个传奇语句——二分支语句!

在二分支语句中多出了一个else关键字

基本语法如下

if 判断条件:
    代码块1
else: # 如果上面的if判断为假就执行
    代码快2

因此我们开头的那段语句也就可以简化成这样了

if grade >= 60:
    print('及格')
else:
    print('请家长!!!')



0x03 多分支结构

我们还是用上次的二分支结构的例子。

如果我们要把他分的细一点呢?

if grade == 100:
    print('满分')
if 100 < grade >= 90:
    print('优秀')
if 90 < grade >= 80:
    print('良好')
if 80 > grade >= 60:
    print('及格')
if grade < 60:
    print('不及格') 

这代码有烂,可读写性也太差了吧!

大神怎么看的下去,三下两下就整出了一个多分支语句

多分支语句的基本语法如下

if 判断条件1:
    代码块1
elif 判断条件2: # 如果上面所有的都未执行且该条件为真就执行
    代码块2
elif ... # elif的数量可以是无数多
else:
    代码块n

这个才是最好的呀!

这样我们上面的代码就变成了

if grade == 100:
    print('满分')
elif 100 < grade >= 90:
    print('优秀')
elif 90 < grade >= 80:
    print('良好')
elif 80 > grade >= 60:
    print('及格')
else:
    print('不及格') 

这也太帅了!

0x04 逻辑运算符

我们在上节课中讲到过逻辑运算符,有如下

逻辑运算符 功能
and 与运算
or 或运算
not 非运算

1、and运算符

and运算符的功能:假设x,y为两个表达式,x and y表示当x,y两个表达式都为真是,运算的结果为真,and可以直观的理解成并且的意思

①两边都是表达式的情况:

例子:

print(30>20 and 40>30)#运行结果为TRUE

print(30>20 and 4>30)#运行结果为FALSE

当and两边均为表达式的时候,这个很好理解。

②一边是变量,另一边是表达式的情况:

例子:

print(20 and (c:=30)>20)#运行结果是TRUE

print(20 and (d:=20)>30)#运行结果为FALSE

③两边都是变量的情况:

例子:

a=20,b=30#那么print(a and b) 运行结果为 30

a=20,b=30#那么print(b and a) 运行结果为 20

这个情况其实是最难以理解的,顺着下面的思路来。

首先,and运算符的左边是a,这是个变量而不是表达式,所以无需判断左边一定是TRUE,而右边情况也是一样的,那么以为着两边的运算结果都是TRUE。

而python当中对于这种情况是有定义的,当and 从左到右,若所有值均为真,则返回后一个值,只要有一个假的值,则返回第一个假的值。

2、or运算符

or运算符的功能:假设x,y为两个表达式,x and y表示当x,y两个表达式只要一个为真,运算的结果就为真,当两个都为假时,则运算结果为假。or可以直观的理解成或者的意思

①两边都是表达式的情况:

例子:

print(30>20 or 40>30)#运行结果为TRUE

print(30>20 or 4>30)#运行结果为TRUE

print(3>20 or 4>30)#运行结果为FALSE

②一边是变量,另一边是表达式的情况:

例子:

print(20 or (c:=30)>20)#运行结果是20

print(20 or (d:=20)>30)#运行结果为20

③两边都是变量的情况:

例子:

print(20 or 30)#运行结果是20

print(30 or 20)#运行结果为30

3、not运算符

not运算符的功能:假设x为表达式,当x为真时,运算的结果就为假,当x为假时,运算结果为真。not可以直观的理解不是或者不对的意思

例子:

print(not(20>10))#运行结果为FALSE

print(not(10>20))#运行结果为TRUE

0x04 逻辑运算符的优先级

python当中逻辑运算符是有优先级的,优先级规则not>and>or,当遇到一个语句当中有多个逻辑运算符时,就得按照这个优先级来运算。

例子:

print(not(20 or 30) and 30>20)

运算结果是FALSE

 

猜你喜欢

转载自blog.csdn.net/m0_73552311/article/details/133042572
今日推荐