Python格式化输出、运算符、分支&循环
一、Python格式化输出
1 字符串格式化输出
1.1 +连接
在Python中,+主要有两个作用:
第一个作用:数学运算符 ---> 用于整形、浮点型等数学直接进行加法操作;
第二个作用:用来进行字符串连接 ---> 字符串+字符串(只能同类型相加,不同类型相加要类型转换,很麻烦 不同类型拼接在一起更便捷,就需要用到格式化输出);
所谓格式化 ---> 一种更好的输出方式
可以让你更方便的输出带有变量的数据
可以让你更方便的输出一些固定格式的数据
1.2 f-str形式
- 最简单方便粗暴的输出方式;
- 语法:在字符串前面加
f/F,在字符串中把要输出的变量,用大括号{}包裹起来; f'{变量}......{}'
python
money = 99.9
food = '一大堆零食'
print(str(money) + food)
# + 拼接
print("小明用了" + str(money) + "元" + "买了" + food)
# f-str形式
print(f'小明用了{money}元买了{food}')

上面的输出:
f-str形式:print(f'小明用了{money}元买了{food}')不需要进行强制数据类型转换,即str(money);
+拼接:print("小明用了" + str(money) + "元" + "买了" + food)需要使用+,并且还需要进行数据类型强制转换,即str(money);
遍历加f/F-str类型:
python
# 群发转发
name = ['父亲', '母亲', '舅舅', '妹妹', '姐姐', '哥哥']
# 使用循环来进行索引遍历得到列表name中的数据
for i in name:
print(F'{i},新年快乐哦,祝愿新的一年心想事成,事业蒸笼、步步高升。')

1.3 占位符
- 通过占位符先占一个位置,后续再用具体值补上
%s--->str类型 ------ 占位置,放字符串%d--->int类型 ------ 占位置,放整型(有小数点的,小数点会被抹除)%f--->float类型 ------ 占位置,放浮点数(默认6位小数)%.1f---> 带一位小数%.2f---> 带两位小数%.xf---> 带x位小数
- 语法格式:
print('XX%sXX%d' % (数据1,数据2))
python
# 占位符
str1 = '小明'
str2 = '小红'
str3 = 10
str4 = 480.5
print('%s同学在%d号这天,与%s同学相约逛昆明南屏街,两人在这天一共花费了%.1f' %(str1, str3, str2, str4))

占位符的应用:
python
# 占位符的应用 班级平均分
num = int(input("请输入高三三班学生人数:"))
grade = float(input("请输入高三三班学生平均分:"))
name = str(input("请输入高三三班学生授课老师:"))
print('''
----------高三三班学生----------
班级人数:%d
班级平均分:%.2f
班级授课老师:%s
'''
%(num, grade, name)
)

特殊注意事项:
- "一个萝卜一个坑",需要注意前后所用的
%对应的数据类型必须对应,否则会报错; - 对应的位置不能少,少位置或者多位置都不可以;
- 放的都是已知数据,不可更改;
1.4 format
format的用法跟占位符,f-str类似。它是用大括号作为占位符,在字符串后面通过.format来填上数据; 语法格式:print('xxx{下标}xxx{下标}'.format(数据1,数据2))
python
# format
nameId = 144658972212
name = "风中的砂砾"
times = "2026-06-08 05:00:00"
password = 999999999999
print("我的QQ号ID:{},QQ号昵称"{}",创建时间{},QQ号密码是:{}。".format(nameId, name, times, password))

下标来识别对应的位置:
python
# 下标位置对应
name1 = '小红'
name2 = '小明'
grade = 98.25
print("同学{}和同学{},他们的分数是:{}。".format(name1, name2, grade))
print("同学{}的分数是:{};同学{}的分数是:{}。".format(name1, grade, name2, grade))
print("同学{0}的分数是:{1};同学{2}的分数是:{3}。".format(name1, grade, name2, grade)) # 下标要从0开始,如果从1开始会报错,报:IndexError: tuple index out of range

