9-1
创建一个名为Restaurant 的类,其方法init() 设置两个属性:restaurant_name 和cuisine_type 。创建一个名为describe_restaurant() 的方法和一个名为open_restaurant() 的方法,其中前者打印前述两项信息,而后者打印一条消息,指出餐馆正在营业。
class Restaurant():
def __init__(self, _name, _type):
self.restaurant_name = _name
self.cuisine_type = _type
def describe_restaurant(self):
print('restaurant_name:', self.restaurant_name)
print('cuisine_type:', self.cuisine_type)
def open_restaurant(self):
print('Restaurant is open.')
if __name__ == '__main__':
Restaurant_1 = Restaurant('NAME', 'TYPE')
print(Restaurant_1.restaurant_name, Restaurant_1.cuisine_type)
Restaurant_1.describe_restaurant()
Restaurant_1.open_restaurant()
9-2
根据你为完成练习9-1而编写的类创建三个实例,并对每个实例调用方法describe_restaurant() 。
class Restaurant():
def __init__(self, _name, _type):
self.restaurant_name = _name
self.cuisine_type = _type
def describe_restaurant(self):
print('restaurant_name:', self.restaurant_name)
print('cuisine_type:', self.cuisine_type)
def open_restaurant(self):
print('Restaurant is open.')
if __name__ == '__main__':
Restaurant_1 = Restaurant('NAME_1', 'TYPE_1')
Restaurant_2 = Restaurant('NAME_2', 'TYPE_2')
Restaurant_3 = Restaurant('NAME_3', 'TYPE_3')
Restaurant_1.describe_restaurant()
Restaurant_2.describe_restaurant()
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
def describe_user(self):
print('first_name:', self.first_name)
print('last_name:', self.last_name)
def greet_user(self):
print('Hello,', self.first_name, self.last_name)
if __name__ == '__main__':
User_1 = User('San', 'Zhang')
User_2 = User('Si', 'Li')
User_3 = User('Wu', 'Wang')
User_1.describe_user()
User_1.greet_user()
User_2.describe_user()
User_2.greet_user()
User_3.describe_user()
User_3.greet_user()
9-4
在为完成练习9-1而编写的程序中,添加一个名为number_served 的属性,并将其默认值设置为0。根据这个类创建一个名为restaurant 的实例;打印有多少人在这家餐馆就餐过,然后修改这个值并再次打印它。
添加一个名为set_number_served() 的方法,它让你能够设置就餐人数。调用这个方法并向它传递一个值,然后再次打印这个值。
添加一个名为increment_number_served() 的方法,它让你能够将就餐人数递增。调用这个方法并向它传递一个这样的值:你认为这家餐馆每天可能接待的就餐人数。
class Restaurant():
def __init__(self, _name, _type):
self.restaurant_name = _name
self.cuisine_type = _type
self.number_served = 0
def describe_restaurant(self):
print('restaurant_name:', self.restaurant_name)
print('cuisine_type:', self.cuisine_type)
def open_restaurant(self):
print('Restaurant is open.')
def set_number_served(self, _number_served):
self.number_served = _number_served
def increment_number_served(self, _increase_number):
self.number_served += _increase_number
if __name__ == '__main__':
Restaurant_1 = Restaurant('NAME', 'TYPE')
Restaurant_1.set_number_served(80)
print(Restaurant_1.number_served)
Restaurant_1.increment_number_served(20)
print(Restaurant_1.number_served
9-6
冰淇淋小店是一种特殊的餐馆。编写一个名为IceCreamStand 的类,让它继承你为完成练习9-1或练习9-4而编写的Restaurant 类。这两个版本的Restaurant 类都可以,挑选你更喜欢的那个即可。添加一个名为flavors 的属性,用于存储一个由各种口味的冰淇淋组成的列表。编写一个显示这些冰淇淋的方法。创建一个IceCreamStand 实例,并调用这个方法。
class Restaurant():
def __init__(self, _name, _type):
self.restaurant_name = _name
self.cuisine_type = _type
def describe_restaurant(self):
print('restaurant_name:', self.restaurant_name)
print('cuisine_type:', self.cuisine_type)
def open_restaurant(self):
print('Restaurant is open.')
class IceCreamStand(Restaurant):
def __init__(self, _name, _type):
super().__init__(_name, _type)
self.flavors = ['orange', 'leamon', 'peach']
def show_flavors(self):
for flavor in self.flavors:
print(flavor)
if __name__ == '__main__':
Restaurant_1 = IceCreamStand('IceCreamHouse', 'IceCream')
Restaurant_1.show_flavors()
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):
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-10
将最新的Restaurant 类存储在一个模块中。在另一个文件中,导入Restaurant 类,创建一个Restaurant 实例,并调用Restaurant 的一个方法,以确认import 语句正确无误。
# restaurant.py
class Restaurant():
def __init__(self, _name, _type):
self.restaurant_name = _name
self.cuisine_type = _type
self.number_served = 0
def describe_restaurant(self):
print('restaurant_name:', self.restaurant_name)
print('cuisine_type:', self.cuisine_type)
def open_restaurant(self):
print('Restaurant is open.')
def set_number_served(self, _number_served):
self.number_served = _number_served
def increment_number_served(self, _increase_number):
self.number_served += _increase_number
# my_restaurant.py
from restaurant import Restaurant
Restaurant_1 = Restaurant('NAME', 'TYPE')
Restaurant_1.set_number_served(80)
print(Restaurant_1.number_served)
Restaurant_1.increment_number_served(20)
print(Restaurant_1.number_served
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):
for i in range(10):
print(randint(1, self.sides))
Die_1 = Die()
Die_1.roll_die()
Die_2 = Die(10)
Die_2.roll_die()
Die_3 = Die(20)
Die_3.roll_die()