栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

《Python编程从入门到实践 第二版》第九章练习

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《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(f'店名:{self.restaurant_name}')
		print(f'烹调类型:{self.cuisine_type}')

	def open_restaurant(self):
		print(f'{self.restaurant_name}餐厅正在营业!')

restaurant = Restaurant('河边烧烤','烧烤')
restaurant.describe_restaurant()
restaurant.open_restaurant()

9-2 三家餐馆 根据为完成练习9-1而编写的类创建三个实例,并对每个实例调用方法describe_restaurant() 。

mc_restaurant = Restaurant("McDonald's",'fastfood')
kfc_restaurant = Restaurant('KFC','fastfood')
pizzhub_restaurant = Restaurant('Pizza Hub','pizza')

mc_restaurant.describe_restaurant()
kfc_restaurant.describe_restaurant()
pizzhub_restaurant.describe_restaurant()

9-3 用户 创建一个名为User 的类,其中包含属性first_name 和last_name ,以及用户简介通常会存储的其他几个属性。在类User 中定义一个名为describe_user()的方法,用于打印用户信息摘要。再定义一个名为greet_user()的方法,用于向用户发出个性化的问候。
创建多个表示不同用户的实例,并对每个实例调用上述两个方法。

class User():
	"""docstring for User"""
	def __init__(self, first_name,last_name,sex,hobby):
		self.first_name = first_name
		self.last_name = last_name
		self.sex = sex
		self.hobby = hobby

	def describe_user(self):
		print(f'名:{self.first_name}')
		print(f'姓:{self.last_name}')
		print(f'性别:{self.sex}')
		print(f'爱好:{self.hobby}')

	def greet_user(self):
		print(f'Welcome {self.first_name}!')

user1 = User('Jimmy','Green','man','swimming')
user2 = User('Taylor','Swift','woman','music')

user1.describe_user()
user1.greet_user()
user2.describe_user()
user2.greet_user()

9-4 就餐人数 在为完成练习9-1而编写的程序中,添加一个名为number_served 的属性,并将其默认值设置为0。根据这个类创建一个名为restaurant 的实例。打印有多少人在这家餐馆就餐过,然后修改这个值并再次打印它。

class Restaurant():

	def __init__(self, restaurant_name,cuisine_type):
		self.restaurant_name = restaurant_name
		self.cuisine_type = cuisine_type
		self.number_served = 0

	def describe_restaurant(self):
		print(f'店名:{self.restaurant_name}')
		print(f'烹调类型:{self.cuisine_type}')

	def open_restaurant(self):
		print(f'{self.restaurant_name}餐厅正在营业!')


	# 添加一个名为set_number_served() 的方法,让你能够设置就餐人数。调用这个方法并向它传递一个值,然后再次打印这个值。
	def set_number_served(self):
		if self.number_served > 0:
			print(f'就餐过人数:{self.number_served}')
		else:
			print(f'无就餐人数')

    # 添加一个名为increment_number_served() 的方法,让你能够将就餐人数递增。调用这个方法并向它传递一个这样的值:你认为这家餐馆每天可能接待的就餐人数。
	def increment_number_served(self,number):
		if number > 0:
			self.number_served += number
			print(f'期望接待就餐人数:{self.number_served}')
		else:
			print(f'无期望接待人数')

restaurant = Restaurant('河边烧烤','烧烤')
restaurant.describe_restaurant()
restaurant.open_restaurant()
restaurant.number_served = 10
restaurant.set_number_served()
restaurant.increment_number_served(30)

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():
	"""docstring for User"""
	def __init__(self, first_name,last_name,sex,hobby):
		self.first_name = first_name
		self.last_name = last_name
		self.sex = sex
		self.hobby = hobby
		self.login_attempts = 0

	def describe_user(self):
		print(f'名:{self.first_name}')
		print(f'姓:{self.last_name}')
		print(f'性别:{self.sex}')
		print(f'爱好:{self.hobby}')

	def greet_user(self):
		print(f'Welcome {self.first_name}!')

	#编写一个名为increment_login_attempts()的方法,将属性login_attempts 的值加1
	def increment_login_attempts(self):
			self.login_attempts += 1
	
	# 编写一个名为reset_login_attempts()的方法,将属性login_attempts 的值重置为0
	def reset_login_attempts(self):
		self.login_attempts = 0

