写给前端的Python 教程六-条件语句、循环语句

64 阅读5分钟

你好,我是 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 中,逻辑运算符的优先级从高到低为:

  1. not - 最高优先级
  2. and - 中等优先级
  3. 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 相关的语法即可,我们下一节再见~

wx_pic.png