Bootstrap

程序控制的三种基本结构 -- 顺序、分支、循环

一、程序控制的三种基本结构

1. 顺序

  • 按照先后顺序一条条执行
  • 例如:先洗手,再吃饭,再洗碗

2. 分支

  • 根据不同的情况判断,条件满足执行某条件下的语句
  • 例如:先洗手,如果饭没有做好,玩游戏;如果饭做好了,就吃饭;如果没有做饭,叫外卖

3. 循环

  • 条件满足就反复执行,不满足就不执行或不再执行
  • 例如:先洗手,看饭好了没有,没有好,一会儿来看一次是否好了,一会儿来看一次,知道饭好了,才可以吃饭。这里循环的条件是饭没有好,饭没有好,就循环的来看饭好了没有

二、分支结构

1. 单分支

 if condition:

        代码块

if 1 < 2:        # if True:

        print("1 less than 2")        # 代码块

  • condition必须是一个bool类型,这个地方有一个隐式转换bool(condition),相当于False等价
  • if语句这行最后,会有一个冒号,冒号之后如果有多条语句的代码块,需要另起一行,并缩进 

        ① if、for、def、class等关键字后面都可以跟代码块

        ② 这些关键字后面,如果有一条语句,也可以跟在这一行后面。例如: if 1 > 2: pass (不建议)

2. 多分支

if condition1:

        代码块1

elif condition2:

        代码块2

elif condition3:

        代码块3

……

else:

        代码块

a = 5

if a < 0:

        print("negative")

elif a == 0:        # 相当于  a >= 0

        print("zero")

else:        # 相当于 a > 0

        print("positive")

  • 分支结构,只要有一个分支被执行,其他分支都不会被执行
  • 前一个条件被测试过,下一个条件相当于隐含着这个条件
  • python中没有switch…case

# 嵌套

a = 5

if a == 0:

        print("zero") 

else:

        if a > 0:

                print("positive")

        else:

                print("negative")

for循环、while循环都可以相互嵌套,形成剁成循环,但循环嵌套不易过深。

三、while循环

while循环多用于死循环,或者不明确知道循环次数的场景

while cond:

        block

while True:        # 死循环

        pass

a = 10

while a:         # 条件满足则进入循环

        print(a)

        a -= 1

  • 上例执行结果是什么?
  • 为什么?
  • 会不会打印出0?要注意边界的分析
  • 如果flag = -10可以么?如何改?回忆一下,False等价是什么?

四、for语句 

for element in iterable:        # 可迭代对象中有元素可以迭代,进入循环体

        block

for i in range(0, 10):

        print(i)

遍历:容器中所有的元素不重复的取一遍

range()内建函数,直接返回一个range对象,并不是直接立即返回数据,惰性对象

惰性对象,必须使用一些方法,去里面拿出数据,你不拿,他不给。拨一下转一下,我们得驱使惰性对象运转。

range对象 是 可以迭代得对象,它有内容,但是你必须驱动它

for i in range(3):        # 默认会一次次驱动它,直到可迭代对象遍历完成

        print(i)

range(stop) -> range object 给终点,默认起点是0,返回的是[0, stop) / [0, stop -1]

range(start, stop[, step]) -> range object

range(i),i大于0,相当于计数器

range(0, 1)    <==>  range(1)        0          1个数据      计数器

range(0, 10)    <==>  range(10)     0 ~9    1个数据      计数器

练习: 

① 打印1到10

② 打印10以内的奇数

③ 打印10以内的偶数

④ 倒着打印10以内的奇数或偶数

⑤ 打印2的0次幂的值

五、continue

跳过当前循环的当次循环,继续下一次循环

for i in range(10):

        if i % 2 !=0:

                continue

        print(i)

for i in range(0, 10):

        if i & 1 !: continue          # 按位与

        print(i)

六、break 

结束当前循环

练习:计算1000以内的被7整除的前20个正整数(for循环)

count = 0

for i in range(7, 1000, 7):

        count += 1

        print(count, i)

        if count == 20:

                break

总结:

  • continue和break是循环的控制语句,只影响当前循环,包括while、for循环
  • 如果循环嵌套,continue和break也只影响语句所在的那一层循环
  • continue和break只影响循环,所以if cond: break不是跳出if,而是终止if外的break所在的循环
  • 分支和循环结构可以嵌套使用,可以嵌套多层

七、else子句

如果循环正常结束,else子句会被执行,即使是可迭代对象没有什么元素可迭代 

for i in range(0):        # 可迭代对象没有迭代

        pass

else:

        print("OK")

for i in range(0, 10):        

        break

else:

        print("OK")

for i in range(0, 10):        

        continue

else:

        print("OK")

一般情况下,循环正常执行,只要当前循环不是被break打断的,就可以执行else子句。

哪怕是range(0),也可以执行else子句

;