1.5 总结三种格式化字符串的特点
| 类型 | 说明 | 应用或注意 |
|---|---|---|
f-str |
在字符串前面加f/F,使用{}来放入变量,语法最简洁,易读 |
在{}中可以直接进行数学运算或切片、索引等操作 |
% - 占位符 |
使用%操作符号进行占位,%后面填充数据 | 多种操作说明符:%s字符串、%d整型、%f浮点数 |
format |
字符串中用{}占位,.format()在小括号中放入数据,比较灵活,可以通过下标来锁定数据 |
变量如果重复使用,传一次就可以,放上变量对应的下标 |
二、运算符
1 赋值运算符
把右侧值赋给左侧变量:
python
a = 10
b = a # 把a的值10赋给变量b
常见的赋值运算符:
| 运算符 | 示例 | 等价写法 | 运算符名称 | 含义 |
|---|---|---|---|---|
+= |
a += 2 |
a = a + 2 |
加后赋值 | 先加,再将结果赋回变量 |
-= |
a -= 2 |
a = a - 2 |
减后赋值 | 先减,再将结果赋回变量 |
*= |
a *= 2 |
a = a * 2 |
乘后赋值 | 先乘,再将结果赋回变量 |
/= |
a /= 2 |
a = a / 2(结果浮点) |
除后赋值 | 先除,再将结果赋回变量 |
//= |
a //= 2 |
a = a // 2(整数除法) |
整除后赋值 | 先整除,再将结果赋回变量 |
%= |
a %= 2 |
a = a % 2(取余) |
取余后赋值 | 先取余,再将结果赋回变量 |
**= |
a **= 2 |
a = a ** 2(幂运算) |
幂后赋值 | 先求幂(次方),再将结果赋回变量 |
python
a = 5
a += 1 # 6
a -= 2 # 4
a *= 3 # 12
a /= 2 # 6.0
a //= 2 # 3.0
a %= 2 # 1.0
a **= 3 # 1.0
2 比较运算符
用于判断两个值的大小,相等关系 ,结果只有True(真)和False(假):
| 运算符 | 汉字解说 | 含义 | 示例 | 结果 |
|---|---|---|---|---|
== |
等于 | 判断两边的值是否相等 | 5 == 5 | True |
!= |
不等于 | 判断两边的值是否不相等 | 3 != 2 | True |
> |
大于 | 判断左边是否大于右边 | 5 > 10 | False |
< |
小于 | 判断左边是否小于右边 | 5 < 1 | False |
>= |
大于等于 | 判断左边是否大于或等于右边 | 9 >= 8 | True |
<= |
小于等于 | 判断左边是否小于或等于右边 | 5 <= 3 | True |
python
a = 10
b = 20
print(a == b) # False
print(a != b) # True
print(a > b) # False
print(a < b) # True
print(a >= 10) # True
print(b <= 15) # False
身份与成员比较:
| 运算符 | 汉字解说 | 含义 |
|---|---|---|
is |
是同一对象 | 判断两边是否为同一个内存对象(不仅值相等) |
is not |
非同一对象 | 判断两边是否不是同一个内存对象 |
in |
属于 / 包含于 | 判断左边元素是否存在于右边的序列中 |
not in |
不属于 / 不包含于 | 判断左边元素是否不存在于右边的序列中 |
说明:
==比较值 是否相等;is比较身份(内存地址)是否相同。- 判断
None时应使用is:if x is None:
3 逻辑运算符
逻辑运算符用来连接多个判断条件 ,最终结果只有真(True)、假(False)。
and:两边条件全为真,结果才是真;只要有一个假,整体就是假or:两边条件,只要有一个为真 ,结果就是真,只有两边都是假,结果才是假not:把原有结果颠倒 ,真变假,假变真- 运算优先级:
not > and > or - 逻辑判断中:数字 0、空字符串、空列表、None 都代表假,其余代表真。
| 运算符 | 汉字解说 | 含义 |
|---|---|---|
and |
逻辑与 / 且 | 两边都为真时结果才为真 |
or |
逻辑或 / 或 | 两边只要有一个为真结果就为真 |
not |
逻辑非 / 取反 | 将真变为假,将假变为真 |
重要特性:短路求值
| 表达式 | 求值过程 | 结果 |
|---|---|---|
A and B |
若 A 为假,直接返回 A ,不再看 B |
假值短路 |
A or B |
若 A 为真,直接返回 A ,不再看 B |
真值短路 |
三、分支结构
Python的分支结构,是Python根据条件执行不同的代码块。
在Python中,构造分支结构 最常用的是if、elif、else三个关键字。所谓关键字就是编程语言中有特殊意义的单词,很显然我们不能使用它作为变量名。当然,并不是我们每次构造分支结构,都会将这三个关键字用上。
通过例子加以说明:
例如我们要写一个身体质量指数(BMI)的计算器。身体质量质数也叫体质指数,是国际上常用的衡量人体胖瘦程度以及是否健康的一个指标,计算公式如下所示。通常认为:BMI小于18.5说明体重过轻;BMI小于24属于正常范围;BMI大于24说明体重过重;BMI大于27就属于肥胖的范围了;
BMI=身高2体重
说明:上面公式中的体重以千克(kg)为单位,身高以米(m)为单位。
python
# 单分支
height = float(input('身高(cm):'))
weight = float(input('体重(kg):'))
bmi = weight / (height / 100) ** 2
print(f'你的身体质量指数为:{bmi:.2f}')
if 18.5 <= bmi < 24:
print('你的身材很棒!')
当输入身高162;体重65,经过计算后BMI的值为24.77,显然这个值不在[18.5,24)范围内,顾if后面的程序代码就不执行;

