9-1 餐馆 :创建一个名为Restaurant 的类,其方法__init__() 设置两个属性:restaurant_name 和cuisine_type 。创建一个名 为describe_restaurant() 的方法和一个名为open_restaurant() 的方法,其中前者打印前述两项信息,而后者打印一条消息,指出餐馆正在营业。
根据这个类创建一个名为restaurant 的实例,分别打印其两个属性,再调用前述两个方法。
9-2 三家餐馆 :根据你为完成练习9-1而编写的类创建三个实例,并对每个实例调用方法describe_restaurant() 。
class Restaurant(): '''餐馆''' def __init__(self, res_name, res_type): '''constructor''' self.res_name = res_name self.res_type = res_type def describe(self): print('这是一家名为' + self.res_name + '的' + self.res_type) def open(self): print(self.res_name + '开始营业') KFC = Restaurant('肯德基', '洋快餐') print(KFC.res_name, KFC.res_type) KFC.describe() KFC.open() ZhenKF = Restaurant('真功夫', '中餐馆') print(ZhenKF.res_name, ZhenKF.res_type) ZhenKF.describe() ZhenKF.open() susi = Restaurant('回转寿司', '日本料理') print(susi.res_name, susi.res_type) susi.describe() susi.open()
输出:
肯德基 洋快餐 这是一家名为肯德基的洋快餐 肯德基开始营业 真功夫 中餐馆 这是一家名为真功夫的中餐馆 真功夫开始营业 回转寿司 日本料理 这是一家名为回转寿司的日本料理 回转寿司开始营业
9-4 就餐人数 :在为完成练习9-1而编写的程序中,添加一个名为number_served 的属性,并将其默认值设置为0。根据这个类创建一个名为restaurant 的实例;打印有多少人在这家餐馆就餐过,然后修改这个值并再次打印它。
添加一个名为set_number_served()的方法,它让你能够设置就餐人数。调用这个方法并向它传递一个值,然后再次打印这个值。
添加一个名为increment_number_served()的方法,它让你能够将就餐人数递增。调用这个方法并向它传递一个这样的值:你认为这家餐馆每天可能接待的就 餐人数。
class Restaurant(): '''餐馆''' def __init__(self, res_name, res_type): '''constructor''' self.res_name = res_name self.res_type = res_type self.number_served = 0 def describe(self): print('这是一家名为' + self.res_name + '的' + self.res_type) def open(self): print(self.res_name + '开始营业') def set_number_served(self, num): if num < self.number_served: print('你不能减少已服务的人数!') else: self.number_served = num def increment_number_served(self, incre): if incre < 0: print('增加人数不能为负!') else: self.number_served += incre def print_number_served(self): print(self.res_name + '共接待了' + str(self.number_served) + '名顾客') KFC = Restaurant('肯德基', '洋快餐') KFC.print_number_served() KFC.set_number_served(30) KFC.print_number_served() KFC.increment_number_served(20) KFC.print_number_served()输出:
肯德基共接待了0名顾客 肯德基共接待了30名顾客 肯德基共接待了50名顾客
9-6 冰淇淋小店 :冰淇淋小店是一种特殊的餐馆。编写一个名为IceCreamStand 的类,让它继承你为完成练习9-1或练习9-4而编写的Restaurant 类。这两个版本的Restaurant类都可以,挑选你更喜欢的那个即可。添加一个名为flavors的属性,用于存储一个由各种口味的冰淇淋组成的列表。编写一个显示这些冰淇淋 的方法。创建一个IceCreamStand 实例,并调用这个方法。
class Restaurant(): '''餐馆''' def __init__(self, res_name, res_type): '''constructor''' self.res_name = res_name self.res_type = res_type self.number_served = 0 def describe(self): print('这是一家名为' + self.res_name + '的' + self.res_type) def open(self): print(self.res_name + '开始营业') def set_number_served(self, num): if num < self.number_served: print('你不能减少已服务的人数!') else: self.number_served = num def increment_number_served(self, incre): if incre < 0: print('增加人数不能为负!') else: self.number_served += incre def print_number_served(self): print(self.res_name + '共接待了' + str(self.number_served) + '名顾客') class IceCreamStand(Restaurant): """冰淇淋小店""" def __init__(self, _name = '冰淇凌小店', _type = '零食店'): super().__init__(_name, _type) self.flavors = ['哈密瓜味', '香草味', '朱古力味', '香蕉味'] def show_flavors(self): print('冰淇淋口味:') for flavor in self.flavors: print(flavor, end = ' ') MC = IceCreamStand('麦当劳甜品站') MC.show_flavors()输出:
冰淇淋口味: 哈密瓜味 香草味 朱古力味 香蕉味
9-10 导入Restaurant类 :将最新的Restaurant 类存储在一个模块中。在另一个文件中,导入Restaurant 类,创建一个Restaurant 实例,并调 用Restaurant 的一个方法,以确认import 语句正确无误。
restaurant.py
'''餐馆类文件''' class Restaurant(): '''餐馆''' def __init__(self, res_name, res_type): '''constructor''' self.res_name = res_name self.res_type = res_type self.number_served = 0 def describe(self): print('这是一家名为' + self.res_name + '的' + self.res_type) def open(self): print(self.res_name + '开始营业') def set_number_served(self, num): if num < self.number_served: print('你不能减少已服务的人数!') else: self.number_served = num def increment_number_served(self, incre): if incre < 0: print('增加人数不能为负!') else: self.number_served += incre def print_number_served(self): print(self.res_name + '共接待了' + str(self.number_served) + '名顾客') class IceCreamStand(Restaurant): """冰淇淋小店""" def __init__(self, _name = '冰淇凌小店', _type = '零食店'): super().__init__(_name, _type) self.flavors = ['哈密瓜味', '香草味', '朱古力味', '香蕉味'] def show_flavors(self): print('冰淇淋口味:') for flavor in self.flavors: print(flavor, end = ' ')a.py
from restaurant import Restaurant, IceCreamStand MC = IceCreamStand('麦当劳甜品站') MC.show_flavors()输出:
冰淇淋口味: 哈密瓜味 香草味 朱古力味 香蕉味
9-13 使用OrderedDict :在练习6-4中,你使用了一个标准字典来表示词汇表。请使用OrderedDict 类来重写这个程序,并确认输出的顺序与你在字典中添加键 —值对的顺序一致。
from collections import OrderedDict d = OrderedDict() d[4] = 16 d[3] = 9 d[2] = 4 d[1] = 1 for i, j in d.items(): print(str(i), '*', str(i), '=', j)输出:
4 * 4 = 16 3 * 3 = 9 2 * 2 = 4 1 * 1 = 1
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(): """docstring for Die""" def __init__(self, pt = 6, d = 6): self.pt = pt self.d = d def rollDie(self): self.pt = randint(1, self.d) die = Die() for i in range(0, 10): die.rollDie() print('当前点数:', die.pt) die = Die(10, 10) for i in range(0, 10): die.rollDie() print('当前点数:', die.pt) die = Die(20, 20) for i in range(0, 10): die.rollDie() print('当前点数:', die.pt)输出:
当前点数: 3 当前点数: 2 当前点数: 3 当前点数: 6 当前点数: 5 当前点数: 2 当前点数: 4 当前点数: 1 当前点数: 4 当前点数: 3 当前点数: 10 当前点数: 5 当前点数: 9 当前点数: 6 当前点数: 6 当前点数: 3 当前点数: 9 当前点数: 4 当前点数: 9 当前点数: 3 当前点数: 15 当前点数: 11 当前点数: 13 当前点数: 17 当前点数: 10 当前点数: 15 当前点数: 10 当前点数: 13 当前点数: 5 当前点数: 2