user = User('Jimmy','Green','man','swimming')

user.describe_user()
user.greet_user()

# 调用方法increment_login_attempts()
user.increment_login_attempts()
# 打印属性login_attempts的值
print(user.login_attempts)

# 调用方法reset_login_attempts()
user.reset_login_attempts()
# 将属性login_attempts 的值重置为0
print(user.login_attempts)

user1 = User('Taylor','Green','woman','music')

# 调用方法increment_login_attempts()多次
for i in range(1,5):
	user1.increment_login_attempts()
# 打印属性login_attempts的值,确认它被正确地递增
	print(f'调用第{user1.login_attempts}次!')

# 调用方法reset_login_attempts()
user1.reset_login_attempts()
# 打印属性login_attempts 的值,确认它被重置为0
print(f'重置为{user1.login_attempts}')

9-6 冰激凌小店 冰激凌小店是一种特殊的餐馆。编写一个名为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(f'店名:{self.restaurant_name}')
		print(f'烹调类型:{self.cuisine_type}')

	def open_restaurant(self):
		print(f'{self.restaurant_name}餐厅正在营业!')

class IceCreamStand(Restaurant):
	def __init__(self, restaurant_name,cuisine_type,flavors=[]):
		super().__init__(restaurant_name,cuisine_type)
		self.flavors = flavors
# 显示这些冰激凌的方法
	def describe_flavors(self):
		print(f'喜欢的冰淇淋:{self.flavors}')
		
icecream = IceCreamStand('河边冰淇淋屋','甜品',['巧克力','香草','奶茶'])
icecream.describe_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):
		self.first_name = first_name
		self.last_name = last_name

	def describe_user(self):
		print(f'名:{self.first_name}')
		print(f'姓:{self.last_name}')

	def greet_user(self):
		print(f'Welcome {self.first_name}!')

class Admin(User):
	def __init__(self, first_name,last_name,privilege=[]):
		super().__init__(first_name,last_name)
		self.privileges = privilege

	# 编写show_privileges(),显示管理员的权限
	def show_privileges(self):
		print(f'Admin:{str(self.privileges)}')

admin = Admin('Jimmy','Green',["can add post" ,"can delete post" "can ban user"])
admin.show_privileges()

9-8 权限 编写一个名为Privileges 的类,它只有一个属性privileges ,其中存储了练习9-7所述的字符串列表。将方法show_privileges()移到这个类中。在Admin 类中,将一个Privileges实例用作其属性。创建一个Admin 实例,并使用方法show_privileges() 来显示其权限。

class User():
	def __init__(self, first_name,last_name):
		self.first_name = first_name
		self.last_name = last_name

	def describe_user(self):
		print(f'名:{self.first_name}')
		print(f'姓:{self.last_name}')

	def greet_user(self):
		print(f'Welcome {self.first_name}!')

class Privileges():
	def __init__(self,privilege=["can add post" ,"can delete post" "can ban user"]):
		self.privileges = privilege

	def show_privileges(self):
		print(f'Admin:{str(self.privileges)}')

class Admin(User):
	def __init__(self, first_name,last_name):
		super().__init__(first_name,last_name)
		self.privileges = Privileges()

admin = Admin('Jimmy','Green',)
admin.privileges.show_privileges()

