《Python编程:从入门到实践》第九章9.3节课后作业

本文代码是在jupyter中实现的,仅为了自我督促学习python之用。
9-6 冰淇淋小店:冰淇淋小店是一种特殊的餐馆。编写一个名为 IceCreamStand 的类,让它继承你为完成练习 9-1 或练习 9-4 而编写的 Restaurant 类。这两个版本的Restaurant 类都可以,挑选你更喜欢的那个即可。添加一个名为 flavors 的属性,用于存储一个由各种口味的冰淇淋组成的列表。编写一个显示这些冰淇淋的方法。创建一个IceCreamStand 实例,并调用这个方法。

代码:

class Restaurant():
    """创建一个包含餐厅名称和所售菜系的类"""
    def __init__(self, restaurant_name, cuisine_type):
        """初始化属性restaurant_name和cuisine_type"""
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type
        
    def describe_restaurant(self):
        """打印餐厅名称和菜品类型"""
        print("This wonderful restaurant is called " + self.restaurant_name.title() + "." )
        print("The restaurant focuses on " + self.cuisine_type.title() + " cuisine.")
        
    def open_restaurant(self):
        """打印‘该餐馆正在营业中......’"""
        print("The restaurant is open now ......")

class IceCreamStand(Restaurant):
    def __init__(self, restaurant_name, cuisine_type):
        """初始化父类Restaurant的属性"""
        super().__init__(restaurant_name, cuisine_type)
        self.flavors = ['Chocolate', 'vanilla', 'cream', 'matcha', 'strawberry']
        
    def Icecream_flavors(self):
        """将列表中所包含的信息逐次打印出来"""
        for Icecream_flavor in self.flavors:
            print("This store also sells ice cream, the flavors include: " + Icecream_flavor)

            
IceCreamStand = IceCreamStand('width alley', 'sichuan')
IceCreamStand.describe_restaurant()
IceCreamStand.open_restaurant()
IceCreamStand.Icecream_flavors()

运行结果:

This wonderful restaurant is called Width Alley.
The restaurant focuses on Sichuan cuisine.
The restaurant is open now ......
This store also sells ice cream, the flavors include: Chocolate
This store also sells ice cream, the flavors include: vanilla
This store also sells ice cream, the flavors include: cream
This store also sells ice cream, the flavors include: matcha
This store also sells ice cream, the flavors include: strawberry

9-7 管理员:管理员是一种特殊的用户。编写一个名为 Admin 的类,让它继承你为完成练习 9-3 或练习 9-5 而编写的 User 类。添加一个名为 privileges 的属性,用于存储一个由字符串(如 “can add post” 、 “can delete post” 、 “can ban user” 等)组成的列表。编写一个名为 show_privileges() 的方法,它显示管理员的权限。创建一个 Admin实例,并调用这个方法。

代码:

class User():
    """创建一个包含用户简介的类"""
    def __init__(self, first_name, last_name, age, gender):
        """初始化属性first_name和last_name,age, gender"""
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        self.gender = gender
        
    def describe_user(self):
        """打印用户信息摘要"""
        print(self.first_name.title() + " , " + self.last_name.title() + " , " + str(self.age) + " , " +  self.gender.title()) # 打印Restaurant类中创建的两个属性
        
    def greet_user(self):
        """向用户表示问候"""
        print(self.first_name.title() + " " + self.last_name.title() + ", nice to meet you.")
        
class Admin(User):
    def __init__(self, first_name, last_name, age, gender):
        """初始化父类的属性"""
        super().__init__(first_name, last_name, age, gender)
        self.privileges = ['can add post', 'can delete post', 'can ban user']
    
    def show_privileges(self):
        """用于显示管理员权限"""
        print("You "+ self.privileges[1] + '.')
        
user = Admin('Taylor', 'Swift',31,'female')
user.describe_user()
user.greet_user()
user.show_privileges()

运行结果:

Taylor , Swift , 31 , Female
Taylor Swift, nice to meet you.
You can delete post.

9-8 权限:编写一个名为 Privileges 的类,它只有一个属性——privileges ,其中存储了练习 9-7所说的字符串列表。将方法 show_privileges() 移到这个类中。在 Admin类中,将一个 Privileges 实例用作其属性。创建一个 Admin 实例,并使用方法show_privileges() 来显示其权限。

代码:

