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 =
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()
print(Restaurant_1.number_served)
Restaurant_1.increment_number_served()
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 =
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=):
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 == :
range =
elif self.battery_size == :
range =
message = "This car can go approximately " + str(range)
message += " miles on a full charge."
print(message)
def upgrade_battery(self):
if self.battery_size != :
self.battery_size =
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
self.battery = Battery()
my_tesla = ElectricCar('tesla', 'model s', )
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 =
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()
print(Restaurant_1.number_served)
Restaurant_1.increment_number_served()
print(Restaurant_1.number_served
9-14
子產品random 包含以各種方式生成随機數的函數,其中的randint() 傳回一個位于指定範圍内的整數,例如,下面的代碼傳回一個1~6内的整數:
from random import randint
x = randint(, )
請建立一個Die 類,它包含一個名為sides 的屬性,該屬性的預設值為6。編寫一個名為roll_die() 的方法,它列印位于1和骰子面數之間的随機數。建立一個6面的骰子,再擲10次。 建立一個10面的骰子和一個20面的骰子,并将它們都擲10次。
from random import randint
class Die():
def __init__(self, _sides = ):
self.sides = _sides
def roll_die(self):
for i in range():
print(randint(, self.sides))
Die_1 = Die()
Die_1.roll_die()
Die_2 = Die()
Die_2.roll_die()
Die_3 = Die()
Die_3.roll_die()