从a-zA-Z0-9特殊字符中生成指定数量的随机字符密码的多层for循环跳出
师从‘百测’besttest
今日牛老师布置了一个作业,生成一个随机密码,且要包含大写字母、小写字母、数字和特殊字符,且不能重复。
想着先生成密码,然后用各字符去检查是否存在,使用for嵌套循环。
import string
l = ['abc','','123!@#qweA']
i = 0
n = 3
while i < n:
# 从a-zA-Z0-9特殊字符中生成指定数量的随机字符
#pwd = ''.join(random.sample(string.ascii_letters + string.digits + string.punctuation, 8))
#使用手动输入测试脚本,请正确输入
pwd = input('输入需要测试的密码:')
print(pwd)
if pwd not in l:
for k in string.ascii_lowercase:
if k in pwd: #判断密码中是否有小写字母
for o in string.ascii_uppercase:
if o in pwd: #判断密码中是否有大写字母
for p in string.digits:
if p in pwd: #判断密码中是否有数字
for q in string.punctuation:
if q in pwd: #判断密码中是否有特殊字符
l.append(pwd)
i = i + 1
break
else:
print('没有特殊字符')
break
else:
print('没有数字')
break
else:
print('没有大写字母')
break
else:
print('没有小写字母')
break
else:
print('密码已存在')
continue
测试发现,当3、4层for判断要跳出时,怎么写都不能完美解决,有些教程建议使用goto,由于是新手还不准备用这么高深的东西,放弃了。
查了下好像Python语法确实有这个缺陷,最后想了个笨方法结局,广大猿友朋友如果有好的办法请指导!
import string
l = ['abc','','123!@#qweA']
i = 0
n = 3
while i < n:
# 从a-zA-Z0-9特殊字符中生成指定数量的随机字符
# pwd = ''.join(random.sample(string.ascii_letters + string.digits + string.punctuation, 8))
# 使用手动输入pwd测试代码
pwd = input('请输入测试密码:')
count = 0
if pwd not in l:
count = count +1
else:
print('密码已存在')
continue
if count == 1:
for o in string.ascii_lowercase:
if o in pwd:
count = count + 1
break
else:
print('不包含小写字母')
if count == 2:
for p in string.ascii_uppercase:
if p in pwd:
count = count +1
break
else:
print('不包含大写字母')
if count == 3:
for q in string.digits:
if q in pwd:
count = count + 1
break
else:
print('不包含数字')
if count ==4:
for w in string.punctuation:
if w in pwd:
l.append(pwd)
i = i + 1
break
else:
print('不包含特殊字符')
...............................................................................................................................................................................................................................................................................
今天牛老师教了个集合交集的方法,一行代码搞定。
import string
l = ['abc','','123!@#qweA']
i = 0
n = 3
while i < n:
# 从a-zA-Z0-9特殊字符中生成指定数量的随机字符
#pwd = ''.join(random.sample(string.ascii_letters + string.digits + string.punctuation, 8))
#使用手动输入测试脚本,请正确输入
pwd = input('输入需要测试的密码:')
print(pwd)
if pwd not in l:
if (set(pwd) & set(string.ascii_letters)) and (set(pwd) & set(string.ascii_uppercase)) and \
(set(pwd) & set(string.digits)) and (set(pwd) & set(string.punctuation)):
i = i + 1
print('成功一个')
else:
print('密码不符合要求')
else:
print('密码已存在')
continue
从a-zA-Z0-9特殊字符中生成指定数量的随机字符密码的多层for循环跳出的更多相关文章
- JAVA中生成指定位数随机数的方法总结
JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法. 方法一.通过Math类 public static String getRandom1(int len) { int rs = ( ...
- (C#)生成指定长度的随机字符串的通用方法
.NET(C#)生成指定长度的随机字符串的通用方法,此方法可以指定字符串的长度,是否包含数字,是否包含符号,是否包含小写字母,是否包含大写字母等, 源码: #region 生成指定长度的随机字符串 / ...
- javascript生成指定范围的随机整数
JavaScript有提供一个生成值区间在(0, 1)的随机小数的函数. Math.random(); // 0.10529863457509858 如果你和喜欢的人一起执行这个函数,之后生成的随机小 ...
- python 首先生成包含1000个随机字符的字符串,然后统计每个字符的出现次数
题目:首先生成包含1000个随机字符的字符串,然后统计每个字符的出现次数 import string import random x = string.ascii_letters + string.d ...
- Oracle 生成指定范围内随机日期
Oracle生成一个指定范围内的随机日期 /* 年1月1日)的整数偏移量来保存(即把日期保存为一个数字); * 因此可通过寻找‘指定日期’与‘关键日期’相对应的整数偏移量,再加一个指定范围内的随机整数 ...
- 在textarea中鼠标指定的位置插入字符或表情
有些时候我们已经在textarea中输入了一些字符,然后想在鼠标指定的位置插入表情或者字符,这就需要用到jquery的一个小插件了. 代码如下: (function ($) { $.fn.extend ...
- js生成指定范围的随机整数
定义一个random()函数,原理是 随机数和最大值减最小值的差相乘 最后再加上最小值. function random(min, max) { return Math.floor(Math.rand ...
- (php)生成指定个数的随机红包
<?php $total=20;//红包总金额 $num=10;// 分成10个红包,支持10人随机领取 $min=0.01;//每个人最少能收到0.01元 $redpack = new red ...
- commons-text 生成指定长度的随机字符串
package com.skylink.junge.demo; import java.util.HashSet; import java.util.Set; import org.apache.co ...
随机推荐
- 关于maven依赖死活都下载不了终极解决方案
项目想下载一个依赖,在idea中死都下不了,查看网上各种解决方案都没有效果,出绝招,我使用命令下载jar然后导入到项目引用的maven仓库 类似这种命令:mvn install:install-fil ...
- 《深入理解Java虚拟机》之(一、内存区域)
一.java的体系构成: Java的技术体系主要由支撑java程序运行的虚拟机.提供各种开发领域接口支持的java api.java编程语言及许多第三方java框架(如Spring .Struts等) ...
- springboot2.0入门(三)----定义编程风格+jackjson使用+postMan测试
一.RESTFul风格API 1.优点: )看Url就知道要什么资源 )看http method就知道针对资源干什么 )看http status code就知道结果如何 HTTP方法体现对资源的操作: ...
- 关于dll注入
例如: 有一个游戏修改器:其中有一个按钮“自动打怪”:点击时游戏会实现相应的功能: 对于游戏程序来说,自动打怪操作本质上就是call调用一个函数: 但是修改器和游戏是两个独立的 ...
- 洛谷 P1355 神秘大三角(计算几何基础)
P1355 神秘大三角 题目提供者yeszy 标签 福建省历届夏令营 难度 普及/提高- 题目描述 判断一个点与已知三角形的位置关系. 输入输出格式 输入格式: 前三行:每行一个坐标,表示该三角形的三 ...
- OnUpdateError
DataSetProvider1.OnUpdateError void __fastcall TFrmItem::Query1UpdateError(TDataSet *ASender, EFDExc ...
- 最远 Manhattan 距离
最远 Manhattan 距离 处理问题 K维空间下的n个点,求两点最远曼哈顿距离 思路 以二维为例介绍算法思想,即可类推到k维.对于P,Q两点,曼哈顿距离|Px-Qx|+|Py-Qy|可看作(±Px ...
- maven mvn 命令行 编译打包
* 配置好jdk * 下载安装maven http://maven.apache.org/download.cgi apache-maven-3.3.3-bin.zip * 解压到G:\apache- ...
- 重写equals为啥需要重写hashCode
描述 以前一直记得重写equals要把hashCode也要重写了,但是一直也是没有搞明白, 最近在看一些东西,觉得有必要记录一下. 了解一下equals equals是Object类的方法, equa ...
- Linux设备驱动程序 之 装载和卸载模块
前置说明 本文例子中涉及两个模块hello.ko和world.ko,其中hello导出符号供world使用: insmod 该命令将模块的代码和数据装入内核,然后使用内核的符号表继续模块中任何未解析的 ...