python的流程控制

流程控制之if判断

1. 条件

在将if判断之前我们简单说一下什么是条件。

条件的意思是事物存在、发展的影响因素;所具备或处于的状况 ---- 来自《北史-郎基转》

1.1 什么可以当做条件

上面是我们对条件的解释,你听不懂都行,重要的是在python中什么可以当做条件,以及从条件中最终得到什

么。所有的条件最终都会返回一个布尔值,就是我们常说的真和假。那么只要能返回布尔值,就可以当做条件

1.1.1 显示布尔值

条件可以是:比较运算

3 > 2 # 返回的布尔值是True

条件可以直接是True/False

1.1.2 隐式布尔值

所有的数据类型的值都可以当做条件去用

其中 0,None,空(空字符串,空字典,空列表. . . )代表的布尔值都是False, 其余的都是True

2. if判断

2.1 什么是if判断

实际上if判断在我们的生活中经常用,可能是你没有在意他,因为真的太平常不过了,你只需要把这个if翻译成如果,嘿嘿,是不是有点内味了。举一个最常见的,小学老师最喜欢说的,如果明天下雨,我就不出去玩了。是不是就是一个因果关系。

2.2 为什么要有if判断

就是让计算机能够像人一样判断一个条件是否成立, 然后再去做某件事的功能。

2.3 if判断语法

2.3.1 语法1

if 条件:
    代码1
    代码2
    代码3
    # 代码1,2,3 属于同一级别的代码,总体称为一组代码块,因为他们缩进相同,都是四个空格.
    # 特点:按照自上而下的方式运行
    # python用缩进来标识代码级别的,但是不能随意缩进
age = 18
gender = '女'
star = '水平座'

if 16 < age < 20 and gender == '女' and star == '水平座':
    print('我喜欢,我们在一起吧...')
print('其他代码')

# 代码自上而下执行,先执行顶级代码(缩进为0),然后遇到了if,发现了条件成立,执行if下面的次级代码。执行完后再继续执行顶级代码。

2.3.2 语法2

if 条件:
    代码1
    代码2
    代码3
else:
    代码1
    代码2
    代码3
# 当if后面的条件成立,即返回True,会执行if下面缩进的代码,else下面缩进的代码不会执行。

# 当if后面的条件不成立的时候,if下面的代码块不会执行,else下面的代码块这个时候会执行
age = 38
gender = '女'
star = '双子座'

if 16 < age < 20 and gender == '女' and star == '水平座':
    print('我喜欢,我们在一起吧...')
else:
    print('阿姨好,我逗你玩呢...')
print('其他代码')

2.3.3 语法3

判断多个条件是否成立,只要一个条件成立就不会再继续判断下面的条件了。

if 条件1:
    代码1
    代码2
    代码3
elif 条件2:
    代码1
    代码2
    代码3
elif 条件3:
    代码1
    代码2
    代码3
....

来个小练习, 用户输入分数, 返回成绩等级

  • 大于等于90 优秀
  • 大于等于80小于90 良好
  • 大于等于70小于80 一般
score = input('请输入你的分数:')
score = int(score)
if score >= 90:
    print('优秀')
