python函数的实例,书写一个创建有针对性的专用密码字典的程序
python学习,实战学习,函数的学习与使用,综合知识的运用。包括for ,while循环,if...else.. 和if... elif ... else 的条件判断!
问题描述:书写一个创建有针对性的专用密码字典的程序,其中包括的功能模块有:
0,退出程序
1,输入密码原始字符串
2,添加非法字符到列表
3,清空原始密码列表
4,整理原始密码列表
5,改变默认密码长度
6,创建密码列表
7,显示所有密码
8,创建字典文件
实例代码:
#coding=utf-8
'''
Created on 2017年6月1日 @author: 叮当
'''
import os
import platform
import itertools
import time def main():
''' 主程序 '''
global rawList #原始数据列表
rawList = []
global denyList #非法单词列表
denyList = [' ', '', '@']
global pwList #最终的密码列表
pwList = []
global minLen #密码的最小长度
minLen = 6
global maxLen #密码的最大长度
maxLen = 16
global timeout
timeout = 3
global flag
flag = 0
run ={
'0':exit, #退出
'1':getRawList, #创建原始列表
'2':addDenyList, #添加不可能出现的元素
'3':clearRawList, #清空列表
'4':setRawList, #原始列表排序
'5':modifyPasswordLen, #修改最终密码的长度
'6':createPasswordList, #创建最终的字典列表
'7':showPassword, #显示密码
'8':createPasswordFile #创建密码文件
} while True:
mainMenu()
op = raw_input('输入选项:')
if op in map(str, range(len(run))):
run.get(op)()
else:
tipMainMenuInputError()
continue def mainMenu():
''' 主菜单 '''
global denyList
global rawList
global pwList
global flag
clear()
print(u'| |'),
print(u'='*40)
print(u'| |')
print(u'| | 0: 退出程序')
print(u'| | 1: 输入密码原始字符串')
print(u'| | 2: 添加非法字符到列表')
print(u'| | 3: 清空原始密码列表')
print(u'| | 4: 整理原始密码列表')
print(u'| | 5: 改变默认密码长度(%d-%d)' %(minLen, maxLen))
print(u'| | 6: 创建密码列表')
print(u'| | 7: 显示所有密码')
print(u'| | 8: 创建字典文件')
print(u'| |'),
print(u'='*40)
print(u'| |')
print(u'当前非法的字符为:%s' %denyList)
print(u'当前原始密码元素为:%s' %rawList)
print(u'共有密码%d个' %len(pwList))
if flag:
print(u'已在当前目录创建密码文件dic.txt')
else:
print(u'尚未创建密码文件') def clear():
''' 清屏函数 '''
OS = platform.system()
if ( OS == u'Windows'):
os.system('cls')
else:
os.system('clear') def tipMainMenuInputError():
''' 错误提示 '''
clear()
print(u'只能输入0-7的整数,等待%id秒后重新输入' %timeout)
time.sleep(timeout) def getRawList():
''' 获取原始数据列表 '''
clear()
global denyList
global rawList
print(u'输入回车后直接退出')
print(u'当前添加密码列表为: %s' %rawList)
st = None
while not st == '':
st = raw_input('请输入密码元素字符串:')
if st in denyList:
print(u'这个字符串是预先设定的非法字符串')
continue
else:
rawList.append(st)
clear()
print(u'输入回车后直接退出')
print(u'当前添加密码列表为: %s' %rawList)
def addDenyList():
''' 添加非法词 '''
clear()
global denyList
print(u'输入回车后直接退出')
print(u'当前非法字符为: %s' %denyList)
st = None
while not st == '':
st = raw_input('请输入需要添加的非法字符串:')
denyList.append(st)
clear()
print(u'输入回车后直接退出')
print(u'当前非法字符列表为: %s' %denyList) def clearRawList():
''' 清空原始数据列表 '''
global rawList
rawList = [] def setRawList():
''' 整理'原始数据列表 '''
global rawList
global denyList
a = set(rawList)
b = set(denyList)
rawList = []
for str in set(a - b):
rawList.append(str) def modifyPasswordLen():
''' 修改默认密码长度 '''
clear()
global maxLen
global minLen
while True:
print(u'当前密码长度为:%d-%d' %(minLen-maxLen))
min = raw_input("请输入密码的最小长度:")
max = raw_input("请输入密码的最大长度:")
try:
minLen = int(min)
maxLen = int(max)
except ValueError:
print(u'密码长度只能输入数字[6-18]')
break
if minLen not in xrange(6,19) or maxLen not in xrange(6,19):
print(u'密码长度只能输入数字[6-18]')
minLen = 6
maxLen = 16
continue
if minLen ==maxLen:
res = raw_input("确定将密码长度设定为%d吗?(Yy/Nn)" %minLen)
if res not in list('YyNn'):
print(u'输入错误,请重新输入')
continue
elif res in list('yY'):
print(u'好吧,你确定就好')
break
else:
print(u'给个机会,改一下吧')
continue
elif minLen > maxLen:
print(u'最小长度比最大长度还大,可能吗?请重新输入')
minLen = 6
maxLen = 16
else:
print(u'设置完毕,等待%d秒后回到主菜单' %timeout)
time.sleep(timeout)
break def createPasswordList():
''' 创建密码列表 '''
global rawList
global pwList
global maxLen
global minLen
titleList = []
swapcaseList = []
for st in rawList:
swapcaseList.append(st.swapcase())
titleList.append(st.title())
sub1 = []
sub2 = []
for st in set(rawList + titleList +swapcaseList):
sub1.append(st)
for i in xrange(2,len(sub1)+1):
sub2 += list(itertools.permutations(sub1, i))
for tup in sub2:
PW = ''
for subPW in tup:
PW += subPW
if len(PW) in xrange(minLen, maxLen + 1):
pwList.append(PW)
else:
pass def showPassword():
''' 显示创建的密码 '''
global pwList
global timeout
for i in xrange(len(pwList)):
if i%4 == 0:
print("%s\n" %pwList[i])
else:
print("%s\t" %pwList[i])
print("\n")
print(u'显示%d秒,回到主菜单' %timeout)
time.sleep(timeout) def createPasswordFile():
''' 创建密码字典文件 '''
global flag
global pwList
print(u'当前目录下创建字典文件dic.txt')
time.sleep(timeout)
with open('./dic.txt', 'w+') as fp:
for PW in pwList:
fp.write(PW)
fp.write('\n')
flag =1 if __name__ == '__main__':
main()
运行结果截图:
python函数的实例,书写一个创建有针对性的专用密码字典的程序的更多相关文章
- python 函数小实例
1.判断一个数字是否为素数: import math # -----------------判断一个数是否是素数------------------ def sushu(a): i=1 for i i ...
- Python(字符串操作实例1)一个字符串用空格隔开
# 将字符中单词用空格隔开# 已知传入的字符串中只有字母,每个单词的首字母大写,# 请将每个单词用空格隔开,只保留第一个单词的首字母大写传入:“HelloMyWorld”# 返回“Hello my w ...
- python 函数参数的传递(参数带星号的说明) 元组传递 字典传递
python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...
- 【290】Python 函数
参考:Python 函数 参考:7.3 给函数参数增加元信息(增加参数的数据类型) 目录: 一.语法 二.说明 三.参数传递 四.参数 4. 1 必备参数 4.2 关键字参数 4.3 缺省参数 4.4 ...
- 10分钟学会Python函数基础知识
看完本文大概需要8分钟,看完后,仔细看下代码,认真回一下,函数基本知识就OK了.最好还是把代码敲一下. 一.函数基础 简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运 ...
- python小练习,打出1-100之间的所有偶数,设计一个函数,在桌面上创建10个文件,并以数字命名,复利计算函数
练习一:打出1-100之间的所有偶数 def even_print(): for i in range(1,101): if i % 2 == 0: print (i) even_print() #列 ...
- python第六天 函数 python标准库实例大全
今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...
- Python回调函数用法实例详解
本文实例讲述了Python回调函数用法.分享给大家供大家参考.具体分析如下: 一.百度百科上对回调函数的解释: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函 ...
- Python回调函数用法实例
Python回调函数用法实例 作者:no.body链接:https://www.zhihu.com/question/19801131/answer/27459821 什么是回调函数? 我们绕点远路来 ...
随机推荐
- 并发编程--锁--volatile
在讲volatile关键字之前我们先了解Java的内存模型,Java内存模型规定所有的变量都是存在主存当中,每个线程都有自己的工作内存.线程对变量的所有操作都必须在自己的工作内存中进行,而不能直接对主 ...
- R语言学习笔记-单一决策树
决策树比较简单明晰,但存在不稳定的风险,数据的微小变化会导致最佳决策树结构的巨大变化,且决策树可能会变得比较复杂. 其算法原理参见https://zhuanlan.zhihu.com/p/148010 ...
- idea thymeleaf页面变量报错解决
IDEA在thymeleaf页面编写变量,如${user.id}会出现红色波浪下划线错误,提示Validates unresolved references and invalid expressio ...
- 计算机考研真题 ZOJ问题
题目描述 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下: 1. zoj能AC: 2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或 ...
- 一文带你学会AQS和并发工具类的关系
1. 存在的意义 AQS(AbstractQueuedSynchronizer)是JAVA中众多锁以及并发工具的基础,其底层采用乐观锁,大量使用了CAS操作, 并且在冲突时,采用自旋方式重试,以实 ...
- Nginx Consul nginx-upsync-module
nginx consul nginx-upsync-module 依赖包: yum -y install libpcre3 libpcre3-dev ruby zlib1g-dev patch 下载n ...
- EGADS框架处理流程分析
最近在搞异常检测相关的工作,因此调研了业界常用的异常检测系统.通过查阅相关资料,发现业界对雅虎开源的EGADS系统评价比较高,其git项目已有980个star.这周阅读了项目的源码,梳理了系统框架的基 ...
- 【VNC】vnc远程连接的时候无法显示图像已解决
介绍一个 VNC连接工具:iis7服务器管理工具 IIs7服务器管理工具可以批量连接并管理VNC服务器 作为服务器集成管理器,它最优秀的功能就是批量管理windows与linux系统服务器.vps.能 ...
- 分布式系统:dubbo的连接机制
目录 研究这个问题的起因 dubbo的连接机制 为什么这么做 dubbo同步转异步 dubbo的实现 纯netty的简单实现 总结 研究这个问题的起因 起因是一次面试,一次面试某电商网站,前面问到缓存 ...
- oracle move表空间(分区表,索引)
1.修改分区表分区表空间 SELECT 'ALTER TABLE ' || table_owner || '.' || TABLE_NAME || ' MOVE PARTITION ' || PART ...