类是从具体的事物中把共同的特征抽取出来,而对象是类的一个具体实现。比如汽车图纸就是类,根据图纸可以生产出来很多汽车,就是该类的具体实例(对象)。
类中的方法分为:类方法(@classmethod)、静态方法(@staticmethod)、实例方法。在类中,实例方法只能通过self调用;若要通过类名调用,只能用类方法或静态方法。
设计一个Circle(圆)类,该类中包含属性radius(半径),还包括__init__()、get_perimeter()(求周长)和get_area()(求面积)等方法。设计完成后,创建Circle类的对象并测试周长和面积的功能。
import math
class Circle: #定义一个Circle类
#构造方法__init__()用来初始化属性。当创建对象时,会自动调用此方法。
#在方法内部可以使用self.属性名=属性的初始值(或参数)为属性设置初值。
def __init__(self,radius): #有参构造方法,参数是radius
self.radius=radius #通过参数radius为属性radius赋值
def get_perimeter(self): #定义实例方法get_perimeter,用来求圆的周长
return 2*math.pi*self.radius #self.radius使用类中radius属性计算
def get_area(self):
return math.pi*(self.radius**2)
#创建Circle类的对象circle,因构造方法中有radius参数,所以需要传入半径的值
circle=Circle(5.0)
#实例方法的调用分为:采用类的对象调用(对象名.方法名)、直接通过类名调用
print("周长为:",circle.get_perimeter()) #通过对象调用方法
print("面积为:",circle.get_area())
设计一个Group类,该类包括:一个数据成员score(每个学生的分数)、类成员total(班级的总分)和count(班级的人数)和avg(班级的平均分)。成员方法setScore()用于设置分数,成员方法sum()用于累计总分,类方法average()用于求平均值,类方法show()用来输出总分和平均分。
class Group:
total=count=0 #定义类属性
avg=0.0
def __init__(self,score): #初始化方法
self.score=score #通过"self.属性=形参"的形式接收外部传递的实参
self.sum() #对象的实例方法sum()
def setScore(self):
Group.count+=1 #访问类属性
return self.score #返回实例属性score
def sum(self):
#调用setScore()方法得到每个score值,与类属性total相加,即可得到总分数
Group.total+=self.setScore()
@classmethod #定义类方法
def average(cls):
#通过类属性total和count计算平均分
return Group.total/Group.count
@classmethod
def show(cls):
print("总分:",Group.total)
#若要通过类名调用类中的方法,只能用类方法或静态方法。
#如Group.sum()是不合法的,因为类名不能调用实例方法
print("平均分:",Group.average())
a=int(input("请输入学生数量:"))
lists=[a] #定义一个列表lists,用来存储输入的分数
for i in range(a):
#Group(int(input(f"请输入第{i+1}位学生的成绩:")))创建对象
lists.append(Group(int(input(f"请输入第{i+1}位学生的成绩:"))))
#"类名.方法名()"通过类名直接调用类方法(调用Group类中的show()方法)
Group.show()
为二次方程式ax2+bx+c=0设计一个名为Equation的类,这个类包括:
(1)代表三个系数的成员变量a、b、c
(2)一个参数为a、b、c的构造方法
(3)一个名为getDiscriminant()的方法返回判别式的值,其中判别式为b2-4ac
(4)一个名为getRoot1()和getRoot2()的方法返回等式的两个根(r1=(-b+√(b2-4ac))/2a,r2=(-b-√(b2-4ac))/2a )。
如果判别式为负,这些方法返回0。
import math
class Equation:
def __init__(self,a,b,c):
self.a=a
self.b=b
self.c=c
def getDiscriminant(self,a,b,c):
return b**2-4*a*c
def getRoot1(self,a,b,c):
#因getDiscriminant()是实例方法,只能通过self调用
if self.getDiscriminant(a,b,c)<0:
return 0
else:
return (-b+math.sqrt(b**2-4*a*c))/2*a
def getRoot2(self,a,b,c):
if self.getDiscriminant(a,b,c)<0:
return 0
else:
return (-b-math.sqrt(b**2-4*a*c))/2*a
#接收输入的字符串,以逗号分隔后存入x列表
x=input("请输入a,b,c,以逗号隔开:").split(",")
#通过map函数把x列表中的数据映射成int类型,并分别赋值给a,b,c这3个变量
a,b,c=map(int,x)
eq=Equation(a,b,c) #创建Equation的对象eq
print("第一个根是:",eq.getRoot1(a,b,c))
print("第二个根是:",eq.getRoot2(a,b,c))
(1)定义一个银行类Bank,并在该类中定义一个实例属性balance(用于保存账户余额,初始化为1000)、一个存款方法deposit()、一个取款方法withdraw()。
(2)创建自定义函数show_menu(),用于显示菜单。
(3)创建程序入口。首先显示菜单,输入菜单操作编号,实例化Bank类的对象,根据选择的菜单项调用相应的方法执行相应的操作。
class Bank:
def __init__(self):
self.balance=1000 #实例属性balance初始化为1000
def deposit(self): #存款
money=int(input("请输入存款金额:"))
self.balance+=money
print("转入{}元,余额为{}元".format(money,self.balance))
def withdraw(self):#取款
money = int(input("请输入取款金额:"))
#若当前账户余额多于取款金额,才能够正常取款
if self.balance>=money:
self.balance -= money
print("取出{}元,余额为{}元".format(money, self.balance))
else:
print("余额不足!")
def show_menu(): #在类Bank外,定义一个show_menu()函数,展示菜单
menu='''菜单
0退出
1存款
2取款'''
print(menu)
show_menu() #调用show_menu()函数
id=int(input("请输入操作编号:"))
bank=Bank() #创建Bank类的对象bank
while id!=0:
#根据不同的操作,调用不同的实例方法
if id==1:
bank.deposit()
elif id==2:
bank.withdraw()
else:
print("输入有误!")
id = int(input("请输入操作编号:"))
print("退出系统")
(2)家具(HouseItem类)有名字(name)和占地面积(area)。
(3)将三件家具添加到房子中:床(bed)占地4m2;衣柜(chest)占地2m2;餐桌(table)占地1.5m2 。
(4)打印房子时,要求输出:户型、总面积、剩余面积、家具列表。
class House:
#初始化。type,area两个形参用来接收传递的房子类型和总面积
def __init__(self,type,area):
#定义4个属性,type,area,free_area,item_list
self.type=type
self.area=area
self.free_area=area
self.item_list=[]
def addItem(self,item):
#若剩余面积多于目前家具的面积,则把家具的名字添加到家具列表中
if self.free_area>item.area:
self.item_list.append(item.name)
#剩余面积需要减去添置的家具面积
self.free_area-=item.area
else:
print("房间剩余面积不足")
#__str__方法必须有返回值,而且return之后只接受字符串数据
def __str__(self):
return "户型{},总面积{},剩余面积{},家具列表{}".format(self.type,self.area,self.free_area,self.item_list)
class HouseItem:
def __init__(self,name,area):
self.name=name
self.area=area
def __str__(self):
return f"{self.name}的占地面积为{self.area}"
#当.py文件被直接运行的时候,if__name__ =='__main__':下方的代码将被执行;
#当.py文件以模块形式被导入时,if__name__ =='__main__'下代码不被执行
if __name__=='__main__':
bed=HouseItem("席梦思",4)
chest=HouseItem("衣柜",2)
table=HouseItem("餐桌",1.5)
house=House("别墅",1000)
house.addItem(bed)
house.addItem(chest)
house.addItem(table)
print(bed)
print(chest)
print(table)
print(house)
(1)定义汽车类Car,包括名称属性name以及运行方式run()。
(2)定义客车类TaxiCar,包括名称属性name、载人属性person_num以及运行方式run()。
(3)定义货车类FreightCar,包括名称属性name、载物属性goods_weight以及运行方式run()。
(4)创建客车类和货车类的实例对象,并调用run()方法。
class Car:
def __init__(self,name):
self.name=name
def run(self):
print("运行方式:")
#继承【class 类名(父类名):】
class TaxiCar(Car):
def __init__(self,name,person_num):
self.name=name
self.person_num=person_num
def run(self): #因与父类中run()方法同名,子类会覆盖(重写)父类方法
print(f"{self.name}载了{self.person_num}人")
class FreightCar(Car):
def __init__(self,name,goods_weight):
self.name=name
self.goods_weight=goods_weight
def run(self):
print(f"{self.name}载了{self.goods_weight}kg的货物")
taxi=TaxiCar("小汽车",5) #创建TaxiCar类的对象taxi
taxi.run() #通过TaxiCar类的对象调用实例方法run()
freight=FreightCar("大卡车",10)
freight.run()
随机生成6位的验证码(字母数字随机组合,包含大小写),其中,验证码分成三种情况:小写字母(ASCII码范围为97-122)、大写字母(ASCII码范围为65-90)、数字(0-9)。chr()函数将当前整数转换为对应的ASCII字符。
import random
#随机生成6位的验证码,通过for循环保证验证码的位数
def VerificationCode():
choice = ""
for i in range(6):
#因验证码是由数字、大写字母、小写字母这3部分组成,所以分成以下3种情况
condition=random.randint(1,3)
if condition==1:#大写字母对应的ASCII码在65-90
upper_asc=random.randint(65,90) #随机生成一个65-90之间的整数
upper=chr(upper_asc) #把数字转换为ASCII码中对应的字符
choice=choice+upper #把转换后的字符存放在choice字符串中
elif condition==2:#小写字母对应的ASCII码在97-122
lower_asc=random.randint(97,122)
lower=chr(lower_asc)
choice+=lower
elif condition==3:#数字的情况
number=random.randint(0,9)
choice+=str(number)#把数字转为字符串
return choice
if __name__=='__main__':
print(VerificationCode())
缩写词是由一个短语中每个单词的第一个字母组成,均为大写。定义acronym(phrase)函数,当用户传入参数phrase后返回缩写词。例如,CPU是短语“central processing unit”的缩写。
def acronym(phrase):
#把输入的字符串以空格分隔
phrases=phrase.split(" ")
res='' #用来保存缩写词
for p in phrases: #遍历字符串中每一个单词
#p[0]取第一个单词的第一个字符,并使用upper()方法转换为大写字母
res+=p[0].upper()
return res
if __name__=='__main__':
phrase=input("短语:")
print(acronym(phrase))
该程序可接收用户输入的姓名、电话、QQ、邮箱等信息,将这些信息保存到“通讯录.txt”文件中。
dic={}
name=input("姓名:")
tel=input("电话:")
qq=input("QQ:")
email=input("E-mail:")
dic.update({'姓名:':name,"电话:":tel,'QQ:':qq,'邮箱:':email})
#mode="a+"是追加模式,以读写的形式打开文本文件,只允许在文件末尾添加数据,若文件不存在,则创建新文件
file=open("通讯录.txt",mode="a+",encoding='utf-8')
#将字典转换为字符串,使用write方法向文件中写入数据
file.write(str(dic)+"\n")
print(f"{name}的信息已录入")
file.close()