动手试一试(ch.9)

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




猜你喜欢

转载自blog.csdn.net/weixin_38196217/article/details/79630372