用户登录
用户注册

分享至

python小白成长笔记(四)流程控制

  • 作者: 辉夜清安
  • 来源: 51数据库
  • 2021-11-22

每天分享一篇笔记和整理,对python感兴趣的小伙伴多多关注哦,希望大家一起学习

今天的内容是python中的判断语句,简单来书就是达到一定的条件,之后去执行你要求的任务

5. 流程控制

5.1 流程控制之if…else

假如把写程序比做走路,那我们到现在走的都是直路,如果遇到了十字路口,我们必须决定下一步该怎么走。我们要判断哪个方向才是要走的路,同理,我们想让程序也能进行判断,只需要在程序里预设一些条件判断语句,满足哪个条件,就走哪条岔路。这个过程就叫流程控制。

  • 基本上在各个语言中,都是用语法if…else…来实现,可分为单分支、双分支、多分支

单分支

if 条件:
    满足条件后要执行的代码

双分支

if 条件:
    满足条件执行代码
else:
    if条件不满足就走这段

缩进

你会发现,上面的if代码里,每个条件的下一行都缩进了4个空格,这是为什么呢?这就是Python的一大特色,强制缩进,目的是为了让程序知道,每段代码依赖哪个条件,如果不通过缩进来区分,程序怎么会知道,当你的条件成立后,去执行哪些代码呢?

在其它的语言里,大多通过{}来确定代码块,比如C,C++,Java,Javascript都是这样,看一个JavaScript代码的例子

var age = 56
if ( age < 50){
  console.log("还能折腾")
    console.log('可以执行多行代码')
}else{
   console.log('太老了')
}

在有{}来区分代码块的情况下,缩进的作用就只剩下让代码变的整洁了。

Python是门超级简洁的语言,发明者定是觉得用{}太丑了,所以索性直接不用它,那怎么能区分代码块呢?答案就是强制缩进。

Python的缩进有以下几个原则:

  • 顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,那它必须不能进行任何缩进
  • 同一级别的代码,缩进必须一致
  • 官方建议缩进用4个空格,当然你也可以用2个,如果你想被人笑话的话。

多分支

回到流程控制上来,if…else …可以有多个分支条件

if 条件:
    满足条件执行代码
elif 条件:
    上面的条件不满足就走这个
elif 条件:
    上面的条件不满足就走这个
elif 条件:
    上面的条件不满足就走这个    
else:
    上面所有的条件不满足就走这段

下面进行一个小案例

  • 猜年龄的游戏
age_of_oldboy = 48
guess = int(input(">>:"))
if guess > age_of_oldboy :
    print("猜的太大了,往小里试试...")
elif guess < age_of_oldboy :
    print("猜的太小了,往大里试试...")
else:
    print("恭喜你,猜对了...")

上面的例子,根据你输入的值不同,会最多得到3种不同的结果

再来个匹配成绩的小程序吧,成绩有ABCDE5个等级,与分数的对应关系如下

A    90-100
B    80-89
C    60-79
D    40-59
E    0-39

要求用户输入0-100的数字后,你能正确打印他的对应成绩

score = int(input("输入分数:"))
if score > 100:
    print("我擦,最高分才100...")
elif score >= 90:
    print("A")
elif score >= 80:
    print("B")
elif score >= 60:
    print("C")
elif score >= 40:
    print("D")
else:
    print("太笨了...E")

这里有个问题,就是当我输入95的时候 ,它打印的结果是A,但是95 明明也大于第二个条件elif score >=80:呀, 为什么不打印B呢?这是因为代码是从上到下依次判断,只要满足一个,就不会再往下走啦,这一点一定要清楚

5.2 流程控制之while循环

我们已经学会用if … else 来猜年龄的游戏啦,但是只能猜一次就中的机率太小了,如果我想给玩家3次机会呢?这个怎么弄呢?当然最笨的方式是把代码赋值三次。。。。
例如

age_of_oldboy = 48   #要猜对的年龄
guess = int(input(">>:"))   #用户输入的年龄赋值给 guess
if guess > age_of_oldboy :    #进行判断 然后返回结果
    print("猜的太大了,往小里试试...")
elif guess < age_of_oldboy :  	#进行判断 然后返回结果
    print("猜的太小了,往大里试试...")
else:
    print("恭喜你,猜对了...")
#第2次
guess = int(input(">>:"))
if guess > age_of_oldboy :
    print("猜的太大了,往小里试试...")
elif guess < age_of_oldboy :
    print("猜的太小了,往大里试试...")
else:
    print("恭喜你,猜对了...")
#第3次
guess = int(input(">>:"))
if guess > age_of_oldboy :
    print("猜的太大了,往小里试试...")
elif guess < age_of_oldboy :
    print("猜的太小了,往大里试试...")
else:
    print("恭喜你,猜对了...")

不仅非常的麻烦,若是想修改功能还得修改3次,因此记住,写重复代码是程序员最不应该的行为。

那么如何做到不用写重复代码又能让程序重复一段代码多次呢? 循环语句就派上用场啦

语法

while  条件:
    执行代码...

while就是当的意思,while指 当其后面的条件 成立 ,就执行while下面的代码

写个让程序从0打印到100的程序 ,每循环一次,+1

