01 几个重要的概念
1.1 包:可以简单的理解为文件夹的概念
注解:包package是一个文件夹(目录),里面包含__init__.py和模块;
1.2 模块:简单的理解为 .py文件
注解:模块module是文件,以.py为后缀名,包含类、函数、语句
1.3 类:class
class Student:
""" 类注释 """
# 类变量,所有实例共享
total\_cnt_ = 0
def _init__(self, name, age):
""" 初始化方法 """
# 普通实例变量,每个实例独有
self.name = name
self.age = age
Student.total_cnt += 1
def set_grade(self, grade):
""" 普通方法 """
self.grade = grade
1.4 函数:类由3个部分构成:类名、变量(属性)、方法(行为/功能/函数)
①项目project②包package③文档文件④模块/.py文件
02 实例需求分析
# 需求:用面向对象的方式解决学生成绩表问题,支持学生成绩导入,支
持计算各科平均分、最高分。
03 程序编写与分析
# #############################################################
# 这是一个拆分字符串测试。通过指定分隔符将字符串进行切片,并返回分割后的字符串列表[list]
# 参数:str:分隔符,默认为空格,但不能为空("")
u = "www.google.com"
print(u.split('.'))
# 输出:['www', 'google', 'com']
print(u.split('.')[0])
# 输出:www
u = "www google com"
print(u.split(' '))
# 输出:['www', 'google', 'com']
##############################################################
# 这是一个读文件测试
# fp作为文件指针
# 实质是一个迭代器,因此在for循环中可以不断迭代
fp = open("input.txt", 'r')
for line in fp:
print(line)
# 在for循环内一直输出7行
# 第一次输出:s001/66/78/89
# 第二次输出:s002/77/67/69``fp.close
# 函数的主要作用
# 重复使用:主要目的,一次封装可以任意的使用,如果变更函数则所有的使用方都会更新;
# 封装复杂代码逻辑:用一个简单的函数名,表达背后复杂的实现逻辑;
# 类一般是名词,代表一类事物,比如学生、汽车、电脑;
# 类定义了一个模板,一个类可以有多个实例对象,每个实例对象有自己的具体的属性取值;
# 类是包含数据和方法的一个打包,其中的方法可以对数据进行更新;
# 学生是一个类,小明同学和小王同学都是实例;
# 需求:用面向对象的方式解决学生成绩表问题,支持学生成绩导入,支持计算各科平均分、最高分。
# 常用思路:把名词变成类、把数据变成属性、把动词变成方法(函数)
# 学生成绩的类 这个类只有属性没有方法
class Sgrade:
# 在Python中定义类经常会用到__init__函数(方法)
# 首先需要理解的是,两个下划线开头的函数是声明该属性为私有,不能在类的外部被使用或访问。
# __init__函数(方法)的第一个参数必须为self,后续参数为自己定义。
def __init__(self, sno, yuwen, shuxue, yingyu):
"""
初始化方法
sno: 学号
yuwen: 语文成绩`shuxue: 数学成绩
yingyu: 英语成绩
"""
self.sno = sno
self.yuwen = int(yuwen)
self.shuxue = int(shuxue)
self.yingyu = int(yingyu)
# 学生成绩表的类 这个类有属性、有方法
class SgradeTable:
# 定义方法函数:导入数据
def __init__(self):
# 列表
self.sgrade_table = []
# 载入学生成绩表文件的方法
def load_data(self, fname_sgrade_table):
# input.txt文件需要放在项目文件夹下
# with语句的优化作用:
with open("input.txt") as fin:
# 最简单的按照行读取的方法
# for循环
for line in fin:
# strip()用于移除字符串头尾指定的字符(例如空格或换行符等)。
# split(",")则是数据中遇到","就隔开。
# 拆分字符串,通过指定分隔符将字符串进行切片,并返回分割后的字符串列表[list]
sno, yuwen, shuxue, yingyu =line.strip().split("/")
print(sno, yuwen, shuxue, yingyu)
# 在for循环内一直输出7行
# 第一次输出:s001 66 78 89
# 第二次输出:s002 77 67 69
# 每次for循环更新sgrade
sgrade = Sgrade(sno, yuwen, shuxue, yingyu)
# append() 函数可以向列表末尾添加元素,每次for循环更新列表self.sgrade_table
self.sgrade_table.append(sgrade)
print("sgrade table size:", len(self.sgrade_table))
# 定义方法函数:计算平均分
def compute_avg_score(self):
"""
计算各科的平均分
"""
yuwen_total, shuxue_total, yingyu_total = 0,0,0
for sgrade in self.sgrade_table:
yuwen_total += sgrade.yuwen
shuxue_total += sgrade.shuxue
yingyu_total += sgrade.yingyu
count = len(self.sgrade_table)
return yuwen_total/count, shuxue_total/count, yingyu_total/count
# 定义方法函数:计算最高分
def compute_max_score(self):
"""
计算各科的最高分
"""
yuwen_max, shuxue_max, yingyu_max = 0, 0, 0
for sgrade in self.sgrade_table:
if sgrade.yuwen>yuwen_max:
yuwen_max = sgrade.yuwen
if sgrade.shuxue>shuxue_max:
shuxue_max = sgrade.shuxue
if sgrade.yingyu>yingyu_max:
yingyu_max = sgrade.yingyu
return yuwen_max, shuxue_max, yingyu_max
# 创建成绩表的实例
sgrade_table = SgradeTable()
# 加载成绩表文件
sgrade_table.load_data("input.txt")
# 打印平均分和最高分
print(sgrade_table.compute_avg_score())
# 各科平均分 输出:(63.42857142857143, 62.285714285714285, 90.0)
print(sgrade_table.compute_max_score())
# 各科最高分 输出:(100, 98, 100)
搞清楚整个项目的逻辑思维,项目写起来就会得心应手!
通过“结构”,指的是在项目中为实现其目标所做的决策。需要考虑如何充分利用Python的特性来创建清晰、高效的代码。从实际角度来看,“结构”意味着创建清晰的代码,其逻辑和依赖关系清晰明了,以及文件和文件夹在文件系统中的组织方式。
最后这里免费分享给大家一份Python学习资料,包含视频、源码。课件,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以和我一起来学习交流呀。
编程资料、学习路线图、源代码、软件安装包等!
看下方图片哦(掉落)↓↓↓
① Python所有方向的学习路线图
,清楚各个方向要学什么东西
② 100多节Python课程视频
,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例
,学习不再是只会理论
④ 华为出品独家Python漫画教程
,手机也能学习
⑤ 历年互联网企业Python面试真题
,复习时非常方便****