Advertisement

Python笔记 第九章

阅读量:

第九章

练习题

9-1 餐馆

创建一个名为Restaurant的类,其方法__init__()设置两个属性:restaurant_name和cuisine_type。创建一个名为describe_restaurant()的方法和一个名为open_restaurant()的方法,其中前者打印前述两项信息,而后者打印一条消息,指出餐馆正在营业。根据这个类创建一个名为restaurant的实例,分别打印其两个属性,再调用前述两个方法。

复制代码
    class Restaurant():
    def __init__(self,restaurant_name,cuisine_type):
        self.name=restaurant_name
        self.type=cuisine_type
    
    def describe_restaurant(self):
        print("This is "+self.name.title()+"and it's a "+self.type+" restaurant.")
    
    def open_restaurant(self):
        print("The restauarnt is open now")
    
    restaunrant=Restaurant('KingLong','Chinese')
    print("The name of the restaurant is "+restaunrant.name.title())
    print("It's a "+restaunrant.type+" restaurant.")
    restaunrant.describe_restaurant()
    restaunrant.open_restaurant()
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

9-2 三家餐馆

根据你为完成练习9-1而编写的类创建三个实例,并对每个实例调用方法describe_restaurant()。

复制代码
    class Restaurant():
    def __init__(self,restaurant_name,cuisine_type):
        self.name=restaurant_name
        self.type=cuisine_type
    
    def describe_restaurant(self):
        print("This is "+self.name.title()+"and it's a "+self.type+" restaurant.")
    
    def open_restaurant(self):
        print("The restauarnt is open now")
    
    restaunrant1=Restaurant('KingLong','Chinese')
    restaunrant2=Restaurant('Hitomi','Japanese')
    restaunrant3=Restaurant('KFC','fast food')
    restaunrant1.describe_restaurant()
    restaunrant2.describe_restaurant()
    restaunrant3.describe_restaurant()
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

9-3 用户

创建一个名为User的类,其中包含属性first_name和last_name,还有用户简介通常会存储的其他几个属性。在类User中定义一个名为describe_user()的方法,它打印用户信息摘要;再定义一个名为greet_user()的方法,它向用户发出个性化的问候。创建多个表示不同用户的实例,并对每个实例都调用上述两个方法。

复制代码
    class User():
    def __init__(self,first_name,last_name,age,gender):
        self.first=first_name
        self.last=last_name
        self.age=str(age)
        self.gender=gender
    def describe_user(self):
        print(self.last.title()+" "+self.first+" is a "+self.gender+".")
        print("He's "+self.age+" years old.")
    def greet_user(self):
        print("Hello,"+self.first)
    
    seung_woo=User('seungwoo','han',27,'man')
    seung_sik=User('seungsik','kang',26,'man')
    seung_woo.greet_user()
    seung_woo.describe_user()
    seung_sik.greet_user()
    seung_sik.describe_user()
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

9-4 就餐人数

在为完成练习9-1而编写的程序中,添加一个名为number_served的属性,并将其默认值设置为0。根据这个类创建一个名为restaurant的实例;打印有多少人在这家餐馆就餐过,然后修改这个值并再次打印它。
添加一个名为set_number_served()的方法,它让你能够设置就餐人数。调用这个方法并向它传递一个值,然后再次打印这个值。
添加一个名为increment_number_served()的方法,它让你能够将就餐人数递增。调用这个方法并向它传递一个这样的值:你认为这家餐馆每天可能接待的就餐人数。