class User():
    """创建一个包含用户简介的类"""
    def __init__(self, first_name, last_name, age, gender):
        """初始化属性first_name和last_name,age, gender"""
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        self.gender = gender
        
    def describe_user(self):
        """打印用户信息摘要"""
        print(self.first_name.title() + " , " + self.last_name.title() + " , " + str(self.age) + " , " +  self.gender.title()) # 打印Restaurant类中创建的两个属性
        
    def greet_user(self):
        """向用户表示问候"""
        print(self.first_name.title() + " " + self.last_name.title() + ", nice to meet you.")

class Privileges():
    def __init__(self):
        self.privileges_list = ['can add post', 'can delete post', 'can ban user']
        
    def show_privileges(self):
        """用于显示管理员权限"""
        print("You "+ self.privileges_list[1] + '.')    
        
class Admin(User):
    def __init__(self, first_name, last_name, age, gender):
        """初始化父类的属性"""
        super().__init__(first_name, last_name, age, gender)
        self.privileges = Privileges()

        
user = Admin('Taylor', 'Swift',31,'female')
user.describe_user()
user.greet_user()
user.privileges.show_privileges()

运行结果:

Taylor , Swift , 31 , Female
Taylor Swift, nice to meet you.
You can delete post.

疑问:
我一开始把

    def __init__(self):

写成了下面的形式,结果报错了,如下所示。目前,还不知道为什么,如果有大佬路过看到,知道原因,可以在评论区留言告知一下下,多谢。
代码:

    def __init__(self, privileges_list):

报错:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-32-1d19d9466c31> in <module>
     31 
     32 
---> 33 user = Admin('Taylor', 'Swift',31,'female')
     34 user.describe_user()
     35 user.greet_user()

<ipython-input-32-1d19d9466c31> in __init__(self, first_name, last_name, age, gender)
     28         """初始化父类的属性"""
     29         super().__init__(first_name, last_name, age, gender)
---> 30         self.privileges = Privileges()
     31 
     32 

TypeError: __init__() missing 1 required positional argument: 'privileges_list'

9-9 电瓶升级:在本节最后一个 electric_car.py 版本中,给 Battery 类添加一个名为upgrade_battery() 的方法。这个方法检查电瓶容量,如果它不是 85,就将它设置为 85。创建一辆电瓶容量为默认值的电动汽车,调用方法 get_range() ,然后对电瓶进行升级,并再次调用 get_range() 。你会看到这辆汽车的续航里程增加了。

代码:

class Car():
    """一次模拟汽车的简单尝试"""
    
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0
        
    def get_descriptive_name(self):
        long_name = str(self.year) + ' ' + self.make + self.model
        return long_name.title()
    
    def read_odometer(self):
        print("This car has " + str(self.odometer_reading) + " miles on it.")
        
    def update_odometer(self, mileage):
        if mileage >= self.odometer_reading:
            self.odometer_reading = mileage
        else:
            print("You can't roll back an odometer!")
            
    def increment_odometer(self, miles):
        self.odometer_reading += miles

class Battery():
    """一次模拟电动汽车电瓶的简单尝试"""
    
    def __init__(self, battery_size=70):
        """初始化电瓶的属性"""
        self.battery_size = battery_size
        
    def describe_battery(self):
        """打印一条描述电瓶容量的消息"""
        print("This car has a " + str(self.battery_size) + " -kWh battery")
    
    def get_range(self):
        """打印一条消息,指出电瓶的续航里程"""
        if self.battery_size ==70:
            range = 240
        elif self.battery_size ==85:
            range = 270
        
        message = "This car can go approximately " + str(range)
        message += " miles on a full charge."
        print(message)
        
    def upgrade_battery(self):
        """检查电瓶容量,如果容量不是85,将其调整为85"""
        if self.battery_size != 85:
            self.battery_size = 85
        print("The battery capacity of the upgraded electric car is: " + str(self.battery_size))
    
class ElectricCar(Car):
    """电动车的独特之处"""
    
    def __init__(self, make, model, year):
        """初始化父类的属性"""
        super().__init__(make, model, year)
        self.battery = Battery()
      
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()
my_tesla.battery.upgrade_battery()
my_tesla.battery.get_range()

运行结果:

2016 Teslamodel S
This car has a 70 -kWh battery
This car can go approximately 240 miles on a full charge.
The battery capacity of the upgraded electric car is: 85
This car can go approximately 270 miles on a full charge.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值