Python进阶教程:随机数、正则表达式与异常处理

发布于:2025-09-15 ⋅ 阅读:(23) ⋅ 点赞:(0)

在Python编程中,随机数生成、正则表达式和异常处理是三个非常重要的概念。本文将深入浅出地介绍这三个主题,帮助你掌握Python编程的核心技能。

一、随机数生成:让程序充满不确定性

随机数在程序开发中有着广泛的应用,从游戏开发到数据科学,都离不开随机数的支持。Python的random模块为我们提供了丰富的随机数生成功能。

基本随机数函数

import random

# 生成0-1之间的小数
print(random.random())

# 生成指定范围的小数
print(random.uniform(0, 4))

# 生成指定范围的整数
print(random.randint(1, 5))

# 生成指定范围和步长的数字
print(random.randrange(1, 10, 2))  # 1-10之间的奇数
print(random.randrange(2, 10, 2))  # 2-10之间的偶数

序列操作函数

# 随机选择一个元素
cards = ['梅花4', '黑桃Q', '方块K']
selected_card = random.choice(cards)
print(selected_card)

# 随机选择多个元素(不重复)
deck = ['梅花A', '梅花2', '梅花3', '梅花4', '方块A']
a, b = random.sample(deck, 2)
print(a, b)

# 随机打乱序列
items = ['梅花A', '梅花2', '梅花3', '梅花4', '方块A']
random.shuffle(items)
print(items)

实战应用:验证码生成器

让我们创建一个实用的验证码生成器,结合数字和字母:

import random

def generate_verification_code():
    code = ''
    for i in range(4):
        num = random.randint(0, 9)
        letter = chr(random.randint(65, 90))  # A-Z的ASCII码
        add = random.choice([num, letter])
        code += str(add)
    return code

# 生成验证码
verification_code = generate_verification_code()
print(verification_code)  # 输出类似:A3K8

二、正则表达式:文本处理的利器

正则表达式是处理字符串的强大工具,可以进行复杂的模式匹配、查找和替换操作。Python的re模块提供了完整的正则表达式支持。

核心函数对比

  • findall(): 查找所有匹配项,返回列表
  • search(): 搜索整个字符串,返回第一个匹配对象
  • match(): 从字符串开头匹配,更加严格

基础正则语法

import re

# 基本匹配
text = "abcdefghijklmn12345"
print(re.findall(r'jkl', text))  # ['jkl']

# 位置匹配
print(re.findall(r'^abc', text))  # ['abc'] - 以abc开头
print(re.findall(r'45$', text))   # ['45'] - 以45结尾

# 字符类匹配
print(re.findall(r'\d', text))    # 所有数字
print(re.findall(r'\D', text))    # 所有非数字
print(re.findall(r'\w', text))    # 所有字母和数字

量词和重复

text = "a ab abb abbbbb"
print(re.findall(r'ab*', text))   # a后跟0个或多个b
print(re.findall(r'ab+', text))   # a后跟1个或多个b
print(re.findall(r'ab?', text))   # a后跟0个或1个b
print(re.findall(r'ab{2,4}', text))  # a后跟2-4个b

实用案例

1. 电话号码验证

phone_pattern = r'^010-\d{8}$'
phone_number = "010-12345678"
if re.match(phone_pattern, phone_number):
    print("有效的电话号码")

2. 邮箱验证

email_pattern = r'^[a-zA-Z0-9]{4,20}@(163|126|qq|gmail)\.com$'
email = "user123@qq.com"
if re.match(email_pattern, email):
    print("有效的邮箱地址")

3. HTML内容提取

html = '<div><a href="https://www.baidu.com">去百度</a></div>'

# 提取链接文本
text_pattern = r'<a.*?>(.*?)</a>'
texts = re.findall(text_pattern, html)
print(texts)  # ['去百度']

# 提取URL
url_pattern = r'<a.*?href="(.*?)".*?>'
urls = re.findall(url_pattern, html)
print(urls)  # ['https://www.baidu.com']

高级技巧

1. 编译正则表达式

