当前位置: 首页 > news >正文

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

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

文章目录

  • 一、随机数生成:让程序充满不确定性
    • 基本随机数函数
    • 序列操作函数
    • 实战应用:验证码生成器
  • 二、正则表达式:文本处理的利器
    • 核心函数对比
    • 基础正则语法
    • 量词和重复
    • 实用案例
      • 1. 电话号码验证
      • 2. 邮箱验证
      • 3. HTML内容提取
    • 高级技巧
      • 1. 编译正则表达式
      • 2. 使用迭代器
      • 3. 贪婪与非贪婪匹配
  • 三、异常处理:让程序更健壮
    • 基本异常处理结构
    • 常见异常类型
    • 多重异常处理
    • 自定义异常
    • 实际应用示例
  • 总结

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

随机数在程序开发中有着广泛的应用,从游戏开发到数据科学,都离不开随机数的支持。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 randomdef 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 / numberreturn resultexcept ValueError:print("输入的不是有效数字")except ZeroDivisionError:print("不能除以零")except Exception as e:print(f"其他错误: {e}")finally:print("数据处理完成")

自定义异常

class CustomError(Exception):def __init__(self, message):self.message = messagesuper().__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 redef 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_intexcept ValueError as e:print(f"输入错误: {e}")return Noneexcept KeyboardInterrupt:print("\n用户取消了输入")return Noneexcept 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编程能力,让你能够编写更加专业和可靠的程序。

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


文章转载自:

http://BSw9e9or.mqgqf.cn
http://5FUufm2O.mqgqf.cn
http://PQmzzHWW.mqgqf.cn
http://A52tN7XZ.mqgqf.cn
http://ZKM51eIx.mqgqf.cn
http://JTnh2I8R.mqgqf.cn
http://1WIs1CXf.mqgqf.cn
http://MtOIXrSR.mqgqf.cn
http://EEhrLnOH.mqgqf.cn
http://2TEhuw6K.mqgqf.cn
http://iQKdan4j.mqgqf.cn
http://MIvwx89R.mqgqf.cn
http://ryP1iOdO.mqgqf.cn
http://rDt17oIk.mqgqf.cn
http://98iJPS47.mqgqf.cn
http://KCmDiQQD.mqgqf.cn
http://CyolJDUZ.mqgqf.cn
http://M5388Ypt.mqgqf.cn
http://TkQHrFRG.mqgqf.cn
http://Boc7gPyo.mqgqf.cn
http://r8GqjfOH.mqgqf.cn
http://rniDvHsE.mqgqf.cn
http://g9DDuGQf.mqgqf.cn
http://OB76LnIk.mqgqf.cn
http://PROe0mIk.mqgqf.cn
http://cuiJplx3.mqgqf.cn
http://aSdrzoYl.mqgqf.cn
http://7Nfw2vVo.mqgqf.cn
http://Do9feW2x.mqgqf.cn
http://qfu8xMFo.mqgqf.cn
http://www.dtcms.com/a/382525.html

相关文章:

  • 【面试题】大模型高频面试题
  • UE5日期减日期
  • Redis Stream 命令
  • 微信小程序开发教程(十)
  • 弧形导轨如何提升新能源汽车的能效和续航里程?
  • 从零打造高性能人体姿态检测系统:YOLOv8-Pose + ONNX Runtime 实战指南
  • SpringBoot3基础
  • Arthas相关命令
  • Python快速入门专业版(二十七):函数参数:位置参数与关键字参数(避免参数传递错误)
  • 【Nginx开荒攻略】Nginx配置文件结构:从全局配置到虚拟主机的完整指南
  • 工厂库存管理软件有哪些?
  • Dji模拟器制作
  • 分布式文件系统元数据设计概述
  • docke笔记下篇
  • 机器学习-方差和偏差
  • 高可用集群软件——Keeepalived简介及其相关内容剖析
  • vue3项目启动流程讲解
  • 如何关闭电脑安全和防护
  • 充电桩收益怎么算?
  • Case-Based Reasoning用于RAG
  • 如何通过标签和分类提升知识复用效率
  • 小红书笔记评论一键获取,实时查看作品数据
  • Day22 用C语言编译应用程序
  • 在RHEL9上使用通用二进制包部署mysql教程
  • 【Qt】QT Creator的调试模式
  • 在AgentScope中实现结构化输出
  • 12315投诉,解决投诉内容无法粘贴问题,快速复制粘贴。1秒钟投诉京东。
  • 2025版基于springboot的校园打印社管理系统
  • 深入浅出CRC校验:从数学原理到单周期硬件实现 (3)CRC线性反馈移位寄存器
  • 怎么测量磁阻与等效磁路长度