师从‘百测’besttest

  今日牛老师布置了一个作业,生成一个随机密码,且要包含大写字母、小写字母、数字和特殊字符,且不能重复。

  想着先生成密码,然后用各字符去检查是否存在,使用for嵌套循环。

  1. import string
  2. l = ['abc','','123!@#qweA']
  3. i = 0
  4. n = 3
  5. while i < n:
  6. # 从a-zA-Z0-9特殊字符中生成指定数量的随机字符
  7. #pwd = ''.join(random.sample(string.ascii_letters + string.digits + string.punctuation, 8))
  8. #使用手动输入测试脚本,请正确输入
  9. pwd = input('输入需要测试的密码:')
  10. print(pwd)
  11. if pwd not in l:
  12. for k in string.ascii_lowercase:
  13. if k in pwd: #判断密码中是否有小写字母
  14. for o in string.ascii_uppercase:
  15. if o in pwd: #判断密码中是否有大写字母
  16. for p in string.digits:
  17. if p in pwd: #判断密码中是否有数字
  18. for q in string.punctuation:
  19. if q in pwd: #判断密码中是否有特殊字符
  20. l.append(pwd)
  21. i = i + 1
  22. break
  23. else:
  24. print('没有特殊字符')
  25. break
  26. else:
  27. print('没有数字')
  28. break
  29. else:
  30. print('没有大写字母')
  31. break
  32. else:
  33. print('没有小写字母')
  34. break
  35. else:
  36. print('密码已存在')
  37. continue

  测试发现,当3、4层for判断要跳出时,怎么写都不能完美解决,有些教程建议使用goto,由于是新手还不准备用这么高深的东西,放弃了。

  查了下好像Python语法确实有这个缺陷,最后想了个笨方法结局,广大猿友朋友如果有好的办法请指导!

  1. import string
  2. l = ['abc','','123!@#qweA']
  3. i = 0
  4. n = 3
  5. while i < n:
  6. # 从a-zA-Z0-9特殊字符中生成指定数量的随机字符
  7. # pwd = ''.join(random.sample(string.ascii_letters + string.digits + string.punctuation, 8))
  8. # 使用手动输入pwd测试代码
  9. pwd = input('请输入测试密码:')
  10. count = 0
  11. if pwd not in l:
  12. count = count +1
  13. else:
  14. print('密码已存在')
  15. continue
  16. if count == 1:
  17. for o in string.ascii_lowercase:
  18. if o in pwd:
  19. count = count + 1
  20. break
  21. else:
  22. print('不包含小写字母')
  23. if count == 2:
  24. for p in string.ascii_uppercase:
  25. if p in pwd:
  26. count = count +1
  27. break
  28. else:
  29. print('不包含大写字母')
  30. if count == 3:
  31. for q in string.digits:
  32. if q in pwd:
  33. count = count + 1
  34. break
  35. else:
  36. print('不包含数字')
  37. if count ==4:
  38. for w in string.punctuation:
  39. if w in pwd:
  40. l.append(pwd)
  41. i = i + 1
  42. break
  43. else:
  44. print('不包含特殊字符')

...............................................................................................................................................................................................................................................................................

  今天牛老师教了个集合交集的方法,一行代码搞定。

  1. import string
  2. l = ['abc','','123!@#qweA']
  3. i = 0
  4. n = 3
  5. while i < n:
  6. # 从a-zA-Z0-9特殊字符中生成指定数量的随机字符
  7. #pwd = ''.join(random.sample(string.ascii_letters + string.digits + string.punctuation, 8))
  8. #使用手动输入测试脚本,请正确输入
  9. pwd = input('输入需要测试的密码:')
  10. print(pwd)
  11. if pwd not in l:
  12. if (set(pwd) & set(string.ascii_letters)) and (set(pwd) & set(string.ascii_uppercase)) and \
  13. (set(pwd) & set(string.digits)) and (set(pwd) & set(string.punctuation)):
  14. i = i + 1
  15. print('成功一个')
  16. else:
  17. print('密码不符合要求')
  18. else:
  19. print('密码已存在')
  20. continue