当输入身高163;体重50,经过计算后BMI的值为18.82,显然这个值在[18.5,24)范围内,顾if后面的程序代码执行;

python
# 双分支
height = float(input('身高(cm):'))
weight = float(input('体重(kg):'))
bmi = weight / (height / 100) ** 2
print(f'你的身体质量指数为:{bmi:.2f}')
if 18.5 <= bmi < 24:
print('你的身材很棒!')
else:
print("你的身体似乎不太健康哦,请特别注意哦!")
当输入身高163;体重40,经过计算后BMI的值为15.06,显然这个值不在[18.5,24)范围内,顾if后面的程序代码不执行,执行else后面的程序代码;

python
# 多分支
height = float(input('身高(cm):'))
weight = float(input('体重(kg):'))
bmi = weight / (height / 100) ** 2
print(f'你的身体质量指数为:{bmi:.2f}')
if bmi < 18.5:
print('你太瘦了,要多吃肉哦!')
elif bmi < 24:
print('你的身材很棒!')
elif bmi < 27:
print('你偏胖了,要多运动,注意荤素搭配哦!')
else:
print("你太胖了,要多运动啊!")
第一组数据:当输入身高167;体重50,经过计算后BMI的值为17.93,显然这个值小于18.5,执行if后面的程序代码;

第二组数据:当输入身高175;体重68,经过计算后BMI的值为22.20,显然这个值小于24,执行第一个elif后面的程序代码;

第三组数据:当输入身高175;体重80,经过计算后BMI的值为26.12,显然这个值小于27,顾执行第二个elif后面的程序代码;

第四组数据:当输入身高175;体重89,经过计算后BMI的值为29.06,显然这个值大于27,顾执行else后面的程序代码;

1 三种基础的分支结构
1.1 单分支
单分支 :if语句(满足条件才执行)
语法:
python
if 条件:
条件成立时执行
- 条件结果为
True就执行内部代码,否则就跳过; - 注意 :
if末尾必须加上冒号 ,内部代码必须缩进(4个空格/1个Tab)
python
age = 18
if age >= 18:
print("你成年了!")
1.2 双分支
双分支 :if ... else ...(二选一执行)
语法:
python
if 条件:
条件成立执行代码
else:
条件不成立执行代码
- 条件结果为
True就执行内部代码,否则就跳到else后;
python
age = 16
if age >= 18:
print("成年人")
else:
print("未成年人")
1.3 多分支
多分支 :if ... elif ... else ...(多选一)
语法:
python
if 条件1:
代码1
elif 条件2:
代码2
elif 条件3:
代码3
else:
以上条件都不满足时执行的代码
- 如果
if条件结果为True就执行内部代码,否则就跳到elif后,如果elif结果还为假,就跳到else后,否则执行elif后的代码; elif可以写多个else可选,不是必须写
python
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
2 嵌套分支
在if/elif/else内部继续写if,用于多层判断场景。
语法:
python
if 外层条件:
if 内层条件:
代码
else:
代码
else:
代码
python
age = 20
has_id = True
if age >= 18:
if has_id:
print("允许进入")
else:
print("成年但无证件,禁止进入")
else:
print("未成年,禁止进入")
3 分支结构的应用
3.1 分段函数求值
有如下分段函数,要求输入x,计算出y的值:
y=⎩ ⎨ ⎧3x−5,x+2,5x+3,(x>1)(−1≤x≤1)(x<−1)
python
# 分段函数求值
x = float(input('请输入x的值:'))
if x > 1:
y = 3 * x - 5
elif x < -1:
y = 5 * x - 4
else:
y = x + 2
print(y)

