0.任务描述
在上一次面向对象程序的基础上,增加功能为:封装文件相关的方法
1.程序与结果
上一次和这次的程序,其实体现的只是面向对象的封装特性;面向对象还有其他两个特性,继承和多态。
"""
将文件操作封装到类中
定义文件工具类
"""
class FileTool:
"""
文件工具类
"""
# 先定义构造函数,即初始化函数
def __init__(self, file_path): # self代表类本身的实例
self.filePath = file_path
# 写操作
def write_to_file(self, line):
f = open(self.filePath, 'a')
f.write(line)
f.close()
# 读文件
def read_from_file(self):
f = open(self.filePath, 'r')
lines = f.readlines()
f.close()
return lines
class PasswordTool:
"""
密码工具类
"""
# 初始化属性
def __init__(self, password): # self代表类本身的实例
self.password = password
self.strength_level = 0
# 处理密码的方法
def process_password(self):
if self.has_number(): # 判断密码中是否存在数字,存在则评价加1
self.strength_level += 1
if self.has_letter(): # 判断密码中是否存在字母,存在则评级加1
self.strength_level += 1
if 8 <= len(self.password) <= 16: # 如果密码长度符合要求则评级加1
self.strength_level += 1
# 判断密码当中是否存在数字
def has_number(self):
for c in self.password:
if c.isnumeric():
return True
return False
# 判断密码当中是否存在字母
def has_letter(self):
for c in self.password:
if c.isalpha():
return True
return False
# 接收用户输入,并传入方法当中
def main():
setting_times = 1
file_path = 'PasswordRank.txt'
file_tool = FileTool(file_path)
while setting_times <= 3:
pwd = input("请输入密码:")
password_tool = PasswordTool(pwd)
password_tool.process_password()
stren_len = password_tool.strength_level
line = "第{}次输入的密码为{},此密码的强度为{}\n".format(setting_times, pwd, stren_len)
file_tool.write_to_file(line)
setting_times += 1
print("密码设置结束!设置记录如下:")
lines = file_tool.read_from_file()
print(lines)
if __name__ == '__main__':
main()
Y:\Python\Anaconda\python.exe Y:/PythonWorkspace/PasswordReliablity/PasswordRank5.py
请输入密码:12345
请输入密码:yan66
请输入密码:yanhao666
密码设置结束!设置记录如下:
['第1次输入的密码为12345,此密码的强度为1\n', '第2次输入的密码为yan66,此密码的强度为2\n', '第3次输入的密码为yanhao666,此密码的强度为3\n']
Process finished with exit code 0