判断密码强度/判断密码强弱(6)

去社区提问

简介:判断密码强弱6.0版本,把文件的相关操作封装到一个类中。

案例描述

欢迎继续学习小象学院Python认知打卡课~

上节课我们学习了类和对象的相关知识,这是Python中非常重要的一部分内容,今天我们就继续来巩固这些重点知识。把文件相关操作封装到一个类中。

先来回顾上节课类和对象的重点知识。

案例分析
  • 面向过程vs面向对象

面向过程的编程方法是按照流程一步步操作;而面向对象的方法让各个‘对象’分工合作,组合起来,共同完成功能。

  • 类和对象

类是一个模版,对象是按照这个模版产生出的各个实例。

假设定义了一个猫咪的类,猫咪所共有的属性包括‘毛色’、‘体重’、‘食物喜好’等;猫咪的行为包含了‘吃饭’、‘睡觉’、‘玩耍’等。

由猫咪这个类产生等对象就可以包括橘猫、波斯猫、英短、美短等各种类型猫咪,它们都具有相同的基本特征。

  • 类的定义方法

类的方法,是类所能实现的行为。

有一个非常特殊的方法:构造方法。它有区别于普通函数的特点,那就是定义对象时,会自动调用类的构造函数,来初始化对象的各个属性。

_init_(self)的第一个参数self能让构造方法在实现逻辑时,起到‘指向自己’的作用。

整理过这些知识,让我们再来看看上节课的代码:

  1. class PasswordTool:
  2. """
  3. 密码工具类
  4. """
  5. def __init__(self, password):
  6. # 类的属性
  7. self.password = password
  8. self.strength_level = 0
  9. def process_password(self):
  10. # 规则1:密码长度大于8
  11. if len(self.password) >= 8:
  12. self.strength_level += 1
  13. else:
  14. print('密码长度要求至少8位!')
  15. # 规则2:包含数字
  16. if self.check_number_exist():
  17. self.strength_level += 1
  18. else:
  19. print('密码要求包含数字!')
  20. # 规则3:包含字母
  21. if self.check_letter_exist():
  22. self.strength_level += 1
  23. else:
  24. print('密码要求包含字母!')
  25. # 类的方法
  26. def check_number_exist(self):
  27. """
  28. 判断字符串中是否含有数字
  29. """
  30. has_number = False
  31. for c in self.password:
  32. if c.isnumeric():
  33. has_number = True
  34. break
  35. return has_number
  36. def check_letter_exist(self):
  37. """
  38. 判断字符串中是否含有字母
  39. """
  40. has_letter = False
  41. for c in self.password:
  42. if c.isalpha():
  43. has_letter = True
  44. break
  45. return has_letter
  46. try_times = 5
  47. while try_times > 0:
  48. password = input('请输入密码:')
  49. # 实例化密码工具对象
  50. password_tool = PasswordTool(password)
  51. password_tool.process_password()
  52. f = open('password_5.0.txt', 'a')
  53. f.write('密码:{}, 强度:{}\n'.format(password, password_tool.strength_level))
  54. f.close()
  55. if password_tool.strength_level == 3:
  56. print('恭喜!密码强度合格!')
  57. break
  58. else:
  59. print('密码强度不合格!')
  60. try_times -= 1
  61. print()
  62. if try_times <= 0:
  63. print('尝试次数过多,密码设置失败!')

密码工具类中定义两个属性:密码、密码强度,以及和判断密码强弱相关的方法。接下来我们再创建一个文件工具类,把相关操作整合在一起。

定义FileTool文件工具类:

  1. class FileTool:
  2. pass

每一个文件工具对象都要有路径属性,通过路径访问操作文件。定义类的构造函数,实现对象的属性的初始化操作:

  1. class FileTool:
  2. """
  3. 文件工具类
  4. """
  5. def __init__(self, filepath):
  6. self.filepath = filepath

对于文件的操作,主要有读和写两种,在类中分别加入这两个内容。

文件操作分为三步进行:

  1. def write_to_file(self, line):
  2. f = open(self.filepath, 'a')
  3. f.write(line)
  4. f.close()

写文件的函数有两个参数,self用于指向对象自身,line是要写入文件的文本内容。

打开文件时用self.filepath获取对象自身的路径属性,打开模式选择'a'附加方式。

下面再来定义读取文件功能的函数:

  1. def read_from_file(self):
  2. f = open(self.filepath, 'r')
  3. lines = f.readlines()
  4. f.close()
  5. return lines

这里我们选择'r'读取模式打开文件,readlines()方法会一次性读取文件中的全部文本内容,并且以换行作为分隔,把信息存储在列表中。

关于文件读写的相关知识点,大家可以在判断密码强弱的3、4课时回顾复习哦~

现在就完成了文件工具类的定义:

  1. class FileTool:
  2. """
  3. 文件工具类
  4. """
  5. def __init__(self, filepath):
  6. self.filepath = filepath
  7. def write_to_file(self, line):
  8. f = open(self.filepath, 'a')
  9. f.write(line)
  10. f.close()
  11. def read_from_file(self):
  12. f = open(self.filepath, 'r')
  13. lines = f.readlines()
  14. f.close()
  15. return lines