嵌套分支结构:
python
# 嵌套分支
x = float(input('请输入x的值:'))
if x > 1:
y = 3 * x - 5
else:
if x >= -1:
y = x + 2
else:
y = 5 * x - 4
print(y)

说明 :大家可以自己感受和评判一下上面两种写法哪一种更好。在"Python 之禅"中有这么一句话:"Flat is better than nested"。之所以认为"扁平化"的代码更好,是因为代码嵌套的层次如果很多,会严重的影响代码的可读性。所以,我个人更推荐大家使用第一种写法。
3.2 百分制成绩转换成等级
要求 :如果输入的成绩在90分以上(含90分),则输出A;输入的成绩在80分到90分之间(不含90分),则输出B;输入的成绩在70分到80分之间(不含80分),则输出C;输入的成绩在60分到70分之间(不含70分),则输出D;输入的成绩在60分以下,则输出E。
python
# 百分制成绩转换成等级
score = float(input('请输入个人成绩:'))
if score >= 90:
print(f'你的个人成绩等级为A。')
elif score >= 80:
print(f'你的个人成绩等级为B。')
elif score >= 70:
print(f'你的个人成绩等级为C。')
elif score >= 60:
print(f'你的个人成绩等级为D。')
else:
print(f'你的个人成绩等级为E。')

3.3 计算三角形的周长和面积
要求:输入三条边的长度,如果能构成三角形就计算周长和面积;否则给出"不能构成三角形"的提示。
判断三角形是否成立,三角形的三条边都需要满足以下两点:
- 每条边都大于0
- 任意两边之和大于第三边,即:
a + b > ca + c > bb + c > a
python
a = float(input('输入三角形的第一条边:'))
b = float(input('输入三角形的第二条边:'))
c = float(input('输入三角形的第三条边:'))
if (a > 0 and b > 0 and c > 0) and a + b > c and a + c > b and b + c > a:
# 计算周长
p = a + b + c
print(f'三角形的周长为:{p}。')
# 计算面积,使用【海伦公式】求解
p = (a + b + c) / 2
s = (p * (p - a) * (p - b) * (p - c)) ** 0.5
print('三角形的面积为:{}。'.format(s))
print('三角形的面积为:%.2f。' %(s))
else:
print('不能构成三角形。')

四、循环结构
循环作用:重复执行一段代码 ,Python 主要有 while 循环 、for 循环,搭配跳转语句使用。
1 while循环
1.1 基本语法
python
while 条件表达式:
循环体代码
-
规则:条件为 True,就一直执行循环体;条件为 False,结束循环
-
必备要点:一定要设置条件变更 ,否则会造成死循环
-
代码块靠缩进区分
1.2 基础示例
python
# 打印1 到 8
i = 1
while i <= 8:
print(i)
i += 1

1.3 死循环
条件永远为真,代码无限执行,按 Ctrl + C 强制终止。
python
# 死循环
while True:
print('死循环执行中********')

1.4 while + else
循环正常结束(不是被 break 打断)后,会执行 else 代码。
python
i = 1
while i <= 3:
print(i)
i += 1
else:
print("循环正常结束")

2 for循环
多用于遍历序列(字符串、列表、元组、range 区间等),按元素逐个循环。
1 基本语法
python
for 变量 in 可迭代对象:
循环体代码
2 搭配 range () 函数(最常用)
range(起始值, 结束值, 步长)
-
取值范围:左闭右开,取不到结束值
-
省略起始值:默认从 0 开始
-
省略步长:默认步长为 1
python
# 0~4
for i in range(5):
print(i)
# 1~5
for i in range(1, 6):
print(i)
# 1、3、5 步长2
for i in range(1, 7, 2):
print(i)
3 遍历字符串 / 列表
遍历字符串:
python
# 遍历字符串
s = "Hello, Word! Nice to meet you!"
for i in s:
print(i, end='') # 输出后空格分隔不换行