9-9 电瓶升级 在本节最后一个electric_car.py版本中,给Battery 类添加一个名为upgrade_battery() 的方法。该方法检查电瓶容量,如果不是100,就将其设置为100。创建一辆电瓶容量为默认值的电动汽车,调用方法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 = f"{self.year} {self.make} {self.model}"
		return long_name.title()
	
	def read_odometer(self):
		print(f"This car has {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=75):
		# 初始化电瓶的属性。
		self.battery_size = battery_size

	def describe_battery(self):
		# 打印一条描述电瓶容量的消息。
		print(f"This car has a {self.battery_size}-kWh battery.")

	def get_range(self):
	# 打印一条消息,指出电瓶的续航里程。
		if self.battery_size == 75:
			range = 260
		elif self.battery_size == 100:
			range = 315
		msg = str(range)
		print(f'续航里程:{msg}') 

	def upgrade_battery(self):
		if self.battery_size != 100:
		# 将100赋值给battery_size
			self.battery_size =100

class ElectricCar(Car):
	"""电动汽车的独特之处。"""
	def __init__(self, make, model, year):
	
	# 初始化父类的属性。
	# 再初始化电动汽车特有的属性。
	
		super().__init__(make, model, year)
		self.battery = Battery()

my_tesla = ElectricCar('tesla', 'model s', 2019)
my_tesla.battery.get_range()
my_tesla.battery.upgrade_battery()
my_tesla.battery.get_range()

9-10 导入Restaurant 类 将最新的Restaurant类存储在一个模块中。在另一个文件中,导入Restaurant 类,创建一个Restaurant 实例并调用Restaurant 的一个方法,以确认import 语句正确无误。

from Restaurant import Restaurant
restaurant = Restaurant('河边烧烤','烧烤')
restaurant.describe_restaurant()

9-11 导入Admin 类 以为完成练习9-8而做的工作为基础。将User 类、Privileges类和Admin类存储在一个模块中,再创建一个文件,在其中创建一个Admin 实例并对其调用方法show_privileges() ,以确认一切都能正确运行。

from Admin import Admin
admin = Admin('Jimmy','Green',)
admin.privileges.show_privileges()

9-12 多个模块 将User 类存储在一个模块中,并将Privileges类和Admin 类存储在另一个模块中。再创建一个文件,在其中创建一个Admin实例并对其调用方法show_privileges() ,以确认一切依然能够正确运行。

from user import *
from admin import *
admin = Admin('Jimmy','Green',)
admin.privileges.show_privileges()

9-13 骰子 创建一个Die类,它包含一个名为sides的属性,该属性的默认值为6。编写一个名为roll_die()的方法,它打印位于1和骰子面数之间的随机数。创建一个6面的骰子再掷10次。
#创建一个10面的骰子和一个20面的骰子,再分别掷10次。

import random
class  Die():
	"""docstring for  Die"""
	def __init__(self, sides=6):
		self.sides = sides

	def roll_die(self):
		# 打印位于1和骰子面数之间的随机数
		print(random.randint(1,self.sides))


die = Die(10)
# 一个10面的骰子掷10次
for n in range(1,11):
	print(f'10面骰子产生10次的随机数:')
	n = die.roll_die()

die = Die(20)
# 一个20面的骰子掷10次
for n in range(1,11):
	print(f'20面骰子产生10次的随机数:')
	n = die.roll_die()

9-14 彩票 创建一个列表或元组,其中包含10个数和5个字母。从这个列表或元组中随机选择4个数或字母,并打印一条消息,指出只要彩票上是这4个数或字母,就中大奖了。

import random
list1 = [0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e']
print (list1)

for i  in range(1,5):
	i = random.choice(list1)
	print(f'随机选择:{i}')

9-15 彩票分析 可以使用一个循环来明白前述彩票大奖有多难中奖。为此,创建一个名为my_ticket的列表或元组,再编写一个循环,不断地随机选择数或字母,直到中大奖为止。请打印一条消息,报告执行循环多少次才中了大奖。

import random
lottery = [10,35,44,55,64,78,89,92,'r','b','c','d','e']
print(lottery)
my_ticket = []
win_num = random.sample(lottery,5)
print(f'中奖号码:{win_num}')

i = 1
while True:
	'''choice返回的是一个元素,choices返回的是一个列表,
	且可能列表中的值会重复,sample返回的是一个列表,
	单列表中的值不会重复'''
	my_ticket = random.sample(lottery,k=5)
	if my_ticket != win_num:
		i += 1
		continue
	
	else:
		# 报告执行循环多少次才中了大奖
		print(f'第{i}次能够中奖!')
		break
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/269611.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号