Python编程:从入门到实践 第 9 章 类 课后练习 9-5~9-14

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

class Restaurant():
    def __init__(self, restaurant_name, cuisine_type):
        """初始化餐馆信息"""
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type
        self.number_served = 0

    def describe_restaurant(self):
        """描述餐馆信息"""
        print(self.restaurant_name)
        print(self.cuisine_type)

    def open_restaurant(self):
        """餐馆正在营业"""
        print("The restaurant is opening.")

    def served_number(self):
        """打印服务人数"""
        print("The served_numbers are " + str(self.number_served) + ".")

    def set_number_served(self, number):
        self.number_served = number

    def increment_number_served(self, number):
        self.number_served += number


class IceCreamStand(Restaurant):
    def __init__(self, restaurant_name, cuisine_type):
        super().__init__(restaurant_name, cuisine_type)
        self.flavors = "Strawberry"

    def describe_flavors(self):
        print(self.flavors)


restaurant = IceCreamStand('henry', 'chinese')
restaurant.describe_flavors()
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):
        """用户信息初始化"""
        self.first_name = first_name
        self.last_name = last_name

    def describe_user(self):
        """用户详细信息"""
        print(self.first_name)
        print(self.last_name)

    def greet_user(self):
        """问候用户"""
        long_name = self.first_name.title() + " " + self.last_name.title() + "!"
        print("Hello, " + long_name)


class Admin(User):
    def __init__(self, first_name, last_name):
        super().__init__(first_name, last_name)
        self.privileges = ["can add post", "can delete post", "can ban user"]

    def show_privileges(self):
        for privilege in self.privileges:
            print("Admin " + privilege + "!")


user = Admin("he", "henry")
user.describe_user()
user.greet_user()
user.show_privileges()

结果:

he
henry
Hello, He Henry!
Admin can add post!
Admin can delete post!
Admin can ban user!

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

class User():
    def __init__(self, first_name, last_name):
        """用户信息初始化"""
        self.first_name = first_name
        self.last_name = last_name

    def describe_user(self):
        """用户详细信息"""
        print(self.first_name)
        print(self.last_name)

    def greet_user(self):
        """问候用户"""
        long_name = self.first_name.title() + " " + self.last_name.title() + "!"
        print("Hello, " + long_name)


class Privileges():
    def __init__(self):
        self.privileges = ["can add post", "can delete post", "can ban user"]

    def show_privileges(self):
        for privilege in self.privileges:
            print("Admin " + privilege + "!")


class Admin(User):
    def __init__(self, first_name, last_name):
        super().__init__(first_name, last_name)
        # 将一个 Privileges 实例用作其属性
        self.privileges = Privileges()


admin = Admin("henry", "he")
admin.privileges.show_privileges()
Admin can add post!
Admin can delete post!
Admin can ban user!


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 = 15

    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):
        if self.battery_size != 85:
            self.battery_size = 85


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 Tesla Model S
This car has a 70-kWh battery.
This car can go approximately 240 miles on a full charge.
This car can go approximately 270 miles on a full charge.

9-13 使用 OrderedDict :在练习 6-4 中,你使用了一个标准字典来表示词汇表。请使用 OrderedDict 类来重写这个程序,并确认输出的顺序与你在字典中添加键— 值对的顺序一致。

from collections import OrderedDict
dictionary = OrderedDict()
dictionary['if'] = '条件语句'
dictionary['for'] = '循环语句'
dictionary['else'] = '分支跳转'
dictionary['print'] = '打印信息'
for key, value in dictionary.items():
    print("\nkey: " + key)
    print("value: " + value)
key: if
value: 条件语句

key: for
value: 循环语句

key: else
value: 分支跳转

key: print
value: 打印信息


9-14 骰子 :模块 random 包含以各种方式生成随机数的函数,其中的 randint() 返回一个位于指定范围内的整数,例如,下面的代码返回一个 1~6 内的整数:
from random import randint
x = randint(1, 6)
请创建一个 Die 类,它包含一个名为 sides 的属性,该属性的默认值为 6 。编写一个名为 roll_die() 的方法,它打印位于 1 和骰子面数之间的随机数。创建一个 6 面的骰子,再掷 10 次。 创建一个 10 面的骰子和一个 20 面的骰子,并将它们都掷 10 次。

class Die():
    def __init__(self, sides=6):
        self.sides = sides
        self.num = 0

    def roll_die(self):
        self.num = randint(1, self.sides)
        print(self.num)


die_roll = Die()
die_roll.roll_die()
die_roll = Die(10)
die_roll.roll_die()
die_roll = Die(20)
die_roll.roll_die()

猜你喜欢

转载自blog.csdn.net/hjk120key3/article/details/82775019