本节课主要讲原来分散的方法封装成一个类,使之成为一个整体,方便调用。就是面向对象编程的思想。
1、面向过程编程和面向对象编程的区别:
面向过程(POP):以程序执行过程为设计流程的编程思想。
面向对象(OOP):以事物为中心的编程思想。
什么是对象(Object)?
现实世界中的对象:属性,行为
对象例子:
波斯猫,属性:品种、颜色、大小;行为:叫、捉老鼠
吉普车,属性:类型、用途;行为:发动、停车
类(class)某种类型集合的描述
属性:类本身的一些特性
方法:类所能实现的行为
类的定义:
class ClassName
__init__(self)构造函数:初始化对象的各属性
self代表类的实例
"""
作者:lanxingbudui
版本:5.0
日期:2019-08-03
功能:判断密码强度
2.0新增功能:限制密码验证次数,循环终止
3.0新增功能:保存密码及其强度到文件中
4.0新增功能:读取文件中的密码
5.0新增功能:定义一个password工具类
"""
class PasswordTool:
"""
密码工具类
"""
# 类的属性
def __init__(self, password):
self.password = password
self.strength_level = 0
# 类的方法
def process_string(self): # 处理字符串的方法
# 规则1:密码长度大于8位
if len(self.password) >= 8:
self.strength_level += 1
else:
print('密码长度必须大于8位')
# 规则2:密码包含数字
if self.check_number_str():
self.strength_level += 1
else:
print('密码要求包含数字!')
# 规则3:密码包含字母
if self.check_letter_str():
self.strength_level += 1
else:
print('密码要求包含字母!')
def check_number_str(self):
"""
判断字符串是否包含数字
"""
has_number = False
for c in self.password:
if c.isnumeric():
has_number = True
break
return has_number
def check_letter_str(self):
"""
判断字符串是否包含字母
"""
has_letter = False
for c in self.password:
if c.isalpha():
has_letter = True
break
return has_letter
def main():
"""
主函数
"""
try_times = 5
while try_times >= 0:
password = input('请输入密码:')
# 实例化密码工具对象
password_tool = PasswordTool(password)
password_tool.process_string()
f = open('password_5.0.txt', 'a')
f.write('密码:{},强度:{}\n'.format(password, password_tool.strength_level))
f.close()
if password_tool.strength_level == 3:
print('恭喜!密码强度合格!')
break
else:
print('密码强度不合格!')
try_times -= 1
print()
if try_times <= 0:
print('密码尝试次数过多,请重新设置!')
# 打开文件
# f = open('password_3.0.txt', 'r')
# 1.read()
# content = f.read()
# print(content)
# 2.readline()
# line = f.readline()
# print(line)
# line = f.readline()
# print(line)
# 3.readlines()
# lines = f.readlines()
# print(lines)
# print()
# for line in lines:
# print('read:{}'.format(line))
#
# f.close()
if __name__ == '__main__':
main()
将判断密码的字符串的方法:规则1、规则2、规则3以及规则2使用的方法和规则3使用的方法都封装到一个类PasswordTool中;
需要注意事项:
2、__init__(self)构造函数:self代表类本身。构造函数需要def定义;