elif 80 <= score < 90:
    print('良好")
elif 70 <= score < 80:
    print('一般')

2.3.4 语法4

也是if判断的最终版本

if 条件1:
    代码1
elif 条件2:
    代码2
elif 条件3:
    代码3
elif 条件4:
    代码4
else:
    代码5
# 这里的代码5是在所有条件都不成立时,才会执行.

2.4 if嵌套

很多新手容易在if嵌套中, 第一次感到学了那么久终于有点蒙蒙的感觉了, 感觉到绕人. 记住mn一句话, 保你以后遇到if嵌套, 分析的明明白白.

顶级if先分析,条件成立走分支

分支如果再if,条件继续看起来

如果条件皆不立,else下代码就执行。

age = input('请输入你的年龄:')
age = int(age)
if 18 < age < 25:
   	gender = input('请输入你的性别:')
	if gender == '女':
        print('美女你好...')
        is_merry = True
        if not is_merry:
            print('刚好我也是单身..')
        else:
            print('哈哈哈,我也有女朋友了,打扰了..')
    else:
        print('对不起,妹子才是我所喜欢的,打扰了')
 else:
    print('打扰了,我们年龄不相仿..')

流程控制之while循环

1. 循环

1.1 什么是循环

循环就是重复的做某件事情

1.2 为什么要有循环

就是为了让计算机能够像人一样重复的做某件事情

2. while循环

2.1 while语法

while 条件:
    代码1
    代码2
    代码3

while循环的执行流程:

步骤1:如果条件为真,那么依次执行:代码1、代码2、代码3、......
步骤2:执行完毕后再次判断条件,如果条件为True则再次执行:代码1、代码2、代码3、......,如果条件为False,则循环终止

image-20200723184547701

while循环是基于条件成立才工作的,所以while循环也可以叫做条件循环。

2.2 while循环示例

count = 1
while count < 5:
    print(count)
    count += 1
print('循环结束...')

# 1
# 2
# 3
# 4
# 循环结束

3. 死循环与效率问题

3.1 死循环

所谓的死循环就是不会结束的循环,即条件一直是成立的while循环,他会不停的反复执行循环体的代码。

while True:
    print('正在循环...')

3.1.1 纯计算的死循环

本质上死循环对计算机是无害的,但是如果循环体中的代码是纯计算的,那么你这个程序就会一直让cpu处于计算的状态,一秒都不会停的那种。那么对于整个程序来说就是有害的了。

while True:
    1+1    # 这种状态下用不了多久你电脑的风扇就开始呼呼了,因为cpu一直在工作. 

3.1.2 有io操作的循环

这种情况下的死循环对整个程序来说是无害的,因为io操作,cpu是不工作的,也就是说在这个死循环中

cpu不是一直反复执行这个循环体的代码。

while True:
    content = input("请输入:")
    print(content)

4. while循环应用案例

4.1 用户认证程序

4.1.1 基本版

用户认证程序的基本逻辑就是接收用户输入的用户名密码然后与程序中存放的用户名密码进行判断,判断成功则登陆成功,判断失败则输出账号或密码错误。

username = "ymn"
password = "123"

inp_name =  input("请输入用户名:")
inp_pwd =  input("请输入密码:")
if inp_name == username and inp_pwd == password:
    print("登陆成功")
else:
    print("输入的用户名或密码错误!")

上面程序是已经把功能实现了,但是我们日常生活中,用户名或密码输入错误,程序都会让我们重新输入。所以我们的程序也应该可以做到重复输入,一想到重复操作,既然学过了while循环,那么你应该联想到这个。

4.1.2 循环输入版

username = "ymn"
password = "123"
while True:
    inp_name =  input("请输入用户名:")
    inp_pwd =  input("请输入密码:")
    if inp_name == username and inp_pwd == password:
        print("登陆成功")
    else:
        print("输入的用户名或密码错误!")

虽然重复输入用while循环解决了,但是我们的程序出现了一个新的bug,那就是用户输入对,也会继续输入。

所以我们要解决用户输入正确的用户名和密码后,应该结束循环。那么我们来学习一下退出循环的两种方式,

然后再优化我们的程序。

5. 退出循环的两种方式

5.1 基于条件退出循环

我们都知道死循环是条件一直成立,如果我们想要退出循环,那么只要把条件改为假即可。既然要对条件进行修改

那么我们就不能直接把条件的值放在while后面,而是通过一个变量来该表示。

tag = True
while tag:
    inp_name =  input("请输入用户名:")
    inp_pwd =  input("请输入密码:")
    if inp_name == username and inp_pwd == password:
        print("登陆成功")
        # 改变条件退出循环,但是tag之后的代码还运行,下次循环判断条件时才生效
        tag = False       
    else:
        print("输入的用户名或密码错误!")

5.2 break退出循环

break是python的保留字,一般和循环使用,作用是退出当前循环。

while True:
    inp_name =  input("请输入用户名:")
    inp_pwd =  input("请输入密码:")
    if inp_name == username and inp_pwd == password:
        print("登陆成功")
        # 只要运行到break就会立即终止本次循环
        break
    else:
        print("输入的用户名或密码错误!")

通过break和修改条件两种方式都可以退出循环,区别就是一个还会继续执行到下一次的条件判断,另一个则是

直接退出。

6. 循环嵌套

循环是可以像if一样进行相互之间的嵌套

while True:
    代码1
    while True:
        代码2
        while True:
            代码3
            ....

对于循环的嵌套也有两种退出的方法

6.1 分层退出

while True:
    代码1
    break
    while True:
        代码2
        break
        while True:
            代码3
            break
            ....

6.2 统一条件退出

tag = True
while tag:
    代码1
    while tag:
        代码2
        while tag:
            代码3
            tag = False
            ....

7. while + continue

7.1 continue

continue是结束本次循环,直接进入下一次

7.2 逢7跳过

在0-9中只打印0,1,2,3,4,5,6,8,9

7.2.1 打印0-9

count = 0
while count < 10:
    print(count)
    count += 1

7.2.2 遇见7不打印

# 分析一下,不打印说明条件不成立,所以我们可以在7哪里设置一个if判断,并跳过该次打印
# 打印跳过但是自增并不需要跳过,所以还是需要自增

count = 1
while count < 10:
    if count == 7:
        count += 1  
        continue
    print(count)
    count += 1

强调:在continue之后添加同级代码毫无意义,因为永远无法运行

8. while + else

在while循环的后面,我们可以跟else语句,当while 循环正常执行完并且中间没有被break 中止的话,就会执行else后面的语句,所以我们可以用else来验证,循环是否正常结束

8.1 语法

while 条件:
    代码1
    代码2
    ...
else:
    代码3
    
# 只有当while循环结束之后,并且没有被break打断,才会执行else里面的代码
count = 0
while < 3:
    print(count)
    count += 1
else:
    print('循环没有被break,我将会被打印.')
    
    
count = 0
while count < 3:
    if count = 2:
        break
	count += 1
    print(count)
else:
    print("循环被break,我不会打印")

8.2 小练习

猜年龄,用户可以猜测三次,猜对的话直接退出,猜错三次提示已经错了三次。

age = 18
count = 0
while count < 3:
    count += 1
    guess = int(input(">>>:"))
    if guess > age:
        print("猜的太大了,往小里试试...")
    elif guess < age:
        print("猜的太小了,往大里试试...")
    else:
        print("恭喜你,猜对了...")
        break
else:
    print("你已经猜错三次了,没有机会了")

流程控制之for循环

1. for循环

1.1 什么是for循环

循环就是重复做某件事,for循环是python提供的第二种循环机制

1.2 为何要有for循环

理论上for循环能做的事情,while循环都可以做。

之所以要有for循环,是因为for循环在循环取值(遍历取值)比while循环更方便。

1.3 如何使用for循环

for循环语法

for 变量名 in 可迭代对象: # 可迭代对象可以是字符串,列表,字典,元组,集合等...
    代码1
    代码2
    代码3
    ...

2. for循环实例

2.1 列表循环取值

2.1.1 简单版

# 循环取出lst中的三个值,并打印.
lst = ["ymn",520,'xcy']
for x in lst:
    print(x)

for循环的执行流程是,当代码执行到for那句时,内部做的是把列表的第一个元素赋值给x,即 x = “ymn”,然后再执行循环体中的代码,循环体中的代码执行完成后会跳回到for那句,如果列表中还有元素的话,继续执行赋值操作,即 x = 520,然后再执行循环体中的代码,如果没有元素了,for循环也就停止了,所以可以说for循环的次数取决于可迭代对象的元素的个数。

2.1.2 复杂版

lst = ["ymn",520,'xcy']
i = 0
while i < 3:
    print(l[i])
    i += 1

2.2 字典循环取值

对于字典你可能有个疑惑:就是for循环取值的时候是把字典的键还是值还是键值对赋值给x呢?

我们来coding试试吧。

2.2.1 简单版

dic = {'man':"ymn","love":"xcy"}
for x in dic:
    print(x,dic[x]) # 通过coding发现字典循环取到的是键

2.2.2 复杂版

while循环当然可以遍历字典了,但是太麻烦了。所以我不想写,我也不会,更不会去学。

2.3 字符串循环取值

2.3.1 简单版

msg = 'ymn love xcy forever!'
for x in msg:
    print(x)  # 注意for循环会循环字符串中的每个字符,空格也是一个字符.

2.3.1 复杂版

msg = 'ymn love xcy forever!'
i = 0
while i < 21:
    print(msg[i])
    i += 1

3. for循环和while循环的异同

3.1 相同之处

都是循环,for循环可以做的事,while循环也可以做

3.2 不同之处

while循环称之为条件循环,循环次数取决于条件何时变为假

for循环称之为“取值循环”,循环次数取决于in后包含的值的个数

4. for循环补充

当for循环是用于取值时,变量名可以出现在循环体中,当for循环只是为了循环次数,可以在循环体中不使用变量名,但是在for后,必须写变量名,这个是语法规定。

4.1 for + range

range是python提供一种内置的数据类型。就像字符串,列表等,都是python内置的数据类型。

range(stop) -> range object
	  结束
range(start, stop[, step]) -> range object
	   开始   结束   步长

# range有个特点就是顾头不顾尾
for i in range(5):
    print(i)       # 0,1,2,3,4
    
# 注意:py2中range返回的是一个列表
#	   py3中返回的是一个对象

通常情况下for循环喜欢和range( ),搭配使用。

for + continue / else / break,其用法和while的是一模一样的,这里就不一一写代码演示了。

4.2 for循环嵌套

# 外层循环循环一次,内层循环需要完整的循环完毕

for i in range(3):
    print('我是外层循环--->',i)
    for i in range(5):
        print('我是内存循环--->',i)

小练习: 你可以尝试使用for循环嵌套打印9*9乘法表。

4.3 for循环退出

while循环的退出有两种方式,但是for循环的话只有一种break方式。

for i in range(10):
    if i == 7:
        break   # 当i==7时,退出for循环 
    print(i)
posted @ 2020-08-12 18:49  Mn猿  阅读(88)  评论(0编辑  收藏  举报