Python从入门到实践习题答案(第九章 类)

在学习《Python从入门到实践》,代码是自己编写的噢(虽然有些代码有参考其他大佬),点个赞再走8~

9-1 餐馆:创建一个名为 Restaurant 的类,其方法__init__()设置两个属性:restaurant_name 和 cuisine_type。创建一个名为 describe_restaurant()的方法和一个名为 open_restaurant()的方法,其中前者打印前述两项信息,而后者打印一条消息,指出餐馆正在营业。

class Restaurant():
    def __init__(self,name,type):
        self.name=name
        self.type=type
    def describe_restaurant(self):
        print("这个餐馆的名字是"+self.name+",这是一家"+self.type+"的餐馆。")
    def open_restaurant(self):
        print("餐馆正在营业,欢迎光临~")
My_Restaurant=Restaurant('南京大排档','传统饭店')
My_Restaurant.describe_restaurant()
My_Restaurant.open_restaurant()

运行结果如下所示:
在这里插入图片描述


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

BeiJing_Restaurant=Restaurant('北京烤鸭','全国知名')
BeiJing_Restaurant.describe_restaurant()
ChangSha_Restaurant=Restaurant('一盏灯','著名湘菜馆')
ChangSha_Restaurant.describe_restaurant()

运行结果如下所示:
在这里插入图片描述

9-3 用户:创建一个名为 User 的类,其中包含属性 first_name 和 last_name,还有用户简介通常会存储的其他几个属性。在类 User 中定义一个名为 describe_user()的方法,它打印用户信息摘要;再定义一个名为 greet_user()的方法,它向用户发出个性化的问候。

class User():
    def __init__(self,first,last,gender):
        self.first=first
        self.last = last
        self.gender = gender
    def describe_user(self):
        name=self.last+self.first
        print("这个用户的名字是"+name+",性别为"+self.gender+"。")
    def greet_user(self):
        if self.gender=='男':
          print(self.last+"先生早上好,欢迎使用本机。")
        else:
           print(self.last + "女士早上好,欢迎使用本机。")
user1=User('小明','王','男')
user1.describe_user()
user1.greet_user()
print("---------------------------")
user2=User('小红','张','女')
user2.describe_user()
user2.greet_user()

运行结果如下所示:
在这里插入图片描述


9-4 就餐人数:在为完成练习 9-1 而编写的程序中,添加一个名为 number_served的属性,并将其默认值设置为 0。根据这个类创建一个名为 restaurant 的实例;打印有多少人在这家餐馆就餐过,然后修改这个值并再次打印它。添加一个名为 set_number_served()的方法,它让你能够设置就餐人数。调用这个方法并向它传递一个值,然后再次打印这个值。添加一个名为 increment_number_served()的方法,它让你能够将就餐人数递增。调用这个方法并向它传递一个这样的值:你认为这家餐馆每天可能接待的就餐人数。

class Restaurant():
    def __init__(self,name,type,number_served):
        #初始化饭店的属性
        self.name=name
        self.type=type
        self.number_served=0
    def describe_restaurant(self):
        print("这个餐馆的名字是"+self.name+",这是一家"+self.type+"的餐馆。")
    def open_restaurant(self):
        print("餐馆正在营业,欢迎光临~")
    def set_number_served(self,a):
        self.number_served=a
        print("就餐人数为"+str(self.number_served)+"。")
    def increment_number_served(self,b):
        self.number_served = b + self.number_served
        print("明天餐馆可能接待的就餐人数为"+str(self.number_served)+"。")
My_Restaurant=Restaurant('一盏灯','湘菜馆',500)
My_Restaurant.describe_restaurant()
My_Restaurant.open_restaurant()
My_Restaurant.set_number_served(500)
My_Restaurant.increment_number_served(200)

运行结果如下所示:
在这里插入图片描述


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():
    def __init__(self,first,last,gender):
        # 初始化用户的属性
        self.first=first
        self.last = last
        self.gender = gender
        self.login_attempts=0
    def describe_user(self):
        name=self.last+self.first
        print("这个用户的名字是"+name+",性别为"+self.gender+"。")
    def greet_user(self):
        if self.gender=='男':
          print(self.last+"先生早上好,欢迎使用本机。")
        else:
           print(self.last + "女士早上好,欢迎使用本机。")
    def increment_login_attempts(self,a):
        self.login_attempts = a + self.login_attempts
        name = self.last + self.first
        print(name+"尝试登录次数为"+str(self.login_attempts)+"。")
    def reset_login_attempts(self):
        self.login_attempts = 0
        print("已重置登录次数为"+ str(self.login_attempts) + "。")
