-
什么是面向对象程序设计?面向对象程序设计的三大基本特征是什么?各有什么好处?
-
编写一个存储网站注册用户信息的
User类,要求:- 用户名
name只能使用A~Z、a~z、0~9、-和_这些字符,只能以字母开头,长度在 5~20 字符之间; - 用户密码
password只能是编号范围为 32~126 之间的 ASCII 可显示字符,长度在 10~50 之间,必须至少各包含一个小写字母、大写字母和数字,以及至少包含一个除了字母和数字之外的特殊字符。 - 可以通过
User(name, password)的形式创建用户,后期也可以进一步通过user.name = new_value的形式修改用户名和密码。
提示最好使用
@property装饰器将用户名和密码设置为特征属性,并将实际的用户名和密码实例变量设置为私有的或保护的。另外请注意这里是以明文存储密码的,实际网站的密码都应该是不可逆加密存储的。 - 用户名
-
复习矿井通风课程中所学习的关于井巷通风阻力一章的知识,编写一个名称为
Roadway的类,可以表示在矿井通风设计时井巷通风阻力计算的一些基本操作。以下已经搭建出该类的框架,请将其中标注为TODO的部分补充完整:
class Roadway:
"""表示一段巷道,该段巷道对应通风网络图中的一个边,所有数值单位都为国际标准单位"""
def __init__(self, length, area, form, alpha, volume_flux):
self.length = length # 巷道的长度
self.area = area # 巷道的断面积
self.form = form # 巷道断面形状,参见 SectionalForm 类的定义
self.alpha = alpha # 巷道的摩擦阻力系数,可在通风教材最后的附录中通过查表得到
self.volume_flux = volume_flux # 巷道的风量(体积通量)
self.air_density = 1.25 # 巷道内空气的平均密度
# 总阻力与摩擦阻力的比值,也是总风阻与摩擦风阻的比值,取值范围为 1.1~1.15,
# 一般新建矿井宜取 1.10,改扩建矿井宜取 1.15
self.t2f_ratio = 1.1
@property
def perimeter(self):
"""根据巷道的断面面积、断面形状估算巷道的断面周长"""
match self.form:
case SectionalForm.Trapezoid:
return 4.16 * (self.area ** 0.5)
case SectionalForm.ThreeCenteredArch:
return 3.85 * (self.area ** 0.5)
case SectionalForm.SemiCircularArch:
return 3.90 * (self.area ** 0.5)
case _:
return None
def frictional_resistance(self):
"""计算该段巷道的摩擦风阻 Rf"""
pass # TODO: 请进一步完成该函数
def local_resistance(self):
"""计算该段巷道的局部风阻 Rl"""
return self.frictional_resistance() * (self.t2f_ratio - 1.0)
def total_resistance(self):
"""计算该段巷道的总风阻 R"""
return self.frictional_resistance() * self.t2f_ratio
def velocity(self):
"""计算该段巷道的平均风速"""
pass # TODO: 请进一步完成该函数
def frictional_loss(self):
"""计算该段巷道的摩擦阻力 hf"""
pass # TODO: 请进一步完成该函数
def local_loss(self):
"""计算该段巷道的局部阻力 hl"""
return self.frictional_loss() * (self.t2f_ratio - 1.0)
def total_loss(self):
"""计算该段巷道的总阻力 h"""
return self.frictional_loss() * self.t2f_ratio
class SectionalForm:
"""这里实际上是用类变量模拟其他语言的枚举变量,即三个类变量分别代表三种断面形状。
Python 的标准库是有枚举(enum)模块的,不过这里为了展示类的用法而没有用该模块。"""
Trapezoid = 1 # 梯形
ThreeCenteredArch = 2 # 三心拱
SemiCircularArch = 3 # 半圆拱
# 给定一段通风路线
vent_path = [
Roadway(123.0, 16.0, SectionalForm.ThreeCenteredArch, 33.2e4, 90.0),
Roadway(37.4, 13.6, SectionalForm.SemiCircularArch, 82.9e4, 74.5),
Roadway(409.1, 13.2, SectionalForm.Trapezoid, 167.8e4, 64.5),
]
path_total_loss = 0.0 # 给定的通风路线的总阻力初值
# TODO: 请进一步编写程序,计算以上给定的通风路线的总阻力 path_total_loss