二、编写一个应用程序,完成下列功能:
(1)定义一个类Book,具有1个公有的类属性count,3个私有的实例字段name、price、major分别表示书名、价格、专业;
(2)为此类定义一个构造函数,能实现name参数一定有,但price和major两个参数可不指定的可变参数模式(其中不设置时,默认price=50,major=“无”),每次初始化时count加1;
(3)运行时创建Book类的5本书的对象,并存放在一个列表lst中,一本书为《C#程序设计》、30元、计算机专业,一本书为《计算方法》,一本书为《JAVA面向对象》、69元、计算机专业,一本书为《形势与政策》、16元,最后一本书为《大学英语》、59、基础课;
(4)定义一个rank()函数,能对lst中书按照价格进行排序,其中默认从低到高排序,也可在参数中指定从高到低排序,并在排序后打印每个Book对象的所有信息。
class Book:
count = 0
def __init__(self, name, price=50, major="无"):
self.__name = name
self.__price = price
self.__major = major
Book.count += 1 # 每调用一个构造函数count加1
def __str__(self):
return "书名:{},价格:{},主修:{}".format(self.__name, self.__price, self.__major)
def getPrice(self):
return self.__price
@staticmethod
def rank(lst, isBig=True):
if isBig:
lst.sort(key=lambda x: x.getPrice())
else:
lst.sort(key=lambda x: x.getPrice(), reverse=True)
for l in lst:
print(l)
b1 = Book("《C#程序设计》", 30, "计算机专业")
b2 = Book("《计算方法》")
b3 = Book("《Java 面向对象》", 69, "计算机专业")
b4 = Book("《形式政策》", 16)
b5 = Book("《大学英语》", 69)
booklist = [b1, b2, b3, b4, b5]
Book.rank(booklist,False)
print("一共有{}本书".format(Book.count))
结果如下