复制代码
    class Restaurant():
    def __init__(self,restaurant_name,cuisine_type):
        self.name=restaurant_name
        self.type=cuisine_type
        self.number_served=0
    def describe_restaurant(self):
        print("This is "+self.name.title()+"and it's a "+self.type+" restaurant.")
    
    def open_restaurant(self):
        print("The restauarnt is open now")
    """设置就餐人数"""
    def set_number_served(self,served_number):
        if self.number_served<served_number:
            self.number_served=served_number
        else:
            print("you can't decrease the number.")
      
    """设置递增"""
    def increment_number_served(self,increment_served):
        if increment_served>=0:
            self.number_served+=increment_served
        else:
            print("you can't decrease the number.")
    
    restaunrant=Restaurant('KingLong','Chinese')
    print(str(restaunrant.number_served)+" gusets had been served" )
    restaunrant.number_served=10
    print(str(restaunrant.number_served)+" gusets had been served" )
    restaunrant.set_number_served(20)
    print(str(restaunrant.number_served)+" gusets had been served" )
    restaunrant.set_number_served(15)
    print(str(restaunrant.number_served)+" gusets had been served" )
    restaunrant.increment_number_served(5)
    print(str(restaunrant.number_served)+" gusets had been served" )
    restaunrant.increment_number_served(-5)
    print(str(restaunrant.number_served)+" gusets had been 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。

复制代码
    class User():
    def __init__(self,first_name,last_name,age,gender):
        self.first=first_name
        self.last=last_name
        self.age=str(age)
        self.gender=gender
        self.login_attemps=0
    def describe_user(self):
        print(self.last.title()+" "+self.first+" is a "+self.gender+".")
        print("He's "+self.age+" years old.")
    def greet_user(self):
        print("Hello,"+self.first)
    """增加登录次数"""
    def increment_login_attempts(self):
        self.login_attemps+=1
    """重置登录次数"""
    def reset_login_attempts(self):
        self.login_attemps=0
    
    seung_woo=User('seungwoo','han',27,'man')
    seung_woo.increment_login_attempts()
    seung_woo.increment_login_attempts()
    seung_woo.increment_login_attempts()
    seung_woo.increment_login_attempts()
    print(seung_woo.first+" tried to login for "+str(seung_woo.login_attemps)+" times.")
    seung_woo.reset_login_attempts()
    print(seung_woo.first+" tried to login for "+str(seung_woo.login_attemps)+" times.")
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

9-6 冰淇淋小店

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

复制代码
    class Restaurant():
    def __init__(self,restaurant_name,cuisine_type):
        self.name=restaurant_name
        self.type=cuisine_type
        self.number_served=0
    def describe_restaurant(self):
        print("This is "+self.name.title()+"and it's a "+self.type+" restaurant.")
    
    def open_restaurant(self):
        print("The restauarnt is open now")
    """设置就餐人数"""
    def set_number_served(self,served_number):
        if self.number_served<served_number:
            self.number_served=served_number
        else:
            print("you can't decrease the number.")
        return self.number_served
    """设置递增"""
    def increment_number_served(self,increment_served):
        if increment_served>=0:
            self.number_served+=increment_served
        else:
            print("you can't decrease the number.")
    
    class IceCreamStand(Restaurant):
    def __init__(self,restaurant_name,cuisine_type):
        super().__init__(restaurant_name,cuisine_type)
        self.flavor = ['vanilla','blueberry','mint chocolate','milk']
    def describe_flavor(self):
        print("We have these flavors")
        for flavor in self.flavor:
            print(flavor.title())
    
    icecreamstand=IceCreamStand('sweetie','ice cream')
    icecreamstand.describe_flavor()
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

9-7 管理员

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

复制代码
    class User():
    def __init__(self,first_name,last_name,age,gender):
        self.first=first_name
        self.last=last_name
        self.age=str(age)
        self.gender=gender
    def describe_user(self):
        print(self.last.title()+" "+self.first+" is a "+self.gender+".")
        print("He's "+self.age+" years old.")
    def greet_user(self):
        print("Hello,"+self.first)
    
    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 deletepost","can ban user"]
    def show_privileges(self):
        print("Admin can do:")
        for privilege in self.privileges:
            print(privilege)
    admin=Admin('seungwoo','han',27,'man')
    admin.show_privileges()
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

9-8 权限

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

复制代码
    class User():
    def __init__(self,first_name,last_name,age,gender):
        self.first=first_name
        self.last=last_name
        self.age=str(age)
        self.gender=gender
    
    def describe_user(self):
        print(self.last.title()+" "+self.first+" is a "+self.gender+".")
        print("He's "+self.age+" years old.")
    def greet_user(self):
        print("Hello,"+self.first)
    
    class Privileges():
    def __init__(self):
        self.privileges = ["can add post", "can deletepost", "can ban user"]
    def show_privileges(self):
        print("Admin can do:")
        for privilege in self.privileges:
            print(privilege)
    
    class Admin(User):
    def __init__(self,first_name,last_name,age,gender):
        super().__init__(first_name,last_name,age,gender)
        self.privileges=Privileges()
    
    admin=Admin('seungwoo','han',27,'man')
    admin.privileges.show_privileges()
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

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 ca 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)
    my_tesla.battery.get_range()
    my_tesla.battery.upgrade_battery()
    my_tesla.battery.get_range()
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

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次。

复制代码
    from random import randint
    class Die():
    def __init__(self,sides=6):
        self.sides=sides
    def roll_die(self):
        die_number=randint(1,self.sides)
        print(str(die_number))
    die=Die()
    print("Now Let's roll the die(6 sides) ten times")
    for i in range(1,11):
    die.roll_die()
    die_10sides=Die(10)
    print("Now Let's roll the die(10 sides) ten times")
    for i in range(1,11):
    die_10sides.roll_die()
    die_20sides=Die(20)
    print("Now Let's roll the die(20 sides) ten times")
    for i in range(1,11):
    die_20sides.roll_die()
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

标准库参考:
python 3 module of the week
https://pymotw.com/3/

全部评论 (0)

还没有任何评论哟~