user1=User('小明','王','男')
user1.describe_user()
user1.greet_user()
user1.increment_login_attempts(5)
user1.reset_login_attempts()
print("---------------------------")
user2=User('小红','张','女')
user2.describe_user()
user2.greet_user()
user2.increment_login_attempts(3)
user2.reset_login_attempts()

运行结果如下所示:
在这里插入图片描述


9-6 冰淇淋小店:冰淇淋小店是一种特殊的餐馆。编写一个名为 IceCreamStand 的类,让它继承你为完成练习 9-1 或练习 9-4 而编写的 Restaurant 类。这两个版本的Restaurant 类都可以,挑选你更喜欢的那个即可。添加一个名为 flavors 的属性,用于存储一个由各种口味的冰淇淋组成的列表。编写一个显示这些冰淇淋的方法。创建一个IceCreamStand 实例,并调用这个方法。

class Restaurant():
    def __init__(self,name,type):
        self.name=name
        self.type=type
    def describe_restaurant(self):
        print("这个餐馆的名字是"+self.name+",这是一家"+self.type+"的餐馆。")
    def open_restaurant(self):
        print("餐馆正在营业,欢迎光临~")
My_Restaurant=Restaurant('南京大排档','传统饭店')
My_Restaurant.describe_restaurant()
My_Restaurant.open_restaurant()

#----------以上部分是Restaurant类,使用的是9-1的答案----------#

class IceCreamStand(Restaurant):
    def __init__(self,name,type):
        super().__init__(name,type)
        self.flavors=[]
    def list_IceCream(self):
       print("本店有"+str(self.flavors)+"\n等多种口味。")
My_IceCream=IceCreamStand('KFC','杯装')
My_IceCream.flavors=['麦旋风冰淇淋','海盐冰淇淋','巧克力冰淇淋','芒果双旋冰淇淋']
My_IceCream.list_IceCream()

运行结果如下所示:
在这里插入图片描述


9-7 管理员:管理员是一种特殊的用户。编写一个名为 Admin 的类,让它继承你为完成练习 9-3 或练习 9-5 而编写的 User 类。添加一个名为 privileges 的属性,用于存储一个由字符串(如"can add post"、“can delete post”、"can ban user"等)组成的列表。编写一个名为 show_privileges()的方法,它显示管理员的权限。创建一个 Admin实例,并调用这个方法。

class Admin(User):
    #定义这个函数的属性
    def __init__(self,first,last,gender):
        super().__init__(first,last,gender)
        self.privileges=[]
    def show_privileges(self):
        name = self.last + self.first    
        #显示名字
        print(name+"的权限有:"+str(self.privileges))
Manager1=Admin('小亮','杨','男')
Manager1.privileges=["can add post","can delete post","can ban user"]
Manager1.describe_user()
Manager1.show_privileges()
print("---------------------------")
Manager2=Admin('晓彤','吴','女')
Manager2.describe_user()
Manager2.privileges=["增删改员工信息"]
Manager2.show_privileges()

运行的结果如下所示:
在这里插入图片描述


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

class Privileges():
    def __init__(self,privileges=[]):
        self.privileges=['can add post','can delee post','can ban user']
    def show_privileges(self):
        print("权限有:" + str(self.privileges))

class Admin(User):
    def __init__(self, first, last, gender):
        super().__init__(first, last, gender)
        self.privileges = Privileges()
Manager1=Admin('小亮','杨','男')
Manager1.describe_user()
Manager1.privileges.show_privileges()

运行的结果如下所示:
在这里插入图片描述


9-9太多啦 之后再补(可能不想补了)
在这里插入图片描述

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

  • 新建一个restaurant的py文件,将class Restaurant ()的内容放在里面,再新建一个My_restaurant的py文件,便可以导入。第一个代码是restaurant.py里的内容。
#Author:明理-L-
# -*- codeing = utf-8 -*- 
#@Time : 2020/11/27 19:56
#@File : restaurant.py
#@Software : PyCharm
class Restaurant():
    def __init__(self,name,type,number_served):
        #初始化饭店的属性
        self.name=name
        self.type=type
        self.number_served=0
    def describe_restaurant(self):
        print("这个餐馆的名字是"+self.name+",这是一家"+self.type+"的餐馆。")
    def open_restaurant(self):
        print("餐馆正在营业,欢迎光临~")
    def set_number_served(self,a):
        self.number_served=a
        print("就餐人数为"+str(self.number_served)+"。")
    def increment_number_served(self,b):
        self.number_served = b + self.number_served
        print("明天餐馆可能接待的就餐人数为"+str(self.number_served)+"。")