count = 0 
while count <= 100 : #只要count<=100就不断执行下面的代码
   print("loop ", count )
   count +=1  #每执行一次,就把count+1,要不然就变成死循环啦,因为count一直是0

输出

loop  0
loop  1
loop  2
loop  3
....
loop  98
loop  99
loop  100

如果我想实现打印1到100的偶数怎么办呢?

那就得先搞清,怎么判断一个数字是偶数,能被2整除的就是偶数对不对, 怎么判断能否被2整除?简单,除完2没有余数就是啦。这个时候就用到上一小节学的取模算运算符?

>>> 10%2
0
>>> 8%2  #无余数,是偶数
0
>>> 7%2  #有余数,是奇数
1

那么将这个条件放到我们的循环程序里

count = 0
while count <= 100 : #只要count<=100就不断执行下面的代码
    if count % 2 == 0: #是偶数
        print("loop ", count)
    count +=1 #每执行一次,就把count+1,要不然就变成死循环啦,因为count一直是0

输出

loop  0
loop  2
loop  4
loop  6
....
loop  96
loop  98
loop  100

死循环

有一种循环叫死循环,一经触发,就运行个天荒地老、海枯石烂。
这种循环以后也会经常用到,就是你要直接去循环一个任务,没有条件触发,因为True本身就是真的

while 是只要后边条件成立(也就是条件结果为真)就一直执行,怎么让条件一直成立呢?

count = 0
while True: #True本身就是真呀
    print("你是风儿我是沙,缠缠绵绵到天涯...",count)
    count +=1

循环中止语句

如果在循环的过程中,因为某些原因,你不想继续循环了,怎么把它中止掉呢?这就用到break 或 continue 语句

  • break用于完全结束一个循环,跳出循环体执行循环后面的语句
  • continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环
  • 下面我们分别进行 举例

例子:break

count = 0
while count <= 100 : #只要count<=100就不断执行下面的代码
    print("loop ", count)
    if count == 5:
        break
    count +=1 #每执行一次,就把count+1,要不然就变成死循环啦,因为count一直是0
print("-----停止循环 ------")

输出

loop  0
loop  1
loop  2
loop  3
loop  4
loop  5
-----停止循环 ------

例子:continue

count = 0
while count <= 100 : 
    count += 1
    if count > 5 and count < 95: #只要count在6-94之间,就不走下面的print语句,直接进入下一次loop
        continue 
    print("loop ", count)
print("-----停止循环 ------")

输出

loop  1
loop  2
loop  3
loop  4
loop  5
loop  95
loop  96
loop  97
loop  98
loop  99
loop  100
loop  101
-----停止循环 ------

while … else …

与其它语言else 一般只与if 搭配不同,在Python 中还有个while …else 语句

while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句

count = 0
while count <= 5 :
    count += 1
    print("Loop",count)
else:
    print("循环正常执行完啦")
print("-----结束了 ------")

输出

Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循环正常执行完啦
-----结束了 ------

如果执行过程中被break啦,就不会执行else的语句啦

count = 0
while count <= 5 :
    count += 1
    if count == 3:
    	break
    print("Loop",count)
else:
    print("循环正常执行完啦")
print("-----停止循环 ------")

输出

Loop 1
Loop 2
-----停止循环 ------

5.3 for循环

for循环可以做的事情while循环都可以实现,之所以用for循环是因为在循环取值(即遍历值)时for循环比while循环的使用更为简洁,

for循环语法如下

for 变量名  in 可迭代对象: # 此时只需知道可迭代对象可以是字符串\列表\字典,我们之后会学到可迭代对象
    代码一
    代码二
    ...

#举个例子
for item in ['a','b','c']:
    print(item)
# 运行结果
a
b
c

# 参照例1来介绍for循环的运行步骤
# 步骤1:从列表['a','b','c']中读出第一个值赋值给item(item=‘a’),然后执行循环体代码
# 步骤2:从列表['a','b','c']中读出第二个值赋值给item(item=‘b’),然后执行循环体代码
# 步骤3: 重复以上过程直到列表中的值读尽

案例一:利用 for 和 while 循环打印数字0-5

# 简单版:for循环的实现方式
for count in range(6):  # range(6)会产生从0-5这6个数
    print(count)

# 复杂版:while循环的实现方式
count = 0
while count < 6:
    print(count)
    count += 1

案例二:遍历字典

# 简单版:for循环的实现方式
for k in {'name':'jason','age':18,'gender':'male'}:  # for 循环默认取的是字典的key赋值给变量名k
    print(k)

# 复杂版:while循环确实可以遍历字典,后续将会迭代器部分详细介绍

案例三:for循环嵌套

#请用for循环嵌套的方式打印如下图形:
*****
*****
*****

for i in range(3):
    for j in range(5):
        print("*",end='')
    print()  # print()表示换行

注意:break 与 continue也可以用于for循环,使用语法同while循环

打印九九乘法表

for i in range(1,10):
    for j in range(1,i+1):
        print('%s*%s=%s' %(i,j,i*j),end=' ') #end =''以什么结尾,意思在结尾打印一个空格 不换行 
    print()    #换行
    

思维导图

软件
前端设计
程序设计
Java相关