从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 ...
随机推荐
- flex布局详解
1.背景介绍 传统的布局解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现. 2009年,W3C ...
- 基于VS2013的MFC窗体按钮事件触发案例(亲测可用)
学过python的小朋友们一定对python freeze命令不陌生,这一命令用于导出python安装模块,用于新电脑可以快速的配置安装所需的模块,以便快速的加入项目. 那么我们大可以用 window ...
- 题解 [BZOJ4886] 叠塔游戏
题面 解析 这是个有趣的建图题啊. 首先我们可以发现,宽度严格递增是没什么用的. 因为实际上我们在旋转完以后, 矩形的顺序是可以随便排的. 因此只要保证宽度互不相同就行了. 然后,我们对长和宽离散化, ...
- XHTML测试题
1.XHTML 指的是? A.EXtra Hyperlinks and Text Markup Language B.EXtensible HyperText Marking Language C.E ...
- Laravel中Contracts的理解和使用
Laravel 的 Contracts 是一组定义了框架核心服务的接口.说白了就是一组接口.使用它就是为了降低耦合性. 即便如此,是不是也有同学会搞不清楚Contracts在lavarel体系中的到底 ...
- Java设计模式-策略模式实际应用场景
容错恢复机制 容错恢复机制是应用程序开发中非常常见的功能.那么什么是容错恢复呢?简单点说就是:程序运行的时候,正常情况下应该按照某种方式来做,如果按照某种方式来做发生错误的话,系统并不会 ...
- CSP-S 模拟测试 45 题解
由于咕掉的题解太多了,所以只能趁改完不动题的时间,来补补坑qwq,还是太弱了. 考试过程: 到新机房的第一次考试,貌似海星? 第一题一开始就觉得是个贪心,但以为所有小怪兽都要打完,所以想复杂了,但后来 ...
- python 语音输入
# 系统客户端包 import win32com.client speaker = win32com.client.Dispatch("SAPI.SPVOICE") # 系统接口 ...
- tracert命令与tracert (IP地址)-d有什么区别?
他们的意义基本相同,都是路由追踪,返回从源到目标的路由情况:但tracert -d不解析各路由器的名称,只返回路由器的IP地址.而tracert 不仅返回各路由器的IP地址,而且返回其名称.简单来说, ...
- 使用 python 编写一个授权登录验证的模块
使用 python 编写一个授权登录验证的模块 我们编写的思路: 1.登录的逻辑:如果用户名和密码正确,就返回 token . 2.生成 token 的逻辑,根据用户名,随机数,当前时间 + 2 小时 ...