遍历列表:
python
# 遍历列表
# 取0 到 5内的值,并对每个值求平方存于列表ss中
ss = [i ** 2 for i in range(6)]
for i in ss:
print(i, end=' ') # 0 1 4 9 16 25

4 for + else
和 while-else 规则一致:循环正常遍历完毕才执行 else:
python
for i in range(3):
print(i)
else:
print("for 循环执行完毕")

3 循环跳转语句
1 break
作用:立刻终止整个循环,跳出循环体,后续代码不再执行。
python
for i in range(1, 6):
if i == 3:
break # 遇到3,直接结束循环
print(i) # 输出:1 2

2 continue
作用:跳过当前这一次循环,直接进入下一轮循环,不会终止整体循环。
python
# continue
for i in range(1, 20, 6):
if i % 3 == 0:
continue
print(i, end=' ') # 1 7 13 19

重点区分:
break:彻底结束循环continue:只跳过当前一轮
3 嵌套的循环结构
和分支结构一样,循环结构也是可以嵌套的,也就是说在循环结构中还可以构造循环结构。
示例:九九乘法表
python
# 九九乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f'{i} * {j} = {i * j}', end=' ')
print()

4 核心注意事项
- 缩进:循环体内代码必须统一缩进,否则报错
- 死循环 :while 循环务必修改循环条件;
while True需配合break退出 - range 左闭右开 :
range(1,5)只取 1、2、3、4 - else 触发条件 :只有循环正常走完才执行,被 break 打断则不执行 else
- 嵌套循环:break/continue 只作用于当前所在的内层循环,不影响外层
for vs while 选择:
| 场景 | 推荐 |
|---|---|
| 已知遍历次数 / 有明确序列 | for |
| 条件驱动,次数不确定 | while |
| 需要索引 | for + enumerate |
| 等待某个事件/状态 | while |
循环控制关键字:
| 关键字 | 作用 | 类比 |
|---|---|---|
break |
立即终止整个循环 | 跳出 |
continue |
跳过当前迭代,进入下一次 | 跳过 |
else |
循环正常结束(未 break)后执行 | 收尾 |
补充知识点:
print(i) == print(i, end='\n')
end='':输出后不换行,紧跟下一个输出end=' ':输出后空格分隔不换行- 默认
end='\n':输出后换行
4 循环结构的应用
猜数字游戏:计算机出一个 1 到 100 之间的随机数,玩家输入自己猜的数字,计算机给出对应的提示信息"大一点"、"小一点"或"猜对了",如果玩家猜中了数字,计算机提示用户一共猜了多少次,游戏结束,否则游戏继续。
python
import random
answer = random.randrange(1, 101)
counter = 0
while True:
counter += 1
num = int(input('请输入: '))
if num < answer:
print('大一点.')
elif num > answer:
print('小一点.')
else:
print('猜对了.')
break
print(f'你一共猜了{counter}次.')
字**:
| 关键字 | 作用 | 类比 |
|---|---|---|
break |
立即终止整个循环 | 跳出 |
continue |
跳过当前迭代,进入下一次 | 跳过 |
else |
循环正常结束(未 break)后执行 | 收尾 |
补充知识点:
print(i) == print(i, end='\n')
end='':输出后不换行,紧跟下一个输出end=' ':输出后空格分隔不换行- 默认
end='\n':输出后换行
4 循环结构的应用
猜数字游戏:计算机出一个 1 到 100 之间的随机数,玩家输入自己猜的数字,计算机给出对应的提示信息"大一点"、"小一点"或"猜对了",如果玩家猜中了数字,计算机提示用户一共猜了多少次,游戏结束,否则游戏继续。
python
import random
answer = random.randrange(1, 101)
counter = 0
while True:
counter += 1
num = int(input('请输入: '))
if num < answer:
print('大一点.')
elif num > answer:
print('小一点.')
else:
print('猜对了.')
break
print(f'你一共猜了{counter}次.')
