控制流程
咱们前面学了变量和变量类型,那么怎么让代码根据不同的情况执行不同的逻辑,怎么重复执行某段代码呢,这一篇就瞅瞅 Python 中的控制流程。
1. print() 的更多用法
print() 不仅可以输出单个值,还能一次输出多个值,并通过 sep 和 end 控制分隔符和结尾。
# 一次输出多个值,默认用空格分隔
print('hello', 'world') # hello world
# 用 sep 指定分隔符
print('a', 'b', 'c', sep='-') # a-b-c
# 用 end 指定结尾,默认是换行符 \n
print('hello', end=' ')
print('world') # 输出 hello world这些参数在打印日志、格式化输出时非常实用。
2. 逻辑运算符
什么是逻辑运算符。
逻辑运算符用于连接多个条件(布尔表达式),返回的结果依旧是布尔值 True 或 False。Python 中常见的逻辑运算符有 and(与)、or(或)、not(非)三种。
| 运算符 | 描述 | 示例 | 结果 |
|---|---|---|---|
| and | 逻辑与 | True and False | 两个条件都成立才为 True,否则 False |
| or | 逻辑或 | True or False | 有一个条件成立即为 True |
| not | 逻辑非 | not (3 > 2) | 对条件结果取反 |
注意优先级:
not>and>or,可以通过加括号让逻辑更清晰。
# 逻辑与 and:两个条件都为True时结果才为True
# True and True -> True
print(3 > 2 and 5 > 3)
# True and False -> False
print(3 > 2 and 5 < 3)
# 逻辑或 or:有一个条件为True结果就为True
# True or False -> True
print(3 > 2 or 5 < 3)
# False or False -> False
print(3 < 2 or 5 < 3)
# 逻辑非 not:对结果取反
# not True -> False
print(not (3 > 2))
# not False -> True
print(not (3 < 2))
# 组合使用
# (3 > 2 and 5 > 3) 为 True,True or False -> True
print(3 > 2 and 5 > 3 or 5 < 3)
# not False 为 True
print(not (3 < 2 and 5 > 3))3. if判断
什么是 if 判断。
if 判断就是根据条件的真假决定执行哪一段代码,条件为 True 执行 if 子句内的代码,为 False 则跳过。
3.1 单分支
# 输入用户名密码登录的例子
user_name = input('请输入你的用户名: ')
password = input('请输入你的密码: ')
# 单分支 if,条件成立时执行
if user_name == 'juzicoding' and password == '123456':
print('登录成功!')3.2 双分支
user_name = input('请输入你的用户名: ')
password = input('请输入你的密码: ')
# 双分支 if-else,条件成立执行 if,否则执行 else
if user_name == 'juzicoding' and password == '123456':
print('登录成功!')
else:
print('用户名或密码错误!')3.3 多分支
# 举个成绩评级的例子
score = int(input('请输入你的成绩: '))
# if-elif-else 多分支判断,从上往下依次匹配,满足条件即执行对应分支后跳出
if score >= 90:
print('成绩优秀!')
elif score >= 80:
print('成绩良好!')
elif score >= 60:
print('成绩及格!')
else:
print('成绩不及格,需要加油哦~')3.4 if 嵌套
if 嵌套就是在 if 子句中再嵌套一层 if,用于处理更复杂的判断。
# 判断用户是否可以进入网吧的例子
age = int(input('请输入你的年龄: '))
if age >= 18:
# 嵌套if继续判断
has_id = input('你带身份证了吗(yes/no): ')
if has_id == 'yes':
print('欢迎进入网吧!')
else:
print('请先去办理身份证再来~')
else:
print('未成年禁止进入网吧!')4. for循环
什么是 for 循环。
for 循环用于遍历一个序列(字符串、列表、元组、字典、集合等),将序列中的元素依次取出执行循环体,适用于循环次数已知的情况。
4.1 遍历序列
# 遍历字符串
str1 = 'juzicoding'
for char in str1:
# j u z i c o d i n g 每个字符各占一行
print(char)
print('--------------华丽的分割线--------------')
# 遍历列表
list1 = ['juzicoding', 'jay', 'tom']
for name in list1:
# juzicoding jay tom 每个元素各占一行
print(name)
print('--------------华丽的分割线--------------')
# 遍历字典
user_dict = {'name': 'juzicoding', 'age': 18, 'sex': '男'}
# 直接遍历字典取到的是key
for key in user_dict:
# name age sex
print(key)
print('--------------华丽的分割线--------------')
# 通过items()遍历字典的key和value
for key, value in user_dict.items():
# name: juzicoding
# age: 18
# sex: 男
print(f'{key}: {value}')4.2 range() 函数
for 循环经常和 range() 函数搭配使用,range(start, stop, step) 生成一个从 start 开始到 stop 结束(顾头不顾尾)的数字序列,步长为 step,默认为 1。
# range(stop):从0开始到stop-1
for i in range(5):
# 0 1 2 3 4
print(i)
print('--------------华丽的分割线--------------')
# range(start, stop):从start开始到stop-1
for i in range(1, 6):
# 1 2 3 4 5
print(i)
print('--------------华丽的分割线--------------')
# range(start, stop, step):从start开始到stop-1,步长为step
for i in range(0, 10, 2):
# 0 2 4 6 8
print(i)
print('--------------华丽的分割线--------------')
# 步长为负数可以实现倒序
for i in range(5, 0, -1):
# 5 4 3 2 1
print(i)4.3 break 和 continue
break 用于跳出整个循环(结束循环),continue 用于跳过本次循环继续下一次循环。
# break 跳出整个循环
# 当i等于3时跳出循环,所以只打印 0 1 2
for i in range(10):
if i == 3:
break
print(i)
print('--------------华丽的分割线--------------')
# continue 跳过本次循环
# 当i等于3时跳过本次循环,所以不打印3
for i in range(6):
if i == 3:
continue
# 0 1 2 4 5
print(i)4.4 for...else 语法
for 循环可以和 else 搭配使用,当循环正常结束(没有 break)时执行 else 子句。
# 循环正常结束后执行else
for i in range(3):
print(f'循环第{i + 1}次')
else:
# 循环正常结束
print('循环正常结束!')
print('--------------华丽的分割线--------------')
# break跳出后else不会执行
for i in range(5):
if i == 3:
break
print(f'循环第{i + 1}次')
else:
print('这段不会执行')5. while循环
什么是 while 循环。
while 循环在条件成立时会一直循环执行循环体,直到条件不成立跳出循环,适用于循环次数未知的情况。
5.1 基本使用
# 输出5次 hello
i = 0
while i < 5:
# 第1次hello ~ 第5次hello
print(f'第{i + 1}次hello')
# 注意:循环体内一定要有改变条件判断的代码,否则会死循环
i += 15.2 break 和 continue
while 循环中同样可以使用 break 和 continue 控制循环。
# break 跳出整个循环
i = 0
while i < 10:
if i == 3:
break
# 0 1 2
print(i)
i += 1
print('--------------华丽的分割线--------------')
# continue 跳过本次循环
i = 0
while i < 6:
i += 1
if i == 3:
continue
# 1 2 4 5 6
print(i)5.3 while...else 语法
while 循环同样可以和 else 搭配,循环正常结束(条件为 False 自然结束)时执行 else,break 跳出则不执行。
# 累加1到100求和
i = 1
total = 0
while i <= 100:
total += i
i += 1
# 5050
print(f'1到100累加的结果为: {total}')
print('--------------华丽的分割线--------------')
# while...else
i = 1
while i <= 3:
print(f'第{i}次循环')
i += 1
else:
# 循环条件不满足正常结束时会执行
print('while循环正常结束')5.4 死循环
死循环就是循环条件永远为 True,循环体会一直执行。一般在实际开发中不推荐使用死循环,特殊场景比如服务器接收客户端请求、定时任务等场景会用到,使用时一定要有 break 等退出条件。
# 死循环示例(请勿长时间运行)
# while True:
# print('这段代码会一直执行下去...')
# 实际使用场景 - 简单登录验证
correct_username = 'juzicoding'
correct_password = '123456'
while True:
user_name = input('请输入用户名: ')
password = input('请输入密码: ')
if user_name == correct_username and password == correct_password:
print('登录成功!')
break
else:
print('用户名或密码错误,请重新输入!')6. 循环练习
最后来几个小练习巩固一下。
6.1 1到100偶数求和
# 方法1:步长为2遍历
total = 0
for i in range(0, 101, 2):
total += i
# 2550
print(f'1到100偶数和为: {total}')
# 方法2:使用if判断
total = 0
for i in range(1, 101):
if i % 2 == 0:
total += i
# 2550
print(f'1到100偶数和为: {total}')6.2 猜数字游戏
import random
target = random.randint(1, 100)
count = 0
while True:
guess = int(input('请输入你猜的数字(1-100): '))
count += 1
if guess > target:
print('猜大了~')
elif guess < target:
print('猜小了~')
else:
print(f'恭喜你猜中了!答案是{target},一共猜了{count}次')
break6.3 打印九九乘法表
# 外层循环控制行,内层循环控制列
for i in range(1, 10):
for j in range(1, i + 1):
# 打印一行,end=''表示不换行
print(f'{j} * {i} = {i * j}', end='\t')
# 每行结束换行
print()7. 模式匹配
Python 3.10 引入了 match...case 语句,用于对数据结构进行模式匹配。它看起来有点像其他语言里的 switch,但功能更强大,可以匹配列表、字典、对象等。
7.1 基本用法
score = 85
match score // 10:
case 10 | 9:
print('优秀')
case 8:
print('良好')
case 7:
print('中等')
case 6:
print('及格')
case _:
print('不及格')7.2 匹配列表
def match_list(value):
match value:
case [single]:
print(f'只有一个元素: {single}')
case [first, *rest]:
print(f'第一个元素: {first}, 其余: {rest}')
case []:
print('空列表')
match_list([1]) # 只有一个元素: 1
match_list([1, 2, 3]) # 第一个元素: 1, 其余: [2, 3]7.3 匹配字典
def match_dict(user):
match user:
case {'name': str(name), 'age': int(age)}:
print(f'姓名: {name}, 年龄: {age}')
case {'name': str(name)}:
print(f'姓名: {name}')
case _:
print('未知格式')
match_dict({'name': 'juzicoding', 'age': 18})
# 姓名: juzicoding, 年龄: 18模式匹配让代码意图更清晰,但目前只有 Python 3.10+ 支持,使用前请确认运行环境版本。
控制流程基本就这些了,多写多练熟能生巧~