下面来修改主函数,把文件操作的内容改用对象实现。

首先实例化文件工具对象:

  1. file_tool = FileTool(filepath)

每次写操作时需要一个参数传入文本内容,定义字符串变量line,用字符串格式化的方法为它赋值:

  1. line = '密码:{},强度:{}\n'.format(password,password_tool.strength_level)

执行写操作:

  1. file_tool.write_to_file(line)

执行读操作:

  1. lines = file_tol.read_from_file()
  2. print(lines)

完成修改后的主函数是下面这样的:

  1. try_times = 5
  2. filepath = 'password_6.0.txt'
  3. # 实例化文件工具对象
  4. file_tool = FileTool(filepath)
  5. while try_times > 0:
  6. password = input('请输入密码:')
  7. # 实例化密码工具对象
  8. password_tool = PasswordTool(password)
  9. password_tool.process_password()
  10. line = '密码:{}, 强度:{}\n'.format(password, password_tool.strength_level)
  11. # 写操作
  12. file_tool.write_to_file(line)
  13. if password_tool.strength_level == 3:
  14. print('恭喜!密码强度合格!')
  15. break
  16. else:
  17. print('密码强度不合格!')
  18. try_times -= 1
  19. print()
  20. if try_times <= 0:
  21. print('尝试次数过多,密码设置失败!')
  22. # 读操作
  23. lines = file_tool.read_from_file()
  24. print(lines)

下面让我们来运行代码查看一下结果~

  1. class PasswordTool:
  2. """
  3. 密码工具类
  4. """
  5. def __init__(self, password):
  6. # 类的属性
  7. self.password = password
  8. self.strength_level = 0
  9. def process_password(self):
  10. # 规则1:密码长度大于8
  11. if len(self.password) >= 8:
  12. self.strength_level += 1
  13. else:
  14. print('密码长度要求至少8位!')
  15. # 规则2:包含数字
  16. if self.check_number_exist():
  17. self.strength_level += 1
  18. else:
  19. print('密码要求包含数字!')
  20. # 规则3:包含字母
  21. if self.check_letter_exist():
  22. self.strength_level += 1
  23. else:
  24. print('密码要求包含字母!')
  25. # 类的方法
  26. def check_number_exist(self):
  27. """
  28. 判断字符串中是否含有数字
  29. """
  30. has_number = False
  31. for c in self.password:
  32. if c.isnumeric():
  33. has_number = True
  34. break
  35. return has_number
  36. def check_letter_exist(self):
  37. """
  38. 判断字符串中是否含有字母
  39. """
  40. has_letter = False
  41. for c in self.password:
  42. if c.isalpha():
  43. has_letter = True
  44. break
  45. return has_letter
  46. class FileTool:
  47. """
  48. 文件工具类
  49. """
  50. def __init__(self, filepath):
  51. self.filepath = filepath
  52. def write_to_file(self, line):
  53. f = open(self.filepath, 'a')
  54. f.write(line)
  55. f.close()
  56. def read_from_file(self):
  57. f = open(self.filepath, 'r')
  58. lines = f.readlines()
  59. f.close()
  60. return lines
  61. try_times = 5
  62. filepath = 'password_6.0.txt'
  63. # 实例化文件工具对象
  64. file_tool = FileTool(filepath)
  65. while try_times > 0:
  66. password = input('请输入密码:')
  67. # 实例化密码工具对象
  68. password_tool = PasswordTool(password)
  69. password_tool.process_password()
  70. line = '密码:{}, 强度:{}\n'.format(password, password_tool.strength_level)
  71. # 写操作
  72. file_tool.write_to_file(line)
  73. if password_tool.strength_level == 3:
  74. print('恭喜!密码强度合格!')
  75. break
  76. else:
  77. print('密码强度不合格!')
  78. try_times -= 1
  79. print()
  80. if try_times <= 0:
  81. print('尝试次数过多,密码设置失败!')
  82. # 读操作
  83. lines = file_tool.read_from_file()
  84. print(lines)
本关总结

恭喜你完成了判断密码强弱案例的全部知识学习,撒花庆祝~

本节课我们复习了类和对象以及文件读写的相关知识,我也为你梳理了这六次课的重点内容,来总结一下:

下节预告

下节课开始,我们将进入数据分析、办公自动化等实用案例的学习。

更多精彩内容:

Python淘宝用户消费行为数据分析

自动批量处理表格文件

Python自动发送邮件

……

记得准时围观哦~

想要领取课程资料,和更多的同学一起交流学习,欢迎扫码添加班主任微信。

扫描二维码添加班主任微信

判断密码强度 1/3

判断密码强弱(6)

1.0x

恭喜完成本课时的学习!
坚持学习

行动力超过

累计学习

学习下一课时