Python格式化输出、运算符、分支&循环一、Python格式化输出
1 字符串格式化输出
1.1 +连接
在Python中,+主要有两个作用:
第一个作用:数学运算符 —> 用于整形、浮点型等数学直接进行加法操作;
第二个作用:用来进行字符串连接 —> 字符串+字符串(只能同类型相加,不同类型相加要类型转换,很麻烦 不同类型拼接在一起更便捷,就需要用到格式化输出);
所谓格式化 —> 一种更好的输出方式
可以让你更方便的输出带有变量的数据
可以让你更方便的输出一些固定格式的数据
1.2 f-str形式
- 语法:在字符串前面加
f/F,在字符串中把要输出的变量,用大括号{}包裹起来; f'{变量}……{}'
money = 99.9food = '一大堆零食'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类型:
# 群发转发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))
# 占位符str1 = '小明'str2 = '小红'str3 = 10str4 = 480.5print('%s同学在%d号这天,与%s同学相约逛昆明南屏街,两人在这天一共花费了%.1f' %(str1, str3, str2, str4))
占位符的应用:
# 占位符的应用 班级平均分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))
# formatnameId = 144658972212name = "风中的砂砾"times = "2026-06-08 05:00:00"password = 999999999999print("我的QQ号ID:{},QQ号昵称“{}”,创建时间{},QQ号密码是:{}。".format(nameId, name, times, password))
下标来识别对应的位置:
# 下标位置对应name1 = '小红'name2 = '小明'grade = 98.25print("同学{}和同学{},他们的分数是:{}。".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,使用{}来放入变量,语法最简洁,易读 | |
% - 占位符 | | |
format | 字符串中用{}占位,.format()在小括号中放入数据,比较灵活,可以通过下标来锁定数据 | 变量如果重复使用,传一次就可以,放上变量对应的下标 |
二、运算符
1 赋值运算符
把右侧值赋给左侧变量:
a = 10b = 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 | | |
a = 5a += 1# 6a -= 2# 4a *= 3# 12a /= 2# 6.0a //= 2# 3.0a %= 2# 1.0a **= 3# 1.0
2 比较运算符
用于判断两个值的大小,相等关系,结果只有True(真)和False(假):
| | | | |
|---|
== | 等于 | | | |
!= | 不等于 | | | |
> | 大于 | | | |
< | 小于 | | | |
>= | 大于等于 | | | |
<= | 小于等于 | | | |
a = 10b = 20print(a == b) # Falseprint(a != b) # Trueprint(a > b) # Falseprint(a < b) # Trueprint(a >= 10) # Trueprint(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 都代表假,其余代表真。
重要特性:短路求值
三、分支结构
Python的分支结构,是Python根据条件执行不同的代码块。
在Python中,构造分支结构最常用的是if、elif、else三个关键字。所谓关键字就是编程语言中有特殊意义的单词,很显然我们不能使用它作为变量名。当然,并不是我们每次构造分支结构,都会将这三个关键字用上。
通过例子加以说明:
例如我们要写一个身体质量指数(BMI)的计算器。身体质量指数也叫体质指数,是国际上常用的衡量人体胖瘦程度以及是否健康的一个指标,计算公式如下所示。通常认为:BMI小于18.5说明体重过轻;BMI小于24属于正常范围;BMI大于24说明体重过重;BMI大于27就属于肥胖的范围了;
说明:上面公式中的体重以千克(kg)为单位,身高以米(m)为单位。
# 单分支height = float(input('身高(cm):'))weight = float(input('体重(kg):'))bmi = weight / (height / 100) ** 2print(f'你的身体质量指数为:{bmi:.2f}')if18.5 <= bmi < 24:print('你的身材很棒!')
当输入身高162;体重65,经过计算后BMI的值为24.77,显然这个值不在[18.5,24)范围内,故if后面的程序代码就不执行;
当输入身高163;体重50,经过计算后BMI的值为18.82,显然这个值在[18.5,24)范围内,故if后面的程序代码执行;
# 双分支height = float(input('身高(cm):'))weight = float(input('体重(kg):'))bmi = weight / (height / 100) ** 2print(f'你的身体质量指数为:{bmi:.2f}')if18.5 <= bmi < 24:print('你的身材很棒!')else:print("你的身体似乎不太健康哦,请特别注意哦!")
当输入身高163;体重40,经过计算后BMI的值为15.06,显然这个值不在[18.5,24)范围内,故if后面的程序代码不执行,执行else后面的程序代码;
# 多分支height = float(input('身高(cm):'))weight = float(input('体重(kg):'))bmi = weight / (height / 100) ** 2print(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语句(满足条件才执行)
语法:
if 条件: 条件成立时执行
- 注意:
if末尾必须加上冒号,内部代码必须缩进(4个空格/1个Tab)
age = 18if age >= 18:print("你成年了!")
1.2 双分支
双分支:if ... else ...(二选一执行)
语法:
if 条件: 条件成立执行代码else: 条件不成立执行代码
- 条件结果为
True就执行内部代码,否则就跳到else后;
age = 16if age >= 18:print("成年人")else:print("未成年人")
1.3 多分支
多分支:if ... elif ... else ...(多选一)
语法:
if 条件1: 代码1elif 条件2: 代码2elif 条件3: 代码3else: 以上条件都不满足时执行的代码
- 如果
if条件结果为True就执行内部代码,否则就跳到elif后,如果elif结果还为假,就跳到else后,否则执行elif后的代码; elifelse
score = 85if score >= 90:print("优秀")elif score >= 80:print("良好")elif score >= 60:print("及格")else:print("不及格")
2 嵌套分支
在if/elif/else内部继续写if,用于多层判断场景。
语法:
if 外层条件:if 内层条件: 代码else: 代码else: 代码
age = 20has_id = Trueif age >= 18:if has_id:print("允许进入")else:print("成年但无证件,禁止进入")else:print("未成年,禁止进入")
3 分支结构的应用
3.1 分段函数求值
有如下分段函数,要求输入`x`,计算出`y`的值:# 分段函数求值x = float(input('请输入x的值:'))if x > 1: y = 3 * x - 5elif x < -1: y = 5 * x - 4else: y = x + 2print(y)
嵌套分支结构:
# 嵌套分支x = float(input('请输入x的值:'))if x > 1: y = 3 * x - 5else:if x >= -1: y = x + 2else: y = 5 * x - 4print(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。
# 百分制成绩转换成等级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 计算三角形的周长和面积
要求:输入三条边的长度,如果能构成三角形就计算周长和面积;否则给出“不能构成三角形”的提示。
判断三角形是否成立,三角形的三条边都需要满足以下两点:
a + b > ca + c > bb + c > a
a = float(input('输入三角形的第一条边:'))b = float(input('输入三角形的第二条边:'))c = float(input('输入三角形的第三条边:'))if (a > 0and b > 0and 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 基本语法
while 条件表达式: 循环体代码
1.2 基础示例
# 打印1 到 8i = 1while i <= 8: print(i) i += 1
1.3 死循环
条件永远为真,代码无限执行,按 Ctrl + C 强制终止。
# 死循环whileTrue: print('死循环执行中********')
1.4 while + else
循环正常结束(不是被 break 打断)后,会执行 else 代码。
i = 1while i <= 3: print(i) i += 1else: print("循环正常结束")
2 for循环
多用于遍历序列(字符串、列表、元组、range 区间等),按元素逐个循环。
1 基本语法
for 变量 in 可迭代对象: 循环体代码
2 搭配 range () 函数(最常用)
range(起始值, 结束值, 步长)
取值范围:左闭右开,取不到结束值
省略起始值:默认从 0 开始
省略步长:默认步长为 1
# 0~4for i inrange(5): print(i)# 1~5for i inrange(1, 6): print(i)# 1、3、5 步长2for i inrange(1, 7, 2): print(i)
3 遍历字符串 / 列表
遍历字符串:
# 遍历字符串s = "Hello, Word! Nice to meet you!"for i in s: print(i, end='') # 输出后空格分隔不换行
遍历列表:
# 遍历列表# 取0 到 5内的值,并对每个值求平方存于列表ss中ss = [i ** 2 for i inrange(6)]for i in ss: print(i, end=' ') # 0 1 4 9 16 25
4 for + else
和 while-else 规则一致:循环正常遍历完毕才执行 else:
for i inrange(3): print(i)else: print("for 循环执行完毕")
3 循环跳转语句
1 break
作用:立刻终止整个循环,跳出循环体,后续代码不再执行。
for i inrange(1, 6): if i == 3: break# 遇到3,直接结束循环 print(i) # 输出:1 2
2 continue
作用:跳过当前这一次循环,直接进入下一轮循环,不会终止整体循环。
# continuefor i inrange(1, 20, 6): if i % 3 == 0: continue print(i, end=' ') # 1 7 13 19
重点区分:
3 嵌套的循环结构
和分支结构一样,循环结构也是可以嵌套的,也就是说在循环结构中还可以构造循环结构。
示例:九九乘法表
# 九九乘法表for i inrange(1, 10): for j inrange(1, i + 1): print(f'{i} * {j} = {i * j}', end=' ') print()
4 核心注意事项
- 缩进
- 死循环while 循环务必修改循环条件;
while True 需配合 break 退出 - range 左闭右开
- else 触发条件只有循环正常走完才执行,被 break 打断则不执行 else
- 嵌套循环:break/continue 只作用于当前所在的内层循环,不影响外层
for vs while 选择:
| |
|---|
| for |
| while |
| for + enumerate |
| while |
循环控制关键字:
| | |
|---|
break | 立即终止 | |
continue | 跳过当前 | |
else | | |
补充知识点:
print(i) == print(i, end='\n')
end='':输出后不换行,紧跟下一个输出end=' ':输出后空格分隔不换行
4 循环结构的应用
猜数字游戏:计算机出一个 1 到 100 之间的随机数,玩家输入自己猜的数字,计算机给出对应的提示信息“大一点”、“小一点”或“猜对了”,如果玩家猜中了数字,计算机提示用户一共猜了多少次,游戏结束,否则游戏继续。
import randomanswer = random.randrange(1, 101)counter = 0whileTrue: counter += 1 num = int(input('请输入: '))if num < answer: print('大一点.')elif num > answer: print('小一点.')else: print('猜对了.') breakprint(f'你一共猜了{counter}次.')