第五周课后作业,第九章的练习题选几道写一下

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

class User():
    def __init__(self, first_name, last_name, age, gender):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        self.gender = gender
    def describe_user(self):
        print("Name:" + self.first_name.title() + ' ' + self.last_name.title())
        print("Age:" + self.age)
        print("Gender:" + self.gender)
    def greet_user(self):
        print("Hello, " + self.first_name.title() + ' ' + self.last_name.title() + '.')

user_1 = User('jason', 'todd', '20', 'male')
user_2 = User('alice', 'barnes', '18', 'female')
user_1.describe_user()
user_1.greet_user()
print()
user_2.describe_user()
user_2.greet_user()

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, gender):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        self.gender = gender
        self.login_attempts = 0
    def describe_user(self):
        print("Name:" + self.first_name.title() + ' ' + self.last_name.title())
        print("Age:" + self.age)
        print("Gender:" + self.gender)
    def greet_user(self):
        print("Hello, " + self.first_name.title() + ' ' + self.last_name.title() + '.')
    def increment_login_attempts(self):
        self.login_attempts += 1 
    def reset_login_attempts(self):
        self.login_attempts = 0
user_1 = User('jason', 'todd', '20', 'male')
user_1.increment_login_attempts()
print(user_1.login_attempts)
user_1.increment_login_attempts()
print(user_1.login_attempts)
user_1.reset_login_attempts()
print(user_1.login_attempts)



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, age, gender):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        self.gender = gender
        self.login_attempts = 0
    def describe_user(self):
        print("Name:" + self.first_name.title() + ' ' + self.last_name.title())
        print("Age:" + self.age)
        print("Gender:" + self.gender)
    def greet_user(self):
        print("Hello, " + self.first_name.title() + ' ' + self.last_name.title() + '.')
    def increment_login_attempts(self):
        self.login_attempts += 1 
    def reset_login_attempts(self):
        self.login_attempts = 0

class Admin(User):
    def __init__(self, first_name, last_name, age, gender, privileges):
        super().__init__(first_name, last_name, age, gender)
        self.privileges = privileges
    def show_privileges(self):
        print(self.first_name.title() + ' ' + self.last_name.title()+' ' + self.privileges + '.')
    
user_1 = Admin('jason', 'todd', '20', 'male', 'can add post')
user_1.show_privileges()

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

from User import User
from Admin import Admin

user_1 = Admin('jason', 'todd', '20', 'male', 'can add post')
user_1.show_privileges()

9-14 骰子 : 模块random 包含以各种方式生成随机数的函数, 其中的randint() 返回一个位于指定范围内的整数。创建一个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))

die_1 = Die()
print("Roll a die with six sides.")
for i in range(1, 11):
    die_1.roll_die()
die_2 = Die(10)
print("Roll a die with ten sides.")
for i in range(1, 11):
    die_2.roll_die()
die_3 = Die(20)
print("Roll a die with twenty sides.")
for i in range(1, 11):
    die_3.roll_die()