3.1 条件语句
3.1.1 if语句
基本语法:
python
if 条件:
代码块
示例:
python
age = 18
if age >= 18:
print("你已经成年了")
# 条件为真,执行代码块
# 条件为假,跳过代码块
注意事项:
- 条件后面要有冒号
: - 代码块要缩进(通常4个空格)
- Python通过缩进来识别代码块
python
# 多条语句
score = 95
if score >= 90:
print("优秀!")
print("继续保持!")
print("你真棒!")
# 条件表达式
number = 10
if number > 0:
print("正数")
if number % 2 == 0:
print("偶数")
3.1.2 if-else语句
python
if 条件:
代码块1
else:
代码块2
示例:
python
age = 16
if age >= 18:
print("成年人")
else:
print("小孩")
# 判断奇偶
number = 7
if number % 2 == 0:
print(f"{number}是偶数")
else:
print(f"{number}是奇数")
# 判断正负
num = -5
if num >= 0:
print("非负数")
else:
print("负数")
3.1.3 if-elif-else语句
多个条件判断:
python
if 条件1:
代码块1
elif 条件2:
代码块2
elif 条件3:
代码块3
else:
代码块4
示例:
python
# 成绩等级
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"分数{score},等级{grade}")
# BMI判断
bmi = 23.5
if bmi < 18.5:
print("偏瘦")
elif bmi < 25:
print("正常")
elif bmi < 30:
print("偏胖")
else:
print("肥胖")
# 季节判断
month = 8
if month in [3, 4, 5]:
season = "春季"
elif month in [6, 7, 8]:
season = "夏季"
elif month in [9, 10, 11]:
season = "秋季"
else:
season = "冬季"
print(f"{month}月是{season}")
3.1.4 嵌套条件语句
python
# 嵌套if
age = 20
has_ticket = True
if age >= 18:
if has_ticket:
print("可以入场")
else:
print("请先购票")
else:
print("未满18岁,禁止入场")
# 登录验证
username = "admin"
password = "123456"
input_user = input("用户名:")
input_pwd = input("密码:")
if input_user == username:
if input_pwd == password:
print("登录成功!")
else:
print("密码错误!")
else:
print("用户名不存在!")
# 优化:减少嵌套层级
if input_user != username:
print("用户名不存在!")
elif input_pwd != password:
print("密码错误!")
else:
print("登录成功!")
3.1.5 三元表达式(条件表达式)
简洁的if-else写法:
python
# 语法
值1 if 条件 else 值2
# 示例
age = 20
result = "成年" if age >= 18 else "未成年"
print(result) # 成年
# 取最大值
a = 10
b = 20
max_value = a if a > b else b
print(max_value) # 20
# 取绝对值
num = -5
abs_num = num if num >= 0 else -num
print(abs_num) # 5
# 嵌套三元表达式(不推荐,可读性差)
score = 85
grade = "A" if score >= 90 else ("B" if score >= 80 else "C")
print(grade) # B
3.1.6 布尔运算与短路求值
python
# and运算
age = 25
has_license = True
if age >= 18 and has_license:
print("可以驾驶")
# or运算
is_vip = False
is_admin = True
if is_vip or is_admin:
print("有特殊权限")
# not运算
is_banned = False
if not is_banned:
print("可以发言")
# 短路求值
# and: 第一个为False,不再计算第二个
# or: 第一个为True,不再计算第二个
x = 0
y = 10
result = x and y # x为0(False),返回x
print(result) # 0
result = x or y # x为0(False),返回y
print(result) # 10
result = y and x # y为10(True),返回x
print(result) # 0
# 实际应用:避免除零错误
divisor = 0
result = divisor != 0 and 100 / divisor # divisor为0,不执行除法
print(result) # False
3.2 循环语句
3.2.1 while循环
基本语法:
python
while 条件:
循环体
示例:
python
# 基本while循环
count = 1
while count <= 5:
print(f"第{count}次循环")
count += 1
# 输出:
# 第1次循环
# 第2次循环
# 第3次循环
# 第4次循环
# 第5次循环
# 累加求和
n = 100
total = 0
i = 1
while i <= n:
total += i
i += 1
print(f"1到{n}的和为{total}") # 5050
# 用户输入验证
password = ""
while password != "123456":
password = input("请输入密码:")
print("密码正确!")
3.2.2 for循环
基本语法:
python
for 变量 in 序列:
循环体
示例:
python
# 遍历字符串
for char in "Python":
print(char)
# P
# y
# t
# h
# o
# n
# 遍历列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(f"我喜欢{fruit}")
# 遍历字典
person = {"name": "Alice", "age": 25, "city": "Beijing"}
# 遍历键
for key in person:
print(key)
# 遍历键值对
for key, value in person.items():
print(f"{key}: {value}")
# 遍历值
for value in person.values():
print(value)
3.2.3 range()函数
range()生成数字序列:
python
# range(stop) - 从0到stop-1
for i in range(5):
print(i, end=" ") # 0 1 2 3 4
print()
# range(start, stop) - 从start到stop-1
for i in range(1, 6):
print(i, end=" ") # 1 2 3 4 5
print()
# range(start, stop, step) - 指定步长
for i in range(0, 10, 2):
print(i, end=" ") # 0 2 4 6 8
print()
# 倒序
for i in range(10, 0, -1):
print(i, end=" ") # 10 9 8 7 6 5 4 3 2 1
print()
# 生成列表
numbers = list(range(1, 11))
print(numbers) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 应用:累加求和
total = 0
for i in range(1, 101):
total += i
print(f"1到100的和:{total}") # 5050
# 九九乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j}", end="\t")
print()
3.2.4 break语句
break用于跳出循环:
python
# 找到第一个偶数就退出
numbers = [1, 3, 5, 8, 9, 10]
for num in numbers:
if num % 2 == 0:
print(f"找到偶数:{num}")
break
# 密码验证(最多3次机会)
password = "123456"
attempts = 0
while attempts < 3:
input_pwd = input("请输入密码:")
if input_pwd == password:
print("登录成功!")
break
else:
attempts += 1
print(f"密码错误!还有{3 - attempts}次机会")
else:
print("密码错误次数过多,账号已锁定!")
# 查找
students = ["Alice", "Bob", "Charlie", "David"]
search_name = "Charlie"
for student in students:
if student == search_name:
print(f"找到了:{student}")
break
else:
print("未找到")
3.2.5 continue语句
continue跳过本次循环,继续下一次:
python
# 只打印奇数
for i in range(1, 11):
if i % 2 == 0:
continue
print(i, end=" ") # 1 3 5 7 9
print()
# 跳过某些值
for i in range(1, 11):
if i == 5:
continue
print(i, end=" ") # 1 2 3 4 6 7 8 9 10
print()
# 筛选数据
scores = [85, 92, 78, 65, 88, 55, 90]
for score in scores:
if score < 60:
continue
print(f"及格分数:{score}")
3.2.6 循环的else子句
循环正常结束(没有break)时执行else:
python
# while...else
count = 0
while count < 5:
print(count)
count += 1
else:
print("循环正常结束")
# for...else
numbers = [1, 3, 5, 7, 9]
for num in numbers:
if num % 2 == 0:
print("找到偶数")
break
else:
print("没有偶数") # 会执行
# 实际应用:查找
def find_prime(n):
"""判断是否为质数"""
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
else:
return True
print(find_prime(17)) # True
print(find_prime(18)) # False
3.2.7 嵌套循环
python
# 二层循环
for i in range(1, 4):
for j in range(1, 4):
print(f"i={i}, j={j}")
# 打印矩形
for i in range(5):
for j in range(10):
print("*", end="")
print()
# 打印三角形
for i in range(1, 6):
for j in range(i):
print("*", end="")
print()
# 九九乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j:2d}", end=" ")
print()
# 双重循环的break
for i in range(3):
for j in range(3):
if i == 1 and j == 1:
break # 只跳出内层循环
print(f"({i},{j})", end=" ")
print()
# 完全跳出双重循环
found = False
for i in range(3):
for j in range(3):
if i == 1 and j == 1:
found = True
break
if found:
break
print(f"外层循环{i}")
3.2.8 while vs for
何时使用while,何时使用for?
python
# 使用for:已知循环次数
# 遍历序列
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
# 已知范围
for i in range(10):
print(i)
# 使用while:不知道循环次数
# 条件循环
count = 0
while count < 100:
count += 1
if some_condition: # 某个条件满足就退出
break
# 无限循环(配合break)
while True:
command = input("输入命令(quit退出):")
if command == "quit":
break
process(command)
3.3 循环优化技巧
3.3.1 enumerate()
同时获取索引和值:
python
fruits = ["apple", "banana", "cherry"]
# 不推荐
for i in range(len(fruits)):
print(f"{i}: {fruits[i]}")
# 推荐
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
# 指定起始索引
for index, fruit in enumerate(fruits, start=1):
print(f"{index}: {fruit}")
# 1: apple
# 2: banana
# 3: cherry
3.3.2 zip()
同时遍历多个序列:
python
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
cities = ["Beijing", "Shanghai", "Guangzhou"]
# 不推荐
for i in range(len(names)):
print(f"{names[i]}, {ages[i]}, {cities[i]}")
# 推荐
for name, age, city in zip(names, ages, cities):
print(f"{name}, {age}, {city}")
# zip长度不一致时,以最短的为准
a = [1, 2, 3, 4, 5]
b = ["a", "b", "c"]
for x, y in zip(a, b):
print(x, y)
# 1 a
# 2 b
# 3 c
3.3.3 reversed()
反向遍历:
python
# 列表反转
numbers = [1, 2, 3, 4, 5]
for num in reversed(numbers):
print(num, end=" ") # 5 4 3 2 1
# 字符串反转
for char in reversed("Python"):
print(char, end="") # nohtyP
3.3.4 列表推导式(预览)
python
# 传统方式
squares = []
for i in range(1, 11):
squares.append(i ** 2)
# 列表推导式(后续章节详解)
squares = [i ** 2 for i in range(1, 11)]
print(squares)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
3.4 常见循环模式
3.4.1 累加求和
python
# 1+2+3+...+100
total = 0
for i in range(1, 101):
total += i
print(total) # 5050
# 使用sum()函数
total = sum(range(1, 101))
print(total) # 5050
3.4.2 累乘
python
# 计算阶乘 5! = 5×4×3×2×1
n = 5
result = 1
for i in range(1, n + 1):
result *= i
print(f"{n}! = {result}") # 120
3.4.3 查找
python
# 查找元素
numbers = [10, 20, 30, 40, 50]
target = 30
for i, num in enumerate(numbers):
if num == target:
print(f"找到{target},索引为{i}")
break
else:
print(f"未找到{target}")
3.4.4 计数
python
# 统计偶数个数
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
count = 0
for num in numbers:
if num % 2 == 0:
count += 1
print(f"偶数个数:{count}") # 5
3.4.5 最值
python
# 找最大值
numbers = [45, 23, 67, 89, 12, 56]
max_value = numbers[0]
for num in numbers:
if num > max_value:
max_value = num
print(f"最大值:{max_value}") # 89
# 使用max()函数
max_value = max(numbers)
print(max_value) # 89
3.5 实战案例
案例1:猜数字游戏
python
import random
# 生成1-100的随机数
secret_number = random.randint(1, 100)
attempts = 0
max_attempts = 7
print("我想了一个1-100的数字,你能猜到吗?")
print(f"你有{max_attempts}次机会")
while attempts < max_attempts:
guess = int(input("请输入你猜的数字:"))
attempts += 1
if guess == secret_number:
print(f"恭喜你,猜对了!你用了{attempts}次")
break
elif guess < secret_number:
print("太小了!")
else:
print("太大了!")
print(f"还剩{max_attempts - attempts}次机会")
else:
print(f"游戏结束!正确答案是{secret_number}")
案例2:斐波那契数列
python
# 打印前20项斐波那契数列
# 1, 1, 2, 3, 5, 8, 13, 21, ...
n = 20
a, b = 1, 1
print(a, end=" ")
print(b, end=" ")
for i in range(n - 2):
c = a + b
print(c, end=" ")
a, b = b, c
案例3:素数判断
python
def is_prime(n):
"""判断是否为质数"""
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
# 打印100以内的所有质数
print("100以内的质数:")
for num in range(2, 101):
if is_prime(num):
print(num, end=" ")
案例4:99乘法表
python
# 完整版
for i in range(1, 10):
for j in range(1, 10):
print(f"{i}×{j}={i*j:2d}", end=" ")
print()
print()
# 下三角
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j:2d}", end=" ")
print()
案例5:统计字符
python
text = "Hello, World! Python is awesome!"
# 统计各类字符数量
letters = 0
digits = 0
spaces = 0
others = 0
for char in text:
if char.isalpha():
letters += 1
elif char.isdigit():
digits += 1
elif char.isspace():
spaces += 1
else:
others += 1
print(f"字母:{letters}")
print(f"数字:{digits}")
print(f"空格:{spaces}")
print(f"其他:{others}")
3.6 参考资料
官方文档
- 控制流:https://docs.python.org/zh-cn/3/tutorial/controlflow.html
- 复合语句:https://docs.python.org/zh-cn/3/reference/compound_stmts.html
学习资源
- 菜鸟教程-条件语句:https://www.runoob.com/python3/python3-conditional-statements.html
- 菜鸟教程-循环语句:https://www.runoob.com/python3/python3-loop.html