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 什么是回调函数? 我们绕点远路来 ...
随机推荐
- JVM调试说明
-XX:+<option>:表示开启option选项 -XX:-<option>:表示关闭option选项 -XX:<option>=<value>:表 ...
- filebeat7.5.2 在 windows server 2008 R2 设置系统服务报错
今天在windows server 2008 R2 设置filebeat为系统服务报错(在 windows 10 .windows server 2012.windows server 2019下安装 ...
- sql操作数据库(3)-->外键约束、数据库表之间的关系、三大范式、多表查询、事务
外键约束 在新表中添加外键约束语法: constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名) 在已有表中添加外键约束:alter t ...
- 浅谈connect,withRouter,history,useState,useEffect
1.connect in umi connect 可以链接不同的组件,从而在这个组件中使用其他组件的参数,常用于获取redux中存取的值. 2.withRouter in umi withRouter ...
- CentOS 7 网卡注释
TYPE=Ethernet # 网络类型为:EthernetPROXY_METHOD=none # 代理方式:关闭状态BROWSER_ONLY=no # 只是浏览器:否BOOTPROTO=static ...
- JVM--理解介绍
JVM?JDK?JRE?关系? JDK(Java Development Kit),它是实际上存在的,它包含JRE+编译.运行等开发工具. JRE(Java Runtime Environment), ...
- 洛谷 P4396 [AHOI2013]作业
题目描述 题目传送门 分析 因为询问是关于区间的,并且没有强制在线,所以能用莫队解决 但是还要支持查询区间内大于等于 \(a\),小于等于 \(b\) 的数的个数和数值的个数 所以还要套一个数据结构 ...
- Flutter 基础组件:按钮
前言 Material组件库中提供了多种按钮组件如RaisedButton.FlatButton.OutlineButton等,它们都是直接或间接对RawMaterialButton组件的包装定制,所 ...
- 记录Js动态加载页面.append、html、appendChild、repend添加元素节点不生效以及解决办法
今天再优化blog页面的时候添加了个关注按钮和图片,但是页面上这个按钮和图片时有时无,本来是搞后端的,被这个前端的小问题搞得抓耳挠腮的! 网上各种查询解决方案,把我解决问题的艰辛历程分享出来,希望大家 ...
- python zxing包解析二维码报UnicodeDecodeError错误解决办法
一般错误的原因是这个库不支持中文的解码(二维码内容包含中文). 修改如下: 进入zxing.__init__.py代码中,类BarCode下,parse方法中: 找到下面这两行原代码如下: 1 raw ...