My_Restaurant=Restaurant('一盏灯','湘菜馆',500)
My_Restaurant.describe_restaurant()
My_Restaurant.open_restaurant()
My_Restaurant.set_number_served(500)
My_Restaurant.increment_number_served(200)

My_restaurant的内容:

#Author:明理-L-
# -*- codeing = utf-8 -*- 
#@Time : 2020/11/27 19:49
#@File : my_restaurant.py
#@Software : PyCharm

# 9-10 导入 Restaurant 类:将最新的 Restaurant 类存储在一个模块中。
# 在另一个文件中,导入 Restaurant 类,创建一个 Restaurant 实例,
# 并调用 Restaurant 的一个方法,
# 以确认 import 语句正确无误。
from restaurant import Restaurant
My_Restaurant=Restaurant('老乡鸡','安徽土鸡',500)
My_Restaurant.describe_restaurant()

结果如下所示:
在这里插入图片描述


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

class User():
    def __init__(self,first,last,gender):
        # 初始化用户的属性
        self.first=first
        self.last = last
        self.gender = gender
        self.login_attempts=0
class Admin(User):
    def __init__(self,first,last,gender):
        super().__init__(first,last,gender)
        self.privileges=[]
    def show_privileges(self):
        name = self.last + self.first
        print(name+"的权限有:"+str(self.privileges))

另一个py文件的代码:

from chapter9 import Admin
Fei=Admin('小飞','梁','男')
Fei.privileges=["增删改员工信息"]
Fei.show_privileges()

运行结果如下所示:
在这里插入图片描述

9-12的代码类似,就不多写了。
在这里插入图片是


9-13 使用 OrderedDict:在练习 6-4 中,你使用了一个标准字典来表示词汇表。请使用 OrderedDict 类来重写这个程序,并确认输出的顺序与你在字典中添加键—值对的顺序一致。

from collections import OrderedDict
diction=OrderedDict()
print("\n")
print("------------------这是一本成语词典------------------")
print("*************************************************")
diction['一鸣惊人'] = '意思是比喻平时没有突出的表现,一下子做出惊人的成绩'
diction['春暖花开'] = '比喻游览、观赏的大好时机'
diction['一见如故'] = '意思是初次见面就像老朋友一样,形容初次相见就情投意合'
for word,mean in diction.items():
    print(word+":"+mean+'.')

运行结果如下所示:
在这里插入图片描述
9-14 骰子:模块 random 包含以各种方式生成随机数的函数,其中的 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):
        x = randint(1, self.sides)
        return x
    
#一个6面的骰子
a6=Die(6)
a=1
print("-----------------一个6面的骰子-------------------:")
while a <11 :
    print("这是第" + str(a) + "次掷色子,随机数为"+ str(a6.roll_die()))
    a=a+1
    
#一个10面的骰子
a10=Die(sides=10)
print("-----------------一个10面的骰子-------------------:")
a=1
while a <11 :
    print("这是第" + str(a) + "次掷色子,随机数为"+ str(a10.roll_die()))
    a=a+1
    
#一个20面的骰子
a20=Die(20)
print("-----------------一个20面的骰子-------------------:")
a=1
while a <11 :
    print("这是第" + str(a) + "次掷色子,随机数为"+ str(a20.roll_die()))
    a=a+1

运行结果如下所示:

-----------------一个6面的骰子-------------------:
这是第1次掷色子,随机数为4
这是第2次掷色子,随机数为5
这是第3次掷色子,随机数为6
这是第4次掷色子,随机数为3
这是第5次掷色子,随机数为1
这是第6次掷色子,随机数为6
这是第7次掷色子,随机数为1
这是第8次掷色子,随机数为4
这是第9次掷色子,随机数为2
这是第10次掷色子,随机数为4
-----------------一个10面的骰子-------------------:
这是第1次掷色子,随机数为2
这是第2次掷色子,随机数为1
这是第3次掷色子,随机数为3
这是第4次掷色子,随机数为10
这是第5次掷色子,随机数为3
这是第6次掷色子,随机数为10
这是第7次掷色子,随机数为8
这是第8次掷色子,随机数为1
这是第9次掷色子,随机数为9
这是第10次掷色子,随机数为8
-----------------一个20面的骰子-------------------:
这是第1次掷色子,随机数为14
这是第2次掷色子,随机数为20
这是第3次掷色子,随机数为13
这是第4次掷色子,随机数为18
这是第5次掷色子,随机数为7
这是第6次掷色子,随机数为1
这是第7次掷色子,随机数为13
这是第8次掷色子,随机数为16
这是第9次掷色子,随机数为13
这是第10次掷色子,随机数为6

拖拖拉拉地写,第九章终于结束啦~

猜你喜欢

转载自blog.csdn.net/qq_44290727/article/details/110127782