师从‘百测’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循环跳出的更多相关文章

  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. 选择排序Selection_Sort

    基本思想:和冒泡排序.直接插入排序并称为三大简单排序算法.显然,说明它们都很简单

  2. Gym - 102028H Can You Solve the Harder Problem? (后缀数组+RMQ+单调栈)

    题意:求一个序列中本质不同的连续子序列的最大值之和. 由于要求“本质不同”,所以后缀数组就派上用场了,可以从小到大枚举每个后缀,对于每个sa[i],从sa[i]+ht[i]开始枚举(ht[0]=0), ...

  3. Codeforces Round #591 (Div. 2, based on Technocup 2020 Elimination Round 1) A. CME

    链接: https://codeforces.com/contest/1241/problem/A 题意: Let's denote correct match equation (we will d ...

  4. HDU 6052 - To my boyfriend | 2017 Multi-University Training Contest 2

    说实话不是很懂按题解怎么写,思路来源于 http://blog.csdn.net/calabash_boy/article/details/76272704?yyue=a21bo.50862.2018 ...

  5. JavaScript程序设计——FOR循环

    FOR循环流程图: 1.编写求6!的阶乘的代码 2.编写10个10相加的和 3.编写1+2+3+...+10连续相加的和 4.编写1+(1+2)+(1+2+3)+...+(1+2+3+...+10)连 ...

  6. Poj 2887 Big String(块状数组)

    Big String Time Limit: 1000MS Memory Limit: 131072K Description You are given a string and supposed ...

  7. Rapid Object Detection using a Boosted Cascade of Simple Features 部分翻译

    Rapid ObjectDetection using a Boosted Cascade of Simple Features 使用简单特征级联分类器的快速目标检测 注:部分翻译不准处以红色字体给出 ...

  8. JAVA的面向对象1

    如何理解面向对象 我们说面向对象具有三大特征:封装性.继承性和多态性,那么我们怎么去理解所谓的封装.继承.多态? 1.封装:功能都给你做好了,你不必去理解它是怎么写出来的,直接使用即可. 如:房子.电 ...

  9. Clion + 树莓派/Ubuntu 远程调试

    Clion进行远程调试 在大三下半学期学习Linux高级编程时,老师布置的作业要在linux机器上进行,当时完成的十分艰苦,调试难受的一匹,当时就萌生了这个想法,因为Jetbrains官方文档的晦涩( ...

  10. ubuntu 文件管理器 异常 强制关闭

    搜索进程号 ps -A | grep nautilus 杀掉 sudo kill xxxxx