# 提高性能,特别是重复使用时
pattern = re.compile(r'\d{2}')
result = pattern.search("abc123def")
print(result.group())  # '12'

2. 使用迭代器

# 处理大量匹配时节省内存
iterator = re.finditer(r'\d{3}', 'abc123def456')
for match in iterator:
    print(match.group())  # '123', '456'

3. 贪婪与非贪婪匹配

text = "<h1>标题1</h1><h2>标题2</h2>"
greedy = re.findall(r'<.*>', text)      # 贪婪匹配
non_greedy = re.findall(r'<.*?>', text) # 非贪婪匹配
print(greedy)      # ['<h1>标题1</h1><h2>标题2</h2>']
print(non_greedy)  # ['<h1>', '</h1>', '<h2>', '</h2>']

三、异常处理:让程序更健壮

异常处理是编写健壮程序的关键技能。Python的异常处理机制让我们能够优雅地处理运行时错误。

基本异常处理结构

try:
    # 可能出错的代码
    result = 10 / 0
except ZeroDivisionError:
    # 处理特定异常
    print("不能除以零")
except Exception as e:
    # 处理其他异常
    print(f"发生了未知错误: {e}")
finally:
    # 无论是否出错都会执行
    print("清理工作")

常见异常类型

# ValueError - 值错误
try:
    int("abc")
except ValueError as e:
    print(f"值转换错误: {e}")

# KeyError - 键错误
try:
    data = {"name": "张三"}
    print(data["age"])
except KeyError as e:
    print(f"键不存在: {e}")

# IndexError - 索引错误
try:
    lst = [1, 2, 3]
    print(lst[5])
except IndexError as e:
    print(f"索引超出范围: {e}")

# FileNotFoundError - 文件不存在
try:
    with open("不存在的文件.txt", "r") as f:
        content = f.read()
except FileNotFoundError as e:
    print(f"文件未找到: {e}")

多重异常处理

def process_data(data):
    try:
        # 尝试转换数据
        number = int(data)
        # 尝试计算
        result = 100 / number
        return result
    except ValueError:
        print("输入的不是有效数字")
    except ZeroDivisionError:
        print("不能除以零")
    except Exception as e:
        print(f"其他错误: {e}")
    finally:
        print("数据处理完成")

自定义异常

class CustomError(Exception):
    def __init__(self, message):
        self.message = message
        super().__init__(self.message)

def check_balance(balance, amount):
    if balance < amount:
        raise CustomError("余额不足")
    return balance - amount

# 使用自定义异常
try:
    result = check_balance(100, 150)
except CustomError as e:
    print(f"交易失败: {e}")

实际应用示例

import random
import re

def safe_user_input():
    """安全的用户输入处理"""
    try:
        age = input("请输入您的年龄: ")
        
        # 验证输入格式
        if not re.match(r'^\d+$', age):
            raise ValueError("年龄必须是数字")
        
        age_int = int(age)
        
        # 验证年龄范围
        if age_int < 0 or age_int > 150:
            raise ValueError("年龄必须在0-150之间")
        
        return age_int
        
    except ValueError as e:
        print(f"输入错误: {e}")
        return None
    except KeyboardInterrupt:
        print("\n用户取消了输入")
        return None
    except Exception as e:
        print(f"未知错误: {e}")
        return None

# 使用示例
user_age = safe_user_input()
if user_age is not None:
    print(f"您的年龄是: {user_age}")

总结

本文介绍了Python编程中的三个重要概念:

  1. 随机数生成:掌握random模块的各种函数,能够生成不同类型的随机数据,应用于游戏、测试和数据模拟等场景。
  2. 正则表达式:学会使用re模块进行文本匹配和处理,这是数据处理和网页爬取的基础技能。
  3. 异常处理:通过try-except-finally结构编写健壮的程序,优雅地处理各种运行时错误。

这三个技能相互补充,在实际开发中经常配合使用。掌握它们将大大提升你的Python编程能力,让你能够编写更加专业和可靠的程序。

记住,编程是一个实践性很强的技能,建议你亲自动手编写和运行这些示例代码,在实践中加深理解和掌握这些重要概念。