Python课本第九章课后习题选做

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

    def __init__(self,first_name,last_name,age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    def describe_user(self):
        print('first_name: '+self.first_name)
        print('last_name: '+self.last_name)
        print('age: '+str(self.age))

    def greet_user(self):
        print('Hello, {} {}.'.format(self.first_name.title(),self.last_name.title()))

user_1 = User('cindy','candy',18)
user_1.describe_user()
user_1.greet_user()
user_2 = User('dandy','dancy',16)
user_2.describe_user()
user_2.greet_user()
first_name: cindy
last_name: candy
age: 18
Hello, Cindy Candy.
first_name: dandy
last_name: dancy
age: 16
Hello, Dandy Dancy.


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_name,last_name,age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        self.login_attempts = 0

    --snip--

    def increment_login_attempts(self):
        self.login_attempts += 1

    def reset_login_attempts(self):
        self.login_attempts = 0

user_1 = User('cindy','candy',18)
user_1.increment_login_attempts()
user_1.increment_login_attempts()
print(user_1.login_attempts)
user_1.reset_login_attempts()
print(user_1.login_attempts)
2
0

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

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

class User():

    def __init__(self,first_name,last_name,age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        self.login_attempts = 0

    --snip--


class Admin(User):

    def __init__(self,first_name,last_name,age):
        super().__init__(first_name,last_name,age)
        self.privileges = Privileges()


class Privileges():
    
    def __init__(self):
        self.privileges = [
            'can add post',
            'can delete post',
            'can ban user',
        ]
    
    def show_privileges(self):
        for privilege in self.privileges:
            print('Admin {}.'.format(privilege))


admin = Admin('cindy','candy',18)
admin.privileges.show_privileges()
Admin can add post.
Admin can delete post.
Admin can ban user.

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

admin.py

from user import User

class Admin(User):
    --snip--

class Privileges():
    --snip--

my_py.py

from admin import Admin

admin = Admin('cindy','candy',18)
admin.privileges.show_privileges()

Admin can add post.
Admin can delete post.
Admin can ban user.


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():

    def __init__(self, sides=6):
        self.sides = sides

    def roll_die(self):
        print(randint(1,self.sides))


def roll_10(die):
    for i in range(0,10):
        die.roll_die()
    print('==============================================')


die = Die()
roll_10(die)
die = Die(10)
roll_10(die)
die = Die(20)
roll_10(die)
4
3
5
6
5
4
4
2
6
3
==============================================
9
2
4
7
4
9
5
3
7
8
==============================================
9
8
15
14
14
14
9
15
20
20
==============================================
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值