美文网首页
Python入门到实践课后习题第九章

Python入门到实践课后习题第九章

作者: 水中小船 | 来源:发表于2019-03-04 16:20 被阅读0次

    '''
    9-1 餐馆 :创建一个名为 Restaurant 的类,其方法 init() 设置两个属性: restaurant_name 和 cuisine_type 。
    创建一个名为 describe_restaurant() 的方法和一个名为 open_restaurant() 的方法,
    其中前者打印前述两项信息,而后者打印一条消息,指出餐馆正在营业。
    根据这个类创建一个名为 restaurant 的实例,
    分别打印其两个属性,再调用前述两个方法。
    '''
    class Restaurant():
    def init(self,restaurant_name,cuisine_type):
    self.restaurant_name = restaurant_name
    self.cuisine_type = cuisine_type
    def describe_restaurant(self):
    print('restaurant name is '+self.restaurant_name.title())
    print('The restaurant cuisine type is '+self.cuisine_type.title())
    def open_restaurant(self):
    print('The restaurant is open. ')
    restaurant = Restaurant('laoxiangji','chicken soup')
    print(restaurant.restaurant_name)
    print(restaurant.cuisine_type)
    restaurant.describe_restaurant()
    restaurant.open_restaurant()

    """
    9-2 三家餐馆 :根据你为完成练习 9-1 而编写的类创建三个实例,并对每个实例调用方法 describe_restaurant() 。
    """
    class Restaurant():
    def init(self,restaurant_name,cuisine_type):
    self.restaurant_name = restaurant_name
    self.cuisine_type = cuisine_type
    def describe_restaurant(self):
    print('restaurant name is '+self.restaurant_name.title())
    print('The restaurant cuisine type is '+self.cuisine_type.title())
    def open_restaurant(self):
    print('The restaurant is open. ')
    restaurant_1 = Restaurant('laoxiangji','chicken soup')
    restaurant_1.describe_restaurant()
    restaurant_2 = Restaurant('xiaolongkan','Broiled lobster')
    restaurant_2.describe_restaurant()
    restaurant_3 = Restaurant('shudaxia','spicy hot pot ')
    restaurant_3.describe_restaurant()
    """
    9-3 用户 :创建一个名为 User 的类,其中包含属性 first_name 和 last_name ,
    还有用户简介通常会存储的其他几个属性。在类 User 中定义一个名为 describe_user() 的方法,
    它打印用户信息摘要;再定义一个名为 greet_user() 的方法,它向用户发出个性化的问候。
    """

    class User():
    def init(self, first_name, last_name):
    self.first_name = first_name
    self.last_name = last_name
    self.gender = 'male'
    self.age = 0

    def describe_user(self):
        long_info = self.first_name + ' ' \
                    + self.last_name + ' is ' \
                    + str(self.age) + ' yesrs old, and he is a ' \
                    + self.gender
        print(long_info)
    
    def greet_user(self):
        user_info = self.first_name + ' ' + self.last_name
        print(user_info.title() + ',welcom to access to your personal space.')
    

    user = User('zhang', 'san')
    user.age = 20
    user.gender = 'femal'
    user.describe_user()
    user.greet_user()
    """
    9-4 就餐人数 :在为完成练习 9-1 而编写的程序中,添加一个名为 number_served 的属性,并将其默认值设置为 0 。
    根据这个类创建一个名为 restaurant 的实例;打印有多少人在这家餐馆就餐过,然后修改这个值并再次打印它。
    添加一个名为 set_number_served() 的方法,它让你能够设置就餐人数。调用这个方法并向它传递一个值,然后再次打印这个值。
    添加一个名为 increment_number_served() 的方法,它让你能够将就餐人数递增。
    调用这个方法并向它传递一个这样的值:你认为这家餐馆每天可能接待的就餐人数。
    """
    from restaurant import Restaurant
    class Restaurant_1(Restaurant):
    def init(self,restaurant_name, cuisine_type):
    super().init(restaurant_name, cuisine_type)
    self.number_served = 0
    restaurant = Restaurant_1('laoxiangji','chicken soup')
    print(restaurant.number_served)
    restaurant.number_served = 26
    print(restaurant.number_served)
    '''
    另一种做法:
    from restaurant import Restaurant
    restaurant = Restaurant('laoxiangji','chicken soup')
    restaurant.number_served = 0
    print(restaurant.number_served)
    restaurant.number_served = 26
    print(restaurant.number_served)
    添加属性可以直接修改,但是添加方法则需要继承父类然后再添加方法。
    '''

    子类继承父类之后直接在子类中添加#

    from restaurant import Restaurant
    class Restaurant_2(Restaurant):
    def init(self,restaurant_name,cuisine_type):
    super().init(restaurant_name,cuisine_type)

    def set_number_served(self,number_served):
        self.number_served = number_served
        print('The number of diners is '+str(self.number_served))
    def increment_number_served(self,number):
        self.number_served += number
    def read_number_served(self):
        print('Total number of diners is '+str(self.number_served))
    

    restaueant_2 = Restaurant_2('laoxiangji','chicken soup')
    restaueant_2.set_number_served(28)
    restaueant_2.increment_number_served(32)
    restaueant_2.read_number_served()
    '''
    另一种做法:将要添加的属性抽象出来当成一个类,然后将这个类作为一个属性赋给子类。
    from restaurant import Restaurant
    class Restaurant_2(Restaurant):
    def init(self,restaurant_name,cuisine_type):
    super().init(restaurant_name,cuisine_type)
    self.number_served = Restaurant_3()
    class Restaurant_3():
    def init(self, number_diner=0,limitation=90):
    self.number_diner = number_diner
    self.limitation = limitation
    def set_number_served(self):
    print('The largest number of diners is ' + str(self.limitation))
    def increment_number_served(self, increment_number):
    self.number_diner += increment_number
    def read_number_served(self):
    print('Total number of diners is ' + str(self.number_diner))
    restaueant_2 = Restaurant_2('laoxiangji','chicken soup')
    restaueant_2.number_served.set_number_served()
    restaueant_2.number_served.increment_number_served(30)
    restaueant_2.number_served.read_number_served()
    '''
    """
    9-5 尝试登录次数 :在为完成练习 9-3 而编写的 User 类中,添加一个名为 login_attempts 的属性。
    编写一个名为 increment_login_attempts() 的方法,它将属性 login_attempts 的值加 1 。
    再编写一个名为 reset_login_attempts() 的方法,它将属性 login_attempts 的值重置为 0 。
    根据 User 类创建一个实例,再调用方法 increment_login_attempts() 多次。打印属性 login_attempts 的值,
    确认它被正确地递增;然后,调用方法 reset_login_attempts() ,
    并再次打印属性 login_attempts 的值,确认它被重置为 0 。
    """
    from user import User
    class User_1(User):
    def init(self,first_name, last_name):
    super().init(first_name, last_name)
    self.login_attempts = 0
    def increment_login_attempts(self,number):
    self.login_attempts += number
    def reset_login_attempts(self):
    if self.login_attempts != 0:
    self.login_attempts = 0

    user_1 = User_1('zhang', 'san')
    user_1.age = 20
    user_1.gender = 'femal'
    i=10
    while i>0:
    user_1.increment_login_attempts(1)
    i -= 1
    print(user_1.login_attempts)
    user_1.reset_login_attempts()
    print(user_1.login_attempts)
    """
    9-6 冰淇淋小店 :冰淇淋小店是一种特殊的餐馆。编写一个名为 IceCreamStand 的类,
    让它继承你为完成练习 9-1 或练习 9-4 而编写的 Restaurant 类。这两个版本的 Restaurant 类都可以,
    挑选你更喜欢的那个即可。添加一个名为 flavors 的属性,用于存储一个由各种口味的冰淇淋组成的列表。
    编写一个显示这些冰淇淋的方法。创建一个 IceCreamStand 实例,并调用这个方法。
    """
    from restaurant import Restaurant
    class IceCreamStand(Restaurant):
    def init(self,restaurant_name, cuisine_type):
    super().init(restaurant_name, cuisine_type)
    self.flavors = flavors_info#属性可以存储类,那当然也可以存储列表#
    def display_icecream(self):
    print(self.flavors)
    flavors_info = ['strawberry','chocolate','jackfruit']
    icecreamstand = IceCreamStand('laoxiangji','chicken soup')
    icecreamstand.flavors = flavors_info
    icecreamstand.display_icecream()

    """
    9-7 管理员 :管理员是一种特殊的用户。编写一个名为 Admin 的类,让它继承你为完成练习 9-3 或练习 9-5 而编写的 User 类。
    添加一个名为 privileges 的属性,用于存储一个由字符串(如 "can add post" 、 "can delete post" 、
    "can ban user" 等)组成的列表。编写一个名为 show_privileges() 的方法,
    它显示管理员的权限。创建一个 Admin 实例,并调用这个方法。
    """
    from user import User
    class Admin(User):
    def init(self,first_name, last_name):
    super().init(first_name, last_name)
    self.privileges = string
    def show_privileges(self):
    print(self.privileges)
    string = ["can add post", "can delete post","can ban user"]
    admin = Admin('zhang', 'san')
    admin.age = 20
    admin.gender = 'femal'
    admin.show_privileges()
    """
    9-8 权限 :编写一个名为 Privileges 的类,它只有一个属性 —— privileges ,
    其中存储了练习 9-7 所说的字符串列表。将方法 show_privileges() 移到这个类中。
    在 Admin 类中,将一个 Privileges 实例用作其属性。创建一个 Admin 实例,
    并使用方法 show_privileges() 来显示其权限。
    """
    from user import User

    class Admin(User):
    def init(self,first_name, last_name):
    super().init(first_name, last_name)
    self.privileges = Privileges()

    class Privileges():
    def init(self):
    self.limit = string

    def show_privileges(self):
        print(self.limit)
    

    string = ["can add post", "can delete post","can ban user"]
    admin = Admin('zhang', 'san')
    admin.age = 20
    admin.gender = 'femal'
    permissions = Privileges()
    admin.privileges.show_privileges()

    '''
    class Privileges():
    def init(self,limit):
    self.limit = limit
    调用函数admin.privileges.show_privileges(string)时会出现错误:
    missing 1 required positional argument: 'limit'为什么??
    因为self是一个指向实例本身的引用,换句话说,如果这个类没有实例化则这个类只有self这一个
    形参,没有其他形参。本例中Privileges()类是一个方法的抽像,本身不需要实例化,所以初始化
    只有一个self形参无其他形参。或者有其他形参,但是形参为默认值,这样就不需要实例化传递参数:
    string = ["can add post", "can delete post","can ban user"]
    ...
    class Privileges():
    def init(self,limit=string):
    self.limit = limit
    '''
    """
    9-9 电瓶升级 :在本节最后一个 electric_car.py 版本中,给 Battery 类添加一个名为 upgrade_battery() 的方法。
    这个方法检查电瓶容量,如果它不是 85 ,就将它设置为 85 。创建一辆电瓶容量为默认值的电动汽车,
    调用方法 get_range() ,然后对电瓶进行升级,并再次调用 get_range() 。
    你会看到这辆汽车的续航里程增加了。
    """
    from car import Car
    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_rang(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()

    electriccar = ElectricCar('tesla','model s','2016')
    electriccar.battery.get_rang()
    electriccar.battery.upgrade_battery()
    electriccar.battery.get_rang()
    """
    9-10 导入 Restaurant 类 :将最新的 Restaurant 类存储在一个模块中。在另一个文件中,
    导入 Restaurant 类,创建一个 Restaurant 实例,并调用 Restaurant 的一个方法,
    以确认 import 语句正确无误。
    """
    from restaurant import Restaurant
    restaurant = Restaurant('laoxiangji','chicken soup')
    restaurant.describe_restaurant()
    """
    9-11 导入 Admin 类 :以为完成练习 9-8 而做的工作为基础,将 User 、 Privileges 和 Admin
    类存储在一个模块中,再创建一个文件,在其中创建一个 Admin 实例
    并对其调用方法 show_privileges() ,以确认一切都能正确地运行。
    """
    from admin import *
    admin = Admin('zhang', 'san')
    admin.age = 20
    admin.gender = 'femal'
    admin.privileges.show_privileges()

    """
    9-12 多个模块 :将 User 类存储在一个模块中,并将 Privileges 和 Admin 类存储在另一个模块中。
    再创建一个文件,在其中创建一个 Admin 实例,并对其调用方法 show_privileges() ,
    以确认一切都依然能够正确地运行。
    """
    from user import User
    from admin import Admin,Privileges
    admin = Admin('zhang', 'san')
    admin.age = 20
    admin.gender = 'femal'
    admin.privileges.show_privileges()

    相关文章

      网友评论

          本文标题:Python入门到实践课后习题第九章

          本文链接:https://www.haomeiwen.com/subject/yipiuqtx.html