初级程序员实战教程(五)

简介: 教程来源 https://vrhyh.cn/ 本教程涵盖Python核心进阶主题:文件读写(文本/CVS/JSON)、异常处理(捕获、抛出、断言)、面向对象编程(类、属性装饰器、类/静态方法、继承、魔术方法),代码简洁规范,适合巩固实战能力。

九. 文件与数据持久化

9.1 读写文本文件

# 写
with open("test.txt", "w", encoding="utf-8") as f:
    f.write("第一行\n")
    f.write("第二行\n")

# 追加
with open("test.txt", "a", encoding="utf-8") as f:
    f.write("追加的行\n")

# 读所有
with open("test.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

# 按行读(推荐)
with open("test.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())

9.2 CSV 文件操作

import csv

# 写入
data = [["姓名", "年龄"], ["张三", 25], ["李四", 30]]
with open("people.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerows(data)

# 读取
with open("people.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

9.3 JSON 数据交换格式

import json

# 字典转 JSON 字符串
person = {"name": "王五", "age": 28, "hobby": ["读书", "跑步"]}
json_str = json.dumps(person, ensure_ascii=False, indent=2)
print(json_str)

# 保存到文件
with open("person.json", "w", encoding="utf-8") as f:
    json.dump(person, f, ensure_ascii=False, indent=2)

# 读取 JSON
with open("person.json", "r", encoding="utf-8") as f:
    loaded = json.load(f)
    print(loaded["name"])

十. 异常处理

10.1 基本 try-except

try:
    num = int(input("请输入整数: "))
    result = 100 / num
    print(result)
except ValueError:
    print("输入的不是有效整数")
except ZeroDivisionError:
    print("不能除以零")
except Exception as e:
    print(f"其他错误: {e}")
else:
    print("没有发生异常")   # try 成功时执行
finally:
    print("无论如何都会执行")  # 清理资源等

10.2 抛出异常与自定义异常

def withdraw(balance, amount):
    if amount > balance:
        raise ValueError("余额不足")
    return balance - amount

# 自定义异常类
class NegativeAmountError(Exception):
    pass

def deposit(amount):
    if amount < 0:
        raise NegativeAmountError("存款金额不能为负")

10.3 assert 断言(调试用)

def divide(a, b):
    assert b != 0, "除数不能为零"
    return a / b

# 运行时可用 -O 参数禁用断言

十一. 面向对象编程

11.1 类与对象回顾

class Student:
    school = "第一中学"   # 类属性,所有实例共享

    def __init__(self, name, score):
        self.name = name   # 实例属性
        self.score = score

    def introduce(self):
        print(f"{self.name} 来自 {self.school}")

s1 = Student("小明", 90)
s1.introduce()

11.2 属性装饰器(@property)

class Circle:
    def __init__(self, radius):
        self._radius = radius

    @property
    def radius(self):
        return self._radius

    @radius.setter
    def radius(self, value):
        if value < 0:
            raise ValueError("半径不能为负")
        self._radius = value

    @property
    def area(self):
        return 3.14 * self._radius ** 2

c = Circle(5)
print(c.area)   # 像属性一样访问,无需括号
c.radius = 10   # 使用 setter

11.3 类方法与静态方法

class Date:
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

    @classmethod
    def from_string(cls, date_str):
        # 类方法用于创建实例的替代构造函数
        year, month, day = map(int, date_str.split("-"))
        return cls(year, month, day)

    @staticmethod
    def is_valid(year, month, day):
        # 静态方法,不依赖实例或类
        return 1 <= month <= 12 and 1 <= day <= 31

d = Date.from_string("2025-12-25")
print(Date.is_valid(2025, 13, 1))   # False

11.4 继承与 super()

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        raise NotImplementedError

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)   # 调用父类初始化
        self.breed = breed

    def speak(self):
        return f"{self.name} 汪汪叫"

class Cat(Animal):
    def speak(self):
        return f"{self.name} 喵喵喵"

animals = [Dog("旺财", "金毛"), Cat("咪咪")]
for a in animals:
    print(a.speak())

11.5 魔术方法(双下划线方法)

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

    def __len__(self):
        return 2

v1 = Vector(1,2)
v2 = Vector(3,4)
print(v1 + v2)   # Vector(4,6)
print(len(v1))   # 2

来源:
https://bgnno.cn/

相关文章
|
2月前
|
JSON 程序员 开发工具
初级程序员实战教程(一)
教程来源 https://zlpow.cn/ 零基础Python入门教程,手把手教环境搭建、语法详解与实战开发。含300+行可运行代码及详细注释,涵盖变量、函数、OOP、调试测试、Git等核心内容,并完成通讯录与学生成绩系统两大项目。
|
2月前
|
存储 程序员 Shell
初级程序员实战教程(七)
教程来源 https://ltglu.cn/ 版本控制是程序员必备技能,Git作为主流分布式系统,支持代码备份、协同开发、分支管理与审计追踪。本节涵盖安装配置、三大区域(工作区/暂存区/仓库)、提交/回退/分支/远程协作等90%日常场景,附大量实战命令。
|
2月前
|
JSON 程序员 数据库
初级程序员实战教程(六)
教程来源 https://wkmsa.cn/ 本系列实战项目涵盖通讯录系统(JSON文件版)、学生成绩管理系统(SQLite数据库版)及调试测试技术。项目结构清晰、代码简洁,含增删改查、模糊搜索、统计分析、CSV导出等功能,配套print/pdb/unittest/doctest等调试测试方法,适合Python初学者学习与扩展。
|
2月前
|
程序员 Python
初级程序员实战教程(二)
教程来源 bncne.cn 本节详解Python核心运算符:算术(含//、%特殊规则)、比较(支持字符串字典序)、逻辑(含短路特性)、赋值(含海象运算符:=)及位运算;并涵盖输入输出与多种格式化打印方式,内容系统实用,适合零基础到进阶学习。
|
2月前
|
监控 安全 数据可视化
Android 平台 BTMOB 远程控制木马机理分析与防御体系研究
BTMOB是2025年曝光的Android远程控制木马,源自SpySolr,以MaaS模式运营。它滥用无障碍服务实现免Root提权,可窃取短信/通讯录、录屏录音、模拟点击等,危害拉美及全球移动安全。本文基于WeLive Security报告,构建“分析—检测—响应”闭环防御体系。(239字)
470 6
|
3月前
|
XML 前端开发 程序员
初级程序员必备的十大技能之 API 接口与前后端联调(一)
教程来源 http://qeext.cn/ 本文系统讲解API设计规范(RESTful/GraphQL)、HTTP协议核心(方法、状态码、头信息)、前后端联调流程及调试工具,助你打造标准化、高可用接口,打破前后端协作孤岛。
|
2月前
|
程序员 Python
初级程序员实战教程(四)
教程来源 https://oplhc.cn/ 本节详解Python函数与模块化编程:涵盖函数定义/调用、六类参数(位置、关键字、默认、*args、**kwargs及组合)、返回值与LEGB作用域规则、lambda匿名函数、递归原理及装饰器入门;并系统介绍模块导入、`if __name__ == &quot;__main__&quot;`机制、包结构与第三方库管理。
|
2月前
|
程序员 Python
初级程序员实战教程(三)
教程来源 https://tmywi.cn/ 本节详解Python流程控制与核心数据结构:条件语句(if/elif/else、三元表达式)、循环(while/for、break/continue/else)及常见陷阱;深入讲解列表、元组、字典、集合和字符串的创建、操作、遍历与高级用法(推导式、切片、字典合并等),实用性强。
|
3月前
|
前端开发 JavaScript 程序员
初级程序员必备的十大技能之开发工具熟练使用(三)
教程来源 https://bncne.cn/ 浏览器开发者工具是前端调试核心利器,涵盖Elements(实时编辑DOM/CSS)、Console(日志、断点、DOM操作)、Sources(多类型断点与作用域调试)、Network(请求分析与模拟)、Performance(性能指标与火焰图)及Application(存储管理)六大面板,全面提升开发效率。
|
3月前
|
前端开发 程序员 开发工具
初级程序员必备的十大技能之开发工具熟练使用(四)
教程来源 https://tmywi.cn/ VS Code深度集成Git:快捷键操作、冲突可视化解决;GitLens增强代码溯源与历史追踪;配合高效命令行别名与撤销技巧;辅以Node/前端多维调试方案,全面提升开发效能。