Python编程:从入门到实践 课后习题-第九章 类
作者:互联网
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()) #在类中创建方法是调用形参需加上self,可供类中所有方法使用
print("cuisine type is "+self.cuisine_type)
def open_restaurant(self):
print("This restaurant is open!")
restaurant=Restaurant("Noodle Room","baking") #创建实例
restaurant.describe_restaurant() #调用方法
restaurant.open_restaurant()
运行结果:
restaurant name is Noodle Room
cuisine type is baking
This restaurant is open!
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()) #在类中创建方法是调用形参需加上self,可供类中所有方法使用
print("cuisine type is "+self.cuisine_type)
def open_restaurant(self):
print("This restaurant is open!")
restaurant=Restaurant("Noodle Room","baking") #创建实例
restaurant1=Restaurant("面包","烘烤")
restaurant2=Restaurant("馒头","蒸煮")
restaurant.describe_restaurant() #调用方法
restaurant1.describe_restaurant()
restaurant2.describe_restaurant()
运行结果:
restaurant name is Noodle Room
cuisine type is baking
restaurant name is 面包
cuisine type is 烘烤
restaurant name is 馒头
cuisine type is 蒸煮
9-3 用户 :创建一个名为User 的类,其中包含属性first_name 和last_name ,还有用户简介通常会存储的其他几个属性。在类User 中定义一个名
为describe_user() 的方法,它打印用户信息摘要;再定义一个名为greet_user() 的方法,它向用户发出个性化的问候。
创建多个表示不同用户的实例,并对每个实例都调用上述两个方法。
class User():
def __init__(self,first_name,last_name,age):
self.first_name=first_name
self.last_name=last_name
self.age=age
def describe_user(self):
print("First name is "+self.first_name.title())
print("Last name is "+ self.last_name.title())
print("Age is "+str(self.age)) #字符串无法和整型直接连接,需要把整型转换成字符串类型
def greet_user(self):
print("Hello "+ self.first_name.title() + "·" + self.last_name.title()+"!Who "+str(self.age)+" years old person!")
user_A=User("bob","bing",27)
user_B=User("alice","tim",17)
user_A.describe_user()
user_B.describe_user()
user_A.greet_user()
user_B.greet_user()
运行结果:
First name is Bob
Last name is Bing
Age is 27
First name is Alice
Last name is Tim
Age is 17
Hello Bob·Bing!Who 27 years old person!
Hello Alice·Tim!Who 17 years old person!
9-4 就餐人数 :在为完成练习9-1而编写的程序中,添加一个名为number_served 的属性,并将其默认值设置为0。根据这个类创建一个名为restaurant 的实例;打印有多少人在这家餐馆就餐过,然后修改这个值并再次打印它。
添加一个名为set_number_served() 的方法,它让你能够设置就餐人数。调用这个方法并向它传递一个值,然后再次打印这个值。
添加一个名为increment_number_served() 的方法,它让你能够将就餐人数递增。调用这个方法并向它传递一个这样的值:你认为这家餐馆每天可能接待的就餐人数。
class Restaurant():
def __init__(self,restaurant_name,cuisine_type):
self.restaurant_name=restaurant_name
self.cuisine_type=cuisine_type
self.number_server=0 #当前人数
self.increse_number=0 #增加的人数
def describe_restaurant(self):
print("restaurant name is "+self.restaurant_name.title())
print("cuisine type is "+self.cuisine_type)
def open_restaurant(self):
print("This restaurant is open!")
def increment_number_served(self, number): #增加的人数
self.increse_number=number
print("增加的人数为:"+str(self.increse_number))
def set_number_serverd(self): #当前人数
self.number_server+=self.increse_number
print("当前人数为:"+str(self.number_server))
restaurant=Restaurant("Noodle Room","baking")
restaurant.number_server=20
restaurant.increment_number_served(5)
restaurant.set_number_serverd()
# print("当前人数为:"+str(restaurant.number_server))
restaurant.increment_number_served(6) #多次进入
restaurant.set_number_serverd()
运行结果:
增加的人数为:5
当前人数为:25
增加的人数为:6
当前人数为:31
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):
self.first_name=first_name
self.last_name=last_name
self.login_attempts=0
def increment_attempts(self):
self.login_attempts=self.login_attempts+1
print(self.login_attempts)
def reset_login_attempts(self):
self.login_attempts=0
print(self.login_attempts)
numberA=User("A","B")
# numberA.login_attempts=5
numberA.increment_attempts()
numberA.increment_attempts()
numberA.increment_attempts()
numberA.reset_login_attempts()
运行结果:
1
2
3
0
9-6 冰淇淋小店 :冰淇淋小店是一种特殊的餐馆。编写一个名为IceCreamStand 的类,让它继承你为完成练习9-1或练习9-4而编写的Restaurant 类。这两个版本的Restaurant 类都可以,挑选你更喜欢的那个即可。添加一个名为flavors 的属性,用于存储一个由各种口味的冰淇淋组成的列表。编写一个显示这些冰淇淋的方法。创建一个IceCreamStand 实例,并调用这个方法。
# 冰淇淋小店是一种特殊的餐馆。编写一个名为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
def describe_restaurant(self):
print("restaurant name is "+self.restaurant_name.title())
print("cuisine type is "+self.cuisine_type)
def open_restaurant(self):
print("This restaurant is open!")
class IceCreamStand(Restaurant):
def __init__(self,restaurant_name,cuisine_type):
super().__init__(restaurant_name,cuisine_type)
self.flavors=["草莓","巧克力"]
print(self.flavors)
def add_flavors(self,flavors_type): #在列表中增加口味
self.flavors.append(flavors_type)
print(self.flavors)
restaurant=IceCreamStand("Noodle Room","baking")
restaurant.add_flavors("香蕉")
运行结果:
['草莓', '巧克力']
['草莓', '巧克力', '香蕉']
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):
self.first_name=first_name
self.last_name=last_name
self.age=age
def describe_user(self):
print("First name is "+self.first_name.title())
print("Last name is "+ self.last_name.title())
print("Age is "+str(self.age)) #字符串无法和整型直接连接,需要把整型转换成字符串类型
class Admin(User):
def __init__(self,first_name,last_name,age):
super().__init__(first_name,last_name,age) #调用super(),不需要加上self
self.privileges=[]
def show_privileges(self,privileges_type):
self.privileges.append(privileges_type)
print(self.privileges)
admin_a=Admin("bob","bing",27)
admin_a.show_privileges("reading")
运行结果:
['reading']
9-8 权限 :编写一个名为Privileges 的类,它只有一个属性——privileges ,其中存储了练习9-7 所说的字符串列表。将方法show_privileges() 移到这个类中。在Admin 类中,将一个Privileges 实例用作其属性。创建一个Admin 实例,并使用方法show_privileges() 来显示其权限。
class User():
def __init__(self,first_name,last_name,age):
self.first_name=first_name
self.last_name=last_name
self.age=age
def describe_user(self):
print("First name is "+self.first_name.title())
print("Last name is "+ self.last_name.title())
print("Age is "+str(self.age))
class Admin(User):
def __init__(self,first_name,last_name,age):
super().__init__(first_name,last_name,age) #调用super(),不需要加上self
self.privileges=[]
self.abc=Privileges()
class Privileges():
def __init__(self):
self.privileges = []
def show_privileges(self, privileges_type):
self.privileges.append(privileges_type)
print(self.privileges)
admin_a=Admin("bob","bing",27)
admin_a.abc.show_privileges("reading")
运行结果:
['reading']
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
# self.login_attempts = 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):
if self.battery_size == 85:
print("电瓶容量为85.")
else: #else后面不加条件
self.battery_size = 85
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
self.battery = Battery()
def fill_gas_tank():
print("This car doesn't need a gas tank!")
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.describe_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.
This car has a 85-kWh battery.
This car can go approximately 270 miles on a full charge.
标签:__,name,restaurant,Python,self,课后,print,习题,def 来源: https://blog.csdn.net/x_9992/article/details/121089941