你好,我是 hockor,今天我们继续 Python 的学习,今天我们的主题是条件语句和循环语句。
条件语句
条件语句是程序逻辑控制的基础,JavaScript和Python虽然都属于高级编程语言,但在条件语句和循环语句的设计哲学上存在显著差异。
JavaScript更注重表达式的灵活性和函数式编程特性,而Python则强调代码的可读性和简洁性。我们直接通过代码来认识一下。
基本 if 语句
Python 的 if 语句语法与 JavaScript 类似:
if condition:
print("条件为真")
对比 JavaScript:
if (condition) {
console.log("条件为真");
}
主要区别:
- Python 使用冒号(:)和缩进来定义代码块,而不是花括号{}
- Python 不需要在条件周围加括号()
- Python 使用缩进来表示代码块的层级关系
if-else 语句
if age >= 18:
print("成年人")
else:
print("未成年人")
if-elif-else 语句
Python 使用 elif 关键字,相当于 JavaScript 中的 else if:
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
链式比较运算符
Python 支持链式比较运算符,可以直接写像 5 < x < 10 这样的表达式。这种写法更接近数学表达式,使代码更简洁易读。
x = 7
if 5 < x < 10:
print("x 在 5 到 10 之间")
而在 JavaScript 中,必须使用逻辑运算符 && 来组合两个比较:
const x = 7;
if (x > 5 && x < 10) {
console.log("x 在 5 到 10 之间");
}
这是 Python 相对于 JavaScript 的一个语法优势,可以让代码更接近自然语言表达(😌舒服多了)
三元运算符
Python 的三元运算符语法与 JavaScript 不同:
result = "成年" if age >= 18 else "未成年"
对比 JavaScript:
const result = age >= 18 ? "成年" : "未成年";
这个需要熟悉一下~
逻辑运算符
Python 使用英文单词而不是符号作为逻辑运算符:
- and(对应 JS 中的 &&)
- or(对应 JS 中的 ||)
- not(对应 JS 中的 !)
if age >= 18 and has_id:
print("可以进入")
if not is_closed:
print("营业中")
让我们来看一个更复杂的例子,综合使用多个条件语句和逻辑运算符:
# 一个简单的用户认证系统
def check_access(age, membership_type, login_time, is_admin):
# 检查是否在营业时间(9:00-22:00)
if not (9 <= login_time.hour < 22):
return "非营业时间"
# 管理员可以随时访问
if is_admin:
return "管理员访问granted"
# 年龄检查和会员等级检查
if age < 18:
if membership_type == "junior":
if 14 <= age < 18:
return "青少年会员可访问"
else:
return "年龄太小,不可访问"
else:
return "未成年不可访问"
else:
if membership_type in ["gold", "platinum"]:
return "高级会员完全访问"
elif membership_type == "regular" and login_time.hour < 20:
return "普通会员白天访问"
else:
return "访问受限"
# 使用示例
from datetime import datetime
current_time = datetime.now()
result = check_access(
age=16,
membership_type="junior",
login_time=current_time,
is_admin=False
)
在这个例子中我们可以看到:
- 多层嵌套的条件判断
- 复合条件(使用 and/or)
- 在条件中使用 in 运算符检查成员关系
- 使用 not 进行条件取反
- 结合实际业务逻辑的条件判断
在 Python 中,逻辑运算符的优先级从高到低为:
- not - 最高优先级
- and - 中等优先级
- or - 最低优先级
例如:
# 这个表达式
if not a and b or c:
print("something")
# 等价于
if ((not a) and b) or c:
print("something")
为了避免混淆和提高代码可读性,建议在复杂的逻辑表达式中使用括号明确表示运算优先级。
pass 语句
Python 的空语句,用作占位符:
if condition:
pass # 暂时不做任何事
else:
print("else branch")
match 语句
js 中大家都有用过 switch 语句,但是很抱歉,在 Python 3.10 之前是没有类似这种写法的,从 Python 3.10 开始,Python 引入了 match 语句,这是类似于其他语言中 switch 语句的模式匹配特性:
def get_type(value):
match value:
case 0:
return "零"
case 1:
return "一"
case 2:
return "二"
case _:
return "其他数字"
match 语句比传统的 switch 更强大,支持多种模式匹配:
# 更复杂的模式匹配示例
def analyze_point(point):
match point:
case (0, 0):
return "原点"
case (0, y):
return f"Y轴上的点 {y}"
case (x, 0):
return f"X轴上的点 {x}"
case (x, y):
return f"点 ({x}, {y})"
case _:
return "不是有效的点"
与 JavaScript 的 switch 语句相比,Python 的 match 语句有以下特点:
- 不需要 break 语句,每个 case 自动终止
- 支持更复杂的模式匹配,包括解构和类型匹配
- 使用 case _ 作为默认情况(相当于 JS 中的 default)
- 可以在模式中使用变量捕获和条件守卫
注意:如果你使用的 Python 版本低于 3.10,需要使用 if-elif-else 结构来实现类似的功能。
真值判断
Python 中的假值包括:
- False
- None(相当于 JS 中的 null)
- 0
- 空字符串 ""
- 空列表 []
- 空元组 ()
- 空字典 {}
其他所有值都被视为真值。这一点与 JavaScript 类似,但 Python 没有 undefined 值。
循环语句
Python 提供了两种主要的循环结构:for 循环和 while 循环。让我们详细了解它们的用法。
for 循环
Python 的 for 循环主要用于遍历序列(如列表、元组、字符串)或其他可迭代对象:
# 遍历列表
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(fruit)
# 使用 range() 生成数字序列
for i in range(5):
print(i) # 输出 0 到 4
while 循环
while 循环会在条件为真时重复执行代码块:
# 基本 while 循环
count = 0
while count < 5:
print(count)
count += 1
# 使用 break 的 while 循环
while True:
user_input = input("请输入指令(输入'quit'退出):")
if user_input == 'quit':
break
循环控制
Python 提供了几个用于控制循环的关键字:
- break - 立即退出循环
- continue - 跳过本次循环的剩余部分,进入下一次循环
- else - 当循环正常完成时执行(未被 break 中断)
# 带 else 子句的循环
for i in range(5):
if i == 3:
break
print(i)
else:
print("循环正常完成") # 由于 break,这行不会执行
ok,今天整体的内容比较简单,我们在 JS 基础上只需要熟悉下 Python 相关的语法即可,我们下一节再见~