Python 流程控制

Python 流程控制

1. 流程控制

1.1 什么是流程控制

流程控制:是计算机运算领域的用语,意指在程序运行时,个别的指令(或是陈述、子程序)运行或求值的顺序。

流程控制有三种类型:

  • 顺序结构

    先执行第1条语句,然后是第2条、第3条……一直到最后一条语句,这称为顺序结构

  • 分支结构

  • 循环结构

2. 分支结构

2.1 单if分支

语法格式 执行流程
if 表达式: 代码块 image

if 条件:
条件成立之后执行的子代码块

示例:

age = input("input your are age:")
if age < '18':
    print("未满十八周岁,请在家长陪同下观看")

2.2 if 与else连用

| if 表达式: 代码块 1 else: 代码块 2 | image
) |
| ---------------------------------------- | ----------------------------------------------------- |
| | |

如果表达式成立,就执行 if 后面紧跟的代码块1;如果表达式不成立,就执行 else 后面紧跟的代码块2

示例:

age = input("input your are age:")
if age < '18':
    print("未满十八周岁,请在家长陪同下观看")
else:
    print("你已满十八周岁,可以观看,但请注意身体")

if与else连用 两者的子代码永远只会执行一个

2.3 多个分支:if,elif...else

| if 表达式 1: 代码块 1 elif 表达式 2: 代码块 2 elif 表达式 3: 代码块 3 ...//其它elif语句 else: 代码块 n |image
|
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| | |

if...elif...elif...else会从上到下逐个判断表达式是否成立,一旦遇到某个成立的表达式,就执行后面紧跟的语句块;此时,剩下的代码就不再执行了,不管后面的表达式是否成立。如果所有的表达式都不成立,就执行 else 后面的代码块

weight = float(input("Enter your weight(kg):"))
height = float(input("Enter your height(m)"))
BMI = weight/(height*height)
if BMI <= 18.5:
    print("体重过轻")
elif BMI <= 25:
        print("体重正常")
elif BMI <= 30:
        print("体重过重")
else:
        print("肥胖")

elif可以有多个三者连用也是只会其中一个子代码块.

2.4 if 嵌套

if条件语句之间可以相互嵌套。

drunk = int(input("请输入酒精含量:"))

if drunk < 20:
    print("不属于酒驾")
else:
    if drunk < 80:
        print("你已经酒驾")
    else:
        print("你已经醉驾")

2.5 练习

#1.编写一个用户登录功能  用户名是hans 密码是123
username = input("please input your username:")
 passwd = input("please input your password:")
 name = 'hans'
 password = '123'

 if username == name and passwd == password:
     print("登录")
 else:
     print("登录失败.")
        
# 2.根据用户名的不同打印不同的用户身份
username = input("please input your username:")
if username == 'root':
    print("%s是管理员" % username)
elif username == 'tony':
    print("%s是安保人员" % username)
elif username == 'rose':
    print("%s是财务" % username)
elif username == 'jack':
    print("%s是销售" % username)
else:
    print("%s是普通员工" % username)
#方法二
name_list = {
    "root": "管理员",
    "tony": "安保人员",
    "jack": "销售",
    "rose": "财务"
}

username = input("please input your username:")
if username in name_list:
    print("%s是%s" % (username,name_list[username]))
else:
    print("%s是普通员工" % username)

2.6 必知

1.条件都会转成布尔值  从而决定子代码是否执行
2.在python中 使用缩进来表示代码的从属关系
3.并不是所有的代码都可以拥有子代码
4.同属于某个代码的多行子代码 必须要保持相同的缩进量
	在python中推荐使用四个空格来缩进
ps:小技巧 上一行代码的结尾如果是冒号 那么下一行代码必缩进

3. 循环结构

3.1 while循环

while 循环和 if 条件分支语句类似,即在条件(表达式)为真的情况下,会执行相应的代码块。不同之处在于,只要条件为真,while 就会一直重复执行那段代码块。

while 条件:
	条件成立之后循环执行的子代码块

image

示例:

#打印从1到10.
#方法1:
i = 1
while (i <= 10):
    print(i)
    i += 1
#方法2:  
i = 0
while (i < 10):
    i += 1
    print(i)

3.2 跳出循环break

break:结束本层循环。即还在满足循环条件的时候手动结束循环。

#打印从1到10,当打印到5时结束循环
#不使用break方法
i = 1
while (i <= 10):  
    print(i)
    if i == 5:
        i = 11 
    i += 1
    
#使用break
i = 1
while (i <= 10):
    print(i)
    if i == 5:
        break 
    i += 1

break结束本层循环,示例

i = 1
while (i <= 10):
    
    print(i)
    if i == 5:  #如果i等于5,则进入里面的循环,会暂停打印i的值
        while True:
            num = input("Enter anything(q is exit.):") 
            if num == 'q':  #当用户输入q时,则结束这个循环,然后继续打印i的值
                break
            print(num)
    i += 1
    
运行结果:
1
2
3
4
5
Enter anything(q is exit.):1
1
Enter anything(q is exit.):2
2
Enter anything(q is exit.):3
3
Enter anything(q is exit.):45
45
Enter anything(q is exit.):q
6
7
8
9
10

全局标志位

#即利用标志位直接结束全部循环。
Flag = True
while Flag:
    num = int(input("input a num:"))
    print("The num is %d" % num)
    if num == 5:
        while Flag:
            letter = input("Enter a letter:")
            print("The letter is %s" % letter)
            if letter == 'z':
                print("exit")
                Flag = False

                
