从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 ...
随机推荐
- 【高维前缀和】8.15B. 组合数
题目分析 没有接触过高维前缀和的话会有一点抽象
- [NOI2012]骑行川藏——拉格朗日乘子法
原题链接 不会啊,只好现学了拉格朗日乘子法,简单记录一下 前置芝士:拉格朗日乘子法 要求\(n\)元目标函数\(f(x_1,x_2,...,x_n)\)的极值,且有\(m\)个约束函数形如\(h_i( ...
- dcm4che-core导包失败! mvn pom文件导包总是失败
原因可能是所导的包不在共有项目中,可能在个人项目中,需要添加远程仓库 <!--远程仓库部署--><repositories> <repository> <id ...
- 洛谷P4001 [BJOI2006]狼抓兔子(平面图转对偶图)
传送门 明明只要最小割加点优化就能过的东西…… 然而我偏偏要去学平面图转对偶图结果发现课件关键地方看不清->这里 而且建图累的半死…… 说实话只要最大流建图的时候反向边直接设为当前边容量再加个当 ...
- P4145——线段树点修改&&模板题
题目 链接 题意:对一个数列进行以下两种操作: 给$[l,r]$中的每个数开平方(下取整) 询问$[l,r]$中各个数的和 解决方法 显然,区间开平方不满足区间可加性,所以对区间中每个数开平方不能通过 ...
- Noip 模拟题 T2 数字对
2.数字对 [题目描述] 小H是个善于思考的学生,现在她又在思考一个有关序列的问题. 她的面前浮现出一个长度为n的序列{ai},她想找出一段区间[L, R](1 <= L <= R < ...
- 关于shell输出的一些问题
有时候在调试程序中需要将打印到屏幕上的信息保存中,一般情况下可以使用 >fileName,应该注意到有些情况下程序可能会在标准错误输出中输出这些内容,这时需要时 progam 2>1.tx ...
- 学习Javascript的编程风格
Javascript编程风格 Douglas Crockford是Javascript权威,Json格式就是他的发明. 去年11月他有一个演讲(Youtube),谈到了好的Javascript编程 ...
- Vue_(Router路由)-vue-router路由的基本用法
vue-router官网:传送门 vue-router起步:传送门 vue-router路由:Vue.js官网推出的路由管理器,方便的构建单页应用 单页应用:Single Page Applicati ...
- TypeScript 技巧
前言 很早以前就尝试过使用 TypeScript 来进行日常编码,但自己对静态类型语言的了解并不深入,再加上 TypeScript 的类型系统有着一定的复杂度,因此感觉自己并没有发挥好这门语言的优势, ...