1.建立一個汽車類Auto暖哨,包括輪胎個數(shù)翎迁,汽車顏色蒲每,車身重量研侣,速度等屬性,并通過不同的構造方法創(chuàng)建實例锅睛。至少要求
汽車能夠加速
減速
停車埠巨。
再定義一個小汽車類CarAuto
繼承Auto
并添加空調历谍、CD屬性现拒,并且重新實現(xiàn)方法覆蓋加速、減速的方法
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.創(chuàng)建一個Person類望侈,添加一個類字段用來統(tǒng)計Person類的對象的個數(shù)
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.創(chuàng)建一個動物類印蔬,擁有屬性:性別、年齡脱衙、顏色侥猬、類型 例驹,
要求打印這個類的對象的時候以'/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.寫一個撲克類, 要求擁有發(fā)牌和洗牌的功能(具體的屬性和其他功能自己根據實際情況發(fā)揮)
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
# 斗地主發(fā)牌方法:
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]才發(fā)覺腳下的路
[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))