Hi,大家好。我是茶桁。
在前面几节课的基础之上,我们今天开始尝试在Python中控制流程。这中间,让我们来做一些实际的练习。
Python语句的分类
让我们先了解一下Python语句的分类。
在Python中,可分为单行代码
和代码块/组
, 顾名思义,单行代码就是一行的Python代码,而代码块是以冒号作为开始,用缩进划分相同作用域,这样的结构称之为代码块,是一个整体。
# 单行代码
a = 123
# 代码块
if a == 123:
print('True')
else:
print('False')
以上代码中输出结果为:
True
在输入代码块的时候,我们要注意使用缩进。在其他语言中代码块可能是{}
,但是在Python中严格遵守的缩进规则就是代码块。缩进可以是一个Tab距离或者四个空格,可是注意绝对不能混合使用,必须自使用一种方式缩进。
流程控制的分类
什么是流程?流程就是计算机执行代码时候的顺序。
流程可以被分为以下几类:
- 顺序结构
- 分支结构/选择结构
- 循环结构
顺序结构
顺序结构是系统的默认程序结构,自上而下进行执行。
分支结构
分支结构可以让代码走向不同的方向,不同的分支区间。
分支结构中又包含了单向分支,双分支和多分支以及巢状分支。
单向分支
单向分支就是在条件满足之后,执行后续任务。条件不满足的情况下,则不执行。
比如:
if 条件表达式:
一条python代码
a = True
if a:
print("True")
执行结果:
True
一个经典案例:
程序员下班前女朋友打电话:下班路上买十个包子回来,如果看到卖西瓜的买一个
baozi = 10
mxg = False
if mxg:
baozi = 1
print("买 %s 个包子" %(baozi))
输出结果:
买 10 个包子
正常情况下,我们是直接买了10个包子回家,那如果我们看到了卖西瓜的呢?那么这段代码中等于是我们重新赋值了mxg
, 就变成:
baozi = 10
mxg = False
# 走在路上看到了卖西瓜的,重新赋值
mxg = True
if mxg:
baozi = 1
print("买 %s 个包子" %(baozi))
输出结果:
买 1 个包子
双分支
双分支就是在单向分支的基础之上,又多了一个“否则”的选项,当条件不满足的时候执行其他操作。
if 条件表达式:
一条python代码
else:
另外一条python代码
person = 'girl'
if person == 'girl':
# 真区间
print("上前搭讪:美女,能加个微信吗?")
else:
# 假区间
print("直接走开。")
执行结果:
上前搭讪:美女,能加个微信吗?
以上就是一个双向的流程控制,这里面的含义为:表达式成立则执行真区间,如果不成立则执行假区间。
多分支
多分支就是在双分支的基础之上再增加其他可能出现的判断条件,用于执行更多的其他操作。
if 条件表达式:
一条python代码
...
elif 条件表达式:
一条python代码
...
elif 条件表达式:
一条python代码
...
...
else:
一条python代码
...
这段代码中的elif
就是可能出现的不同条件,示例如下:
score = 59
if score >= 90 and score <= 100:
print("奖励一个手机")
elif score >= 80 and score < 90:
print("今晚吃一顿好的奖励一下")
elif score >= 70 and score < 80:
print("鼓励:下次努力加油。")
elif score >= 60 and score < 70:
print("盯紧复习,争取下次进步。")
else:
print("奖励一顿‘竹笋炒肉’")
执行结果:
奖励一顿‘竹笋炒肉’
可以看到以上代码中,是从上到下依次进行判断条件,当所有条件都没有满足的时候,最后走到了else
区间。
这就是多分支,需要判断多个表达式的结果,会自行其中符合条件的一个。
巢状分支
巢状分支,也就是嵌套分支。也就是if条件语句的嵌套:
if 条件表达式:
代码语句
if 条件表达式:
代码语句
else:
代码语句
else:
代码语句
示例:
age = 25
height = 177
sex = 'male'
if sex == 'male':
# 可以往后判断
if age >= 22 and age <= 35:
# 年龄比较合适
if height >= 175:
print("处一下试试...")
else:
print("拉到...")
else:
print('当闺蜜吧。')
输出结果:
处一下试试...
在嵌套分支中我们需要注意,3 ~ 5层嵌套就是极限了,不要再往后嵌套。如果这个层数无法解决你的问题,那么可以重新梳理一下逻辑。基本大部分时候都是逻辑上有问题了。
分支 练习:十二生肖
当用户输入一个四位数的年份,计算当前这个年份对应的生肖:
申猴 酉鸡 戌狗 亥猪 子鼠 丑牛 寅虎 卯兔 辰龙 已蛇 午马 未羊
我们先来做一个用户输入的操作
# 获取用户输入的年份
year = input("请输入四位数的年份: ")
print(year, type(year))
添加一个type()
函数是为了验证用户输入之后的数据类型,当我们输入2023
之后,可以看到输出结果为:
2023 <class 'str'>
证明虽然我们输入的是数字,但是被转成了字符串,那这个时候,我们就需要处理一下了:
# 获取用户输入的年份
year = int(input("请输入四位数的年份: "))
print(year, type(year))
输出结果:
2023 <class 'int'>
这下就对了。
原本我们是需要讲位数,以及范围都控制在合理的数据内的。因为时间关系,在这整个示例中,我就不再去做更多的验证判断了。
# 获取用户输入的年份
year = int(input("请输入四位数的年份: "))
#print(year%12)
num = year % 12
"""
申猴 酉鸡 戌狗 亥猪 子鼠 丑牛 寅虎 卯兔 辰龙 巳蛇 午马 未羊
"""
if num == 0:
print(f'{
year}年是 ==> 申猴')