从a-zA-Z0-9特殊字符中生成指定数量的随机字符密码的多层for循环跳出的更多相关文章

  1. JAVA中生成指定位数随机数的方法总结

    JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法. 方法一.通过Math类 public static String getRandom1(int len) { int rs = ( ...

  2. (C#)生成指定长度的随机字符串的通用方法

    .NET(C#)生成指定长度的随机字符串的通用方法,此方法可以指定字符串的长度,是否包含数字,是否包含符号,是否包含小写字母,是否包含大写字母等, 源码: #region 生成指定长度的随机字符串 / ...

  3. javascript生成指定范围的随机整数

    JavaScript有提供一个生成值区间在(0, 1)的随机小数的函数. Math.random(); // 0.10529863457509858 如果你和喜欢的人一起执行这个函数,之后生成的随机小 ...

  4. python 首先生成包含1000个随机字符的字符串,然后统计每个字符的出现次数

    题目:首先生成包含1000个随机字符的字符串,然后统计每个字符的出现次数 import string import random x = string.ascii_letters + string.d ...

  5. Oracle 生成指定范围内随机日期

    Oracle生成一个指定范围内的随机日期 /* 年1月1日)的整数偏移量来保存(即把日期保存为一个数字); * 因此可通过寻找‘指定日期’与‘关键日期’相对应的整数偏移量,再加一个指定范围内的随机整数 ...

  6. 在textarea中鼠标指定的位置插入字符或表情

    有些时候我们已经在textarea中输入了一些字符,然后想在鼠标指定的位置插入表情或者字符,这就需要用到jquery的一个小插件了. 代码如下: (function ($) { $.fn.extend ...

  7. js生成指定范围的随机整数

    定义一个random()函数,原理是 随机数和最大值减最小值的差相乘 最后再加上最小值. function random(min, max) { return Math.floor(Math.rand ...

  8. (php)生成指定个数的随机红包

    <?php $total=20;//红包总金额 $num=10;// 分成10个红包,支持10人随机领取 $min=0.01;//每个人最少能收到0.01元 $redpack = new red ...

  9. commons-text 生成指定长度的随机字符串

    package com.skylink.junge.demo; import java.util.HashSet; import java.util.Set; import org.apache.co ...

随机推荐

  1. java双指针的简单理解

    一.什么是双指针 双指针我所理解地是在遍历对象时,不是使用单个指针进行访问,而是使用两个相同方向或者相反方向的指针进行遍历,从而达到相应的目的. 在JAVA中并没有像C/C++指针地概念,所以这里所说 ...

  2. mysqldump表损坏问题

    遇到的问题:mysqldump: Error 1194: Table 'user' is marked as crashed and should be repaired when dumping t ...

  3. python内置函数(二)之filter,map,sorted

    filter filter()函数接收一个函数 f 和一个iterable的对象,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条 ...

  4. BZOJ 3924 / Luogu P3345 [ZJOI2015]幻想乡战略游戏 (动态点分治/点分树)

    题意 树的结构不变,每个点有点权,每一条边有边权,有修改点权的操作,设xxx为树中一点.求∑idist(x,i)∗a[i]\sum_idist(x,i)*a[i]i∑​dist(x,i)∗a[i]的最 ...

  5. HDU 3081 Marriage Match II 最大流OR二分匹配

    Marriage Match IIHDU - 3081 题目大意:每个女孩子可以和没有与她或者是她的朋友有过争吵的男孩子交男朋友,现在玩一个游戏,每一轮每个女孩子都要交一个新的男朋友,问最多可以玩多少 ...

  6. tensorboard 远程服务器本地浏览器无法显示

    在用xshell等ssh工具远程连接服务器时,我们常常在服务器上运行tensorflow代码,而且模型tf.summary保存文件在服务器上,这是直接采用tensorboard会有一些小问题.直接用t ...

  7. 转:Jmeter文件上传、下载

    一.上传/下载的过程.        上传的过程就是你把你本地的文件,扔到服务器上的这么一个过程.        下载呢,就是把服务器上的文件拿过来,然后存到你本地的这么一个过程.        总结 ...

  8. Win10+ Clion + 树莓派 + QT进行远程qt程序开发

    环境配置 环境配置 Windows上:QT5 + CLion 硬件上:一只可联网.可ssh连接且装有QT5的树莓派 暂时还没想好... 树莓派安装qt sudo apt-get update sudo ...

  9. 正则匹配href标签内容

    完整a标签 <a.+?href=\"(.+?)\".*>(.+)</a> 单独href : <a.+?href=\"(.+?)\" ...

  10. libpng warning: iCCP: known incorrect sRGB profile告警处理

    在 qt中加载某些 png图片会出现:libpng warning: iCCP: known incorrect sRGB profile   告警信息. 虽然没什么影响,但是总看到这个警告非常的不舒 ...