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

去社区提问

简介:判断密码强弱3.0版本,实现保存设置的密码及其对应的强度到文件中。

案例描述

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

之前的课程中,程序完成的功能要么是计算得到结果,要么是打印输出内容,这节课我带你一起来了解更加酷炫的功能:文件操作,利用代码把指定内容写进文件。

判断密码强弱小程序的3.0版本,将保存设置的密码及其对应的强度到文件中。

案例分析

文件的操作步骤

问:要把大象装进冰箱,总共分几步?

答案大家想必都知道~第一步打开冰箱门,第二步把大象装进去,第三步关上冰箱门。

和‘把大象装冰箱’一样,Python对文件的操作也分为三个步骤。

下面就详细讲讲这三个步骤应该分别如何实现。

1. 打开文件:建立文件与程序的关联

如何把计算机中的文件和我们的程序相关联?

打开文件使用open()方法,括号中一般需要两个参数。

filename:文件名(包括路径)

mode:打开模式

文件名就是给程序指定我们要操作的文件;打开模式是声明我们要对这个文件进行什么类型的操作。

常用的打开模式有下面四种:

r: read,只读模式,只能读取文件的内容而不能修改和删除,当文件不存在时程序报错

w: write,写模式,如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

a: append,附加模式,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

r+: 可进行文件的读写操作

指定文件和模式后,就完成了打开文件的工作。

2. 操作文件

文件操作主要有写入、读取等,在第一步指定文件打开模式后,就可以对文件进行相应操作。

今天我们先来讲解写入的方法。

wtite():将文本数据写入文件中

假设我们用写模式打开一个文件test.txt

  1. f = open('test.txt','w')

用write()方法向里面写入一行信息:

  1. f.write('hello')

打开文件就能看到我们写入的内容。

3.关闭文件

完成文件操作后,最后一步就是关闭文件,终止程序与文件之间的关联。

close()方法关闭文件是一个很好的习惯,可以避免错误发生。

  1. f.close()

有了上面的知识基础,就可以完成今天的任务了~

首先来回顾一下上节课的代码:

  1. def check_number_exist(password_str):
  2. """
  3. 判断字符串中是否含有数字
  4. """
  5. has_number = False
  6. for c in password_str:
  7. if c.isnumeric():
  8. has_number = True
  9. break
  10. return has_number
  11. def check_letter_exist(password_str):
  12. """
  13. 判断字符串中是否含有字母
  14. """
  15. has_letter = False
  16. for c in password_str:
  17. if c.isalpha():
  18. has_letter = True
  19. break
  20. return has_letter
  21. try_times = 5
  22. while try_times > 0:
  23. password = input('请输入密码:')
  24. # 密码强度
  25. strength_level = 0
  26. # 规则1:密码长度大于8
  27. if len(password) >= 8:
  28. strength_level += 1
  29. else:
  30. print('密码长度要求至少8位!')
  31. # 规则2:包含数字
  32. if check_number_exist(password):
  33. strength_level += 1
  34. else:
  35. print('密码要求包含数字!')
  36. # 规则3:包含字母
  37. if check_letter_exist(password):
  38. strength_level += 1
  39. else:
  40. print('密码要求包含字母!')
  41. if strength_level == 3:
  42. print('恭喜!密码强度合格!')
  43. break
  44. else:
  45. print('密码强度不合格!')
  46. try_times -= 1
  47. if try_times <= 0:
  48. print('尝试次数过多,密码设置失败!')

在这个基础上,添加代码实现存储密码和对应强度的功能,下面我们面临一个严肃的问题:代码应该增加在什么地方?

用户每设置一次密码,不论其是否符合安全要求,都要被存储到文件中。因此可以把文件操作相关代码写在判断完密码强度之后。

希望把结果存储在password_3.0.txt文件中,使用附加模式打开文件。当文件不存在时会自动创建,所以我们不用担心这里会出错。

  1. f = open('password_3.0.txt','a')

接下来就可以对文件进行写操作,先把密码写进文件:

  1. f.write(password)

最后别忘记关闭文件:

  1. f.close()

是不是非常简单?来运行代码看看效果。

  1. def check_number_exist(password_str):
  2. """
  3. 判断字符串中是否含有数字
  4. """
  5. has_number = False
  6. for c in password_str:
  7. if c.isnumeric():
  8. has_number = True
  9. break
  10. return has_number
  11. def check_letter_exist(password_str):
  12. """
  13. 判断字符串中是否含有字母
  14. """
  15. has_letter = False
  16. for c in password_str:
  17. if c.isalpha():
  18. has_letter = True
  19. break
  20. return has_letter
  21. try_times = 5
  22. while try_times > 0:
  23. password = input('请输入密码:')
  24. # 密码强度
  25. strength_level = 0
  26. # 规则1:密码长度大于8
  27. if len(password) >= 8:
  28. strength_level += 1
  29. else:
  30. print('密码长度要求至少8位!')
  31. # 规则2:包含数字
  32. if check_number_exist(password):
  33. strength_level += 1
  34. else:
  35. print('密码要求包含数字!')
  36. # 规则3:包含字母
  37. if check_letter_exist(password):
  38. strength_level += 1
  39. else:
  40. print('密码要求包含字母!')
  41. f = open('password_3.0.txt','a')
  42. f.write(password)
  43. f.close()
  44. if strength_level == 3:
  45. print('恭喜!密码强度合格!')
  46. break
  47. else:
  48. print('密码强度不合格!')
  49. try_times -= 1
  50. if try_times <= 0:
  51. print('尝试次数过多,密码设置失败!')

程序执行过程中,设置下面几个密码:

请输入密码:123

请输入密码:abc123

请输入密码:awejfo123

设置密码后打开程序生成的文件,会看到下面的结果:

这个看起来和我们想要的结果还是有很大差别……

所有的内容都挤在一起‘无法呼吸’,在写文件时,程序不会为内容自动添加换行或空格,因此需要我们手动设置换行来把内容间隔区分开。

转义字符\n可以完成换行的操作。例如在打印输出时,在需要换行的地方加入\n

代码练习:

编程区

  1. print('好好学习\n天天向上')

终端区

那么文件操作的代码就可以改进成这样:

  1. f = open('password_3.0.txt','a')
  2. f.write(password,'\n')
  3. f.close()

想要同时存储密码及其对应强度,并且使得存储效果更加美观,可以用到我们之前学习过的格式化输出:

  1. f = open('password_3.0.txt','a')
  2. f.write('密码:{}, 强度:{}\n'.format(password, strength_level))
  3. f.close()

现在再来运行程序查看结果吧~

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

输入三个密码分别是:
请输入密码:123

请输入密码:abc123

请输入密码:asefwe1234

本关总结

本节课我们学习了文件操作的相关内容,现在一起来总结一下吧。

  • 文件操作步骤
  • 1.打开文件

filename:文件名(包含路径)
mode:文件打开模式

常用的文件打开模式有下面几种。

  • 2.操作文件
  • 3.关闭文件
下节预告

本节课我们学习了写文件的相关操作,那么应该如何读取保存在文件中的信息呢?下节课让我们一起来探索答案~

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

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

判断密码强度 1/3

判断密码强弱(3)

1.0x

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

行动力超过

累计学习

学习下一课时