#使用break实现同样的功能
while True:
    num = int(input("input a num:"))
    print("The num is %d" % num)
    if num == 5:
        while True:
            letter = input("Enter a letter:")
            print("The letter is %s" % letter)
            if letter == 'z':
                print("exit")
                break
        break

3.3 跳出本次循环continue

continue跳出本次循环,继续下一次循环。continue会让循环体代码直接回到条件判断处重新判断

示例:

#while 循环打印0到10,数字4不打印
count = 0
while count <= 10:
    if count == 4:
        count += 1
        continue

    print(count)
    count += 1
#执行结果:
0
1
2
3
5
6
7
8
9
10

3.4 循环+else

无论是 while 循环还是 for 循环,其后都可以紧跟着一个 else 代码块,它的作用是当循环条件为 False 跳出循环时,程序会最先执行 else 代码块中的代码。

当while循环没有被人为中断(break)的情况下才会走else。

count = 0
while count < 5:
    print(count)
    count += 1
else:	# 这时会执行else的代码。
    print("HaHa")
    
#执行结果:
0
1
2
3
4
HaHa

#示例2:
count = 0
while count < 5:
    if count == 3:
        break
    print(count)
    count += 1
else:
    print("HaHa")
    
0
1
2

3.5 无限循环(死循环)

无限环境即一直循环如果没有人为干预不会结束循环,又叫死循环

示例:

while True:
    print(1)
**尽量不要写出有死循环的代码,死循环会让CPU极度繁忙 甚至奔溃

3.6 for循环

for循环能做到的事情 while循环都可以做到

for它常用于遍历字符串、列表、元组、字典、集合等序列类型,逐个获取序列中的各个元素。

语法格式:

for 迭代变量 in 字符串|列表|元组|字典|集合:
  代码块

流程图:

image

示例:

#1. 用for打0到10
for i in range(11):
    print(i)
#执行结果:
0
1
2
3
4
5
6
7
8
9
10
//for遍历字符串、列表、元组、字典、集合等序列类型,但在遍历字典时只能遍历key.
# 2. 遍历字典
d = {'username': "Hans", 'age': 18, 'hobby': 'study'}
for i in d:
    print(i)
#结果:
username
age
hobby
#如果还要循环打印value的值:
d = {'username': "Hans", 'age': 18, 'hobby': 'study'}
for i in d:
    print(i,d[i])
#执行结果:
username Hans
age 18
hobby study

#3. 遍历列表
my_list = [1,2,3,4,5]
for i in my_list:
    print(i)
#执行结果
1
2
3
4
5

3.7 for循环使用break、continue和else

for中使用breakcontinueelse的方法与while一样。

3.7.1 for循环中使用break

示例:

for i in range(10):
    if i == 4:  #等于4直接跳出循环
        break
    print(i)
#执行结果:
0
1
2
3
3.7.2 for循环中使用contiue

示例:

for i in range(10):
    if i == 4:
        continue
    print(i)
#执行结果:
0
1
2
3
5
6
7
8
9
3.7.3 for循环中使用else

示例:

for i in range(5):
    print(i)
else:
    print("for")
#执行结果:
0
1
2
3
4
for


for i in range(5):
    if i == 2:
        break
    print(i)
else:
    print("for")
#执行结果:
0
1
#当for循环没有被人为中断(break)的情况下才会走else。

3.8 for循环的嵌套使用

image

示例:

#打印九九乘法表
for i in range(10):
    for j in range(1, i + 1):
        print("%s * %s = %s" % (i, j, i * j), end=" ")

    print()
#执行结果:
1 * 1 = 1 
2 * 1 = 2 2 * 2 = 4 
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 
6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 
8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 
9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81 

3.9 range()方法使用介绍

range()在不同版本的解释器中,本质不同:

  • python2.X中创建一个整数列表
  • python3.X中返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表

示例:

#python2.x
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#python3.x
>>> range(10)
range(0, 10)

使用方法:

range(stop)

range(start, stop[, step])

  • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
  • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
  • step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

示例:

# 第一种:一个参数  从0开始 顾头不顾尾
>>> for i in range(5):
...     print(i)
#执行结果
0
1
2
3
4
# 第二种:两个参数  自定义起始位置 顾头不顾尾
>>> for i in range(5,10):
...     print(i)
#执行结果
5
6
7
8
9
# 第三种:三个参数  第三个数字用来控制步长
>>> for i in range(1,10,2):
...     print(i)
#执行结果
1
3
5
7
9

4. 练习

4.1 猜年龄

#1. 用户可以有三次猜错的机会 如果过程中猜对了直接退出
count = 0
num = 20

while count < 3:
    age = int(input("Please input your age:")) 
    if age == num:
        print("Good")
        break
    else:
        print("come on")
    count += 1

#2. 三次机会用完之后提示用户是否继续尝试 如果是则再给三次机会 如果否则直接结束
count = 0
num = 20

while count < 3:
    age = input("Please input your age:")
    age = int(age)
    count += 1
    if age == num:
        print("Good")
        break
    elif  age < num:
        print("too small")
    elif  age > num:
        print("too big")


    if count == 3:
        is_yes = input("Do you want to try again[y/n]:")
        if is_yes == 'y':
            count = 0
        else:
            print("Bye Bye")

4.2 打印金字塔

for i in range(1,6):
    for j in range(5-i):
        print(" ", end=" ")
    for k in range(2 * i - 1):
        print("*", end=" ")
    print()

执行结果:
        * 
      * * * 
    * * * * * 
  * * * * * * * 
* * * * * * * * * 

posted on 2021-11-04 21:32  Hans_Wang  阅读(172)  评论(0编辑  收藏  举报

回到顶部