1.建立一个汽车类Auto,包括轮胎个数,汽车颜色,车身重量,速度等属性,并通过不同的构造方法创建实例。至少要求
汽车能够加速
减速
停车。
再定义一个小汽车类CarAuto
继承Auto
并添加空调、CD属性,并且重新实现方法覆盖加速、减速的方法
class Auto:
def __init__(self, tire, color, weight, speed):
if tire % 2 == 0 and tire >= 4:
self.tire = tire
else:
raise ValueError
self.color = color
self.weight = weight
self.speed = speed
def speed_up(self, add_speed):
self.speed += add_speed
return '加速后速度为:%f' % self.speed
def speed_down(self, down_speed):
self.speed -= down_speed
return '减速后速度为:%f' % self.speed
def __repr__(self):
return self.__dict__
class CarAuto(Auto):
def __init__(self, tire, color, weight, speed, air_conditioner='off', cd_player='off'):
super().__init__(tire, color, weight, speed)
self.air_conditioner = air_conditioner
self.cd_player = cd_player
c1 = Auto(4, 'black', '1吨', 60)
print(c1.__repr__())
c1.speed_up(40)
print(c1.__repr__())
c1.speed_down(20)
print(c1.__repr__())
c2 = CarAuto(8, 'red', '5吨', 70)
print(c2.__repr__())
2.创建一个Person类,添加一个类字段用来统计Person类的对象的个数
class Person:
count = 0
def __init__(self, name, age, gender):
self._name = name
self.age = age
self.gender = gender
Person.count += 1
@classmethod
def count1(cls):
return Person.count
p1 = Person('王力', 23, 1)
p2 = Person('王力', 23, 1)
p3 = Person('王力', 23, 1)
p4 = Person('王力', 23, 1)
p5 = Person('王力', 23, 1)
print(Person.count1())
3.创建一个动物类,拥有属性:性别、年龄、颜色、类型 ,
要求打印这个类的对象的时候以'/XXX的对象: 性别-? 年龄-? 颜色-? 类型-?/'的形式来打印
class Animal:
def __init__(self, kind, gender, age, color):
self.gender = gender
self.age = age
self.color = color
self.kind = kind
def information(self):
print('{}的对象: 性别-{} 年龄-{} 颜色-{} 类型-{}'.format(self.__class__.__name__, self.gender, self.age,
self.color, self.kind))
a1 = Animal('狗', 2, 13, 'red')
a1.information()
4.写一个圆类, 拥有属性半径、面积和周长;要求获取面积和周长的时候的时候可以根据半径的值把对应的值取到。
但是给面积和周长赋值的时候,程序直接崩溃,并且提示改属性不能赋值
from math import pi
class PropertyError(Exception):
def __str__(self):
return '属性不能赋值'
class Circle:
def __init__(self, r):
self.r = r
self._area = pi * r ** 2
self._perimeter = 2 * pi * r
@property
def area(self):
return self._area
@area.setter
def area(self, value):
raise EnvironmentError
@property
def perimeter(self):
return self._area
@perimeter.setter
def perimeter(self, value):
raise PropertyError
c1 = Circle(5)
print(c1.perimeter, c1.area)
c1.r = 6
print(c1.perimeter, c1.area)
c1.perimeter = 45
5.写一个扑克类, 要求拥有发牌和洗牌的功能(具体的属性和其他功能自己根据实际情况发挥)
import random
class Pokers:
def __init__(self):
self.pokers = []
for point in range(1, 11):
for color_shape in ('♦', '♥', '♠', '♣'):
self.pokers.append([point, color_shape])
for point in ('J', 'Q', 'K'):
for color_shape in ('♦', '♥', '♠', '♣'):
self.pokers.append([point, color_shape])
self.pokers.append('KING')
self.pokers.append('king')
# print(self.pokers)
# 洗牌方法:
def shuffle(self):
random.shuffle(self.pokers)
return self.pokers
# 斗地主发牌方法:
def dealer(self, nums1=20, nums2=17, nums3=17):
Pokers.shuffle(self)
if 0 < nums1 + nums2 + nums3 < 55:
iter1 = iter(self.pokers)
print('======================斗地主==========================')
for i in range(0, 20):
print(next(iter1))
print('======================农民1==========================')
for i in range(20, 37):
print(next(iter1))
print('======================农民2==========================')
for i in range(37, 54):
print(next(iter1))
else:
raise ValueError
p2 = Pokers()
print(p2.pokers)
p2.shuffle()
print(p2.pokers)
p2.dealer()
p2.dealer()
6.(尝试)写一个类,其功能是:
1.解析指定的歌词文件的内容
2.按时间显示歌词
提示:歌词文件的内容一般是按下面的格式进行存储的。歌词前面对应的是时间,在对应的时间点可以显示对应的歌词
[00: 00.20]蓝莲花
[00: 00.80]没有什么能够阻挡
[00: 06.53]你对自由地向往
[00: 11.59]天马行空的生涯
[00: 16.53]你的心了无牵挂
[02: 11.27][01: 50.22][00: 21.95]穿过幽暗地岁月
[02: 16.51][01: 55.46][00: 26.83]也曾感到彷徨
[02: 21.81][02: 00.60][00: 32.30]当你低头地瞬间
[02: 26.79][02: 05.72][00: 37.16]才发觉脚下的路
[02: 32.17][00: 42.69]心中那自由地世界
[02: 37.20][00: 47.58]如此的清澈高远
[02: 42.32][00: 52.72]盛开着永不凋零
[02: 47.83][00: 57.47]蓝莲花
class Lyric:
def __init__(self, time, word):
value = float(time[1:3])*60 + float(time[4:])
self.time = value
self.word = word
def __repr__(self):
return '<'+str(self.time) + ':' + self.word+'>'
def __gt__(self, other):
return self.time > other.time
class LyricAnalysis:
def __init__(self, name):
# 歌名
self.name = name
self.__all_lyrics = []
def get_word(self, time):
# =======解析歌词文件======
if not self.__all_lyrics:
print('解析歌词')
with open('files/'+self.name) as f:
while True:
line = f.readline()
if not line:
break
lines = line.split(']')
word = lines[-1]
for t in lines[:-1]:
lyric = Lyric(t, word)
self.__all_lyrics.append(lyric)
# 排序
self.__all_lyrics.sort(reverse=True)
# ==========获取歌词==========
for lyric in self.__all_lyrics:
if lyric.time <= time:
return lyric.word
ly = LyricAnalysis('蓝莲花')
print('===:',ly.get_word(123))
print('===:',ly.get_word(10))
print('===:',ly.get_word(89))
ly2 = LyricAnalysis('一首简单的歌')
print('!!!:', ly2.get_word(30))
print('!!!:', ly2.get_word(90))