控制流程
控制流程
咱们前面学了变量和变量类型,那么怎么让代码根据不同的情况执行不同的逻辑,怎么重复执行某段代码呢,这一篇就瞅瞅 Python 中的控制流程。
1. 逻辑运算符
什么是逻辑运算符。
逻辑运算符用于连接多个条件(布尔表达式),返回的结果依旧是布尔值 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))2. if判断
什么是 if 判断。
if 判断就是根据条件的真假决定执行哪一段代码,条件为 True 执行 if 子句内的代码,为 False 则跳过。
2.1 单分支
# 输入用户名密码登录的例子
user_name = input('请输入你的用户名: ')
password = input('请输入你的密码: ')
# 单分支 if,条件成立时执行
if user_name == 'itwxe' and password == '123456':
print('登录成功!')2.2 双分支
user_name = input('请输入你的用户名: ')
password = input('请输入你的密码: ')
# 双分支 if-else,条件成立执行 if,否则执行 else
if user_name == 'itwxe' and password == '123456':
print('登录成功!')
else:
print('用户名或密码错误!')2.3 多分支
# 举个成绩评级的例子
score = int(input('请输入你的成绩: '))
# if-elif-else 多分支判断,从上往下依次匹配,满足条件即执行对应分支后跳出
if score >= 90:
print('成绩优秀!')
elif score >= 80:
print('成绩良好!')
elif score >= 60:
print('成绩及格!')
else:
print('成绩不及格,需要加油哦~')2.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('未成年禁止进入网吧!')3. for循环
什么是 for 循环。
for 循环用于遍历一个序列(字符串、列表、元组、字典、集合等),将序列中的元素依次取出执行循环体,适用于循环次数已知的情况。
3.1 遍历序列
# 遍历字符串
str1 = 'itwxe'
for char in str1:
# i t w x e 每个字符各占一行
print(char)
print('--------------华丽的分割线--------------')
# 遍历列表
list1 = ['itwxe', 'jay', 'tom']
for name in list1:
# itwxe jay tom 每个元素各占一行
print(name)
print('--------------华丽的分割线--------------')
# 遍历字典
user_dict = {'name': 'itwxe', '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: itwxe
# age: 18
# sex: 男
print(f'{key}: {value}')3.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)3.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)3.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('这段不会执行')4. while循环
什么是 while 循环。
while 循环在条件成立时会一直循环执行循环体,直到条件不成立跳出循环,适用于循环次数未知的情况。
4.1 基本使用
# 输出5次 hello
i = 0
while i < 5:
# 第1次hello ~ 第5次hello
print(f'第{i + 1}次hello')
# 注意:循环体内一定要有改变条件判断的代码,否则会死循环
i += 14.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)4.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循环正常结束')4.4 死循环
死循环就是循环条件永远为 True,循环体会一直执行。一般在实际开发中不推荐使用死循环,特殊场景比如服务器接收客户端请求、定时任务等场景会用到,使用时一定要有 break 等退出条件。
# 死循环示例(请勿长时间运行)
# while True:
# print('这段代码会一直执行下去...')
# 实际使用场景 - 简单登录验证
correct_username = 'itwxe'
correct_password = '123456'
while True:
user_name = input('请输入用户名: ')
password = input('请输入密码: ')
if user_name == correct_username and password == correct_password:
print('登录成功!')
break
else:
print('用户名或密码错误,请重新输入!')5. 循环练习
最后来几个小练习巩固一下。
5.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}')5.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}次')
break5.3 打印九九乘法表
# 外层循环控制行,内层循环控制列
for i in range(1, 10):
for j in range(1, i + 1):
# 打印一行,end=''表示不换行
print(f'{j} * {i} = {i * j}', end='\t')
# 每行结束换行
print()控制流程基本就这些了,多写多练熟能生巧~