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 什么是回调函数? 我们绕点远路来 ...
随机推荐
- Spring Boot Starters
Spring Boot Starters 摘自 https://www.nosuchfield.com/2017/10/15/Spring-Boot-Starters/ 2017-10-15 Spri ...
- 解决使用Navicat等工具进行连接登录mysql的1521错误,(mysql为8.0版本)
mysql 8.0的版本的加密方式和以前的不一样,因此使用Navicat等工具进行连接的时候,会报1521的异常. 解决方法如下: 登录mysql的命令行工具,输入如下代码: ALTER USER ' ...
- 如何使用容器镜像服务 TCR 轻松实现容器 DevOps
作者周明,腾讯云容器产品工程师.目前主要负责腾讯云TKE.TCR等产品控制台的相关研发工作. 概述 当你使用云厂商提供的容器服务部署业务服务后,是否对交付部署全链路的效率有更高的需求,例如实现基于容器 ...
- 风炫安全web安全学习第三十四节课 文件包含漏洞防御
风炫安全web安全学习第三十四节课 文件包含漏洞防御 文件包含防御 在功能设计上不要把文件包含的对应文件放到前台去操作 过滤各种../,https://, http:// 配置php.ini文件 al ...
- 观《if (domain logic) then CQRS, or Saga?》所悟
引言 Udi Dahan曾在2017年阿姆斯特丹的DDD欧洲年会上发表过一篇演讲--if (domain logic) then CQRS, or Saga.视频是UP主从Youtube搬运的,我听力 ...
- Docker一秒进阶
tar包: 从tar包导入:docker load < xxxx.tar docker run -d -p 8080:80 --name [名字] -v `pwd`:/usr/share/ngi ...
- linux系统修改Swap分区【转】
在装完Linux系统之后自己去修改Swap分区的大小(两种方法) 在安装完Linux系统后,swap分区太小怎么办,怎么可以扩大Swap分区呢?有两个办法,一个是从新建立swap分区,一个是增加swa ...
- selenium自动化 | 通过获取cookies登录
>>>登录百度<<<#获取登录成功后的cookies def get_cookies(): driver.get(bd_url) driver.implicitly ...
- spring cloud gateway 自定义GatewayFilterFactory
spring cloud gateway提供了很多内置的过滤器,那么因为需求的关系,需要自定义实现,并且要可配置,在一番折腾之后,总算是解决了,那么久记录下来 对于自定义的factory,我们可以选择 ...
- myisam崩溃后发生损坏的概率比innodb高的原因
myisam崩溃后发生损坏的概率比innodb高的原因