9-3 用户 :创建一个名为User 的类,其中包含属性first_name 和last_name ,还有用户简介通常会存储的其他几个属性。在类User 中定义一个名为describe_user() 的方法,它打印用户信息摘要;再定义一个名为greet_user() 的方法,它向用户发出个性化的问候。
9-5 尝试登录次数 :在为完成练习9-3而编写的User 类中,添加一个名为login_attempts 的属性。编写一个名为increment_login_attempts() 的方法,它将属性login_attempts 的值加1。再编写一个名为reset_login_attempts() 的方法,它将属性login_attempts 的值重置为0。
9-7 管理员 :管理员是一种特殊的用户。编写一个名为Admin 的类,让它继承你为完成练习9-3或练习9-5而编写的User 类。添加一个名为privileges 的属性,用于存储一个由字符串(如”can add post” 、”can delete post” 、”can ban user” 等)组成的列表。编写一个名为show_privileges() 的方法,它显示管理员的权限。
class User:
def __init__(self, _id, first_name, last_name):
self.id = _id
self.first_name = first_name
self.last_name = last_name
self.login_attempts = 0
def describe_user(self):
print('User\'s ID: %d' % (self.id))
print('User\'s name: %s' % (self.first_name + ' ' + self.last_name))
def greet_user(self):
print('Hello %s' % (self.first_name + ' ' + self.last_name))
def increment_login_attempts(self):
self.login_attempts += 1
def reset_login_attempts(self):
self.login_attempts = 0
class Admin(User):
def __init__(self, _id, first_name, last_name):
super().__init__(_id, first_name, last_name)
self.privileges = ['can add post', 'can delete post', 'can ban user']
def show_privileges(self):
for privilege in self.privileges:
print(privilege)
10-3 访客 :编写一个程序,提示用户输入其名字;用户作出响应后,将其名字写入到文件guest.txt中。
name = input('Please input guest\'s name: ')
with open('guest.txt', 'w') as fw:
fw.write(name)
10-6 加法运算 :提示用户提供数值输入时,常出现的一个问题是,用户提供的是文本而不是数字。在这种情况下,当你尝试将输入转换为整数时,将引发TypeError 异常。编写一个程序,提示用户输入两个数字,再将它们相加并打印结果。在用户输入的任何一个值不是数字时都捕获TypeError 异常,并打印一条友好的错误消息。
try:
a, b = map(int, input('Please input two integers: ').split())
except ValueError:
print('At least one of your inputs are not integers')
else:
print(a + b)
11-3 雇员 :编写一个名为Employee 的类,其方法init() 接受名、姓和年薪,并将它们都存储在属性中。编写一个名为give_raise() 的方法,它默认将年薪增加5000美元,但也能够接受其他的年薪增加量。
为Employee 编写一个测试用例,其中包含两个测试方法:test_give_default_raise() 和test_give_custom_raise() 。使用方法setUp() ,以免在每个测试方法中都创建新的雇员实例。运行这个测试用例,确认两个测试都通过了。
class Employee:
def __init__(self, first_name, last_name, salary):
self.first_name = first_name
self.last_name = last_name
self.salary = salary
def give_raise(self, raise_salary=5000):
self.salary += raise_salary
import unittest
class EmployeeTest(unittest.TestCase):
def setUp(self):
self.employee = Employee('Petyr', 'Baelish', 20000)
def test_give_default_raise(self):
self.employee.give_raise()
self.assertEqual(self.employee.salary, 25000)
def test_give_custom_raise(self):
self.employee.give_raise(10000)
self.assertEqual(self.employee.salary, 30000)