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函数的实例,书写一个创建有针对性的专用密码字典的程序的更多相关文章

  1. python 函数小实例

    1.判断一个数字是否为素数: import math # -----------------判断一个数是否是素数------------------ def sushu(a): i=1 for i i ...

  2. Python(字符串操作实例1)一个字符串用空格隔开

    # 将字符中单词用空格隔开# 已知传入的字符串中只有字母,每个单词的首字母大写,# 请将每个单词用空格隔开,只保留第一个单词的首字母大写传入:“HelloMyWorld”# 返回“Hello my w ...

  3. python 函数参数的传递(参数带星号的说明) 元组传递 字典传递

    python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...

  4. 【290】Python 函数

    参考:Python 函数 参考:7.3 给函数参数增加元信息(增加参数的数据类型) 目录: 一.语法 二.说明 三.参数传递 四.参数 4. 1 必备参数 4.2 关键字参数 4.3 缺省参数 4.4 ...

  5. 10分钟学会Python函数基础知识

    看完本文大概需要8分钟,看完后,仔细看下代码,认真回一下,函数基本知识就OK了.最好还是把代码敲一下. 一.函数基础 简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运 ...

  6. python小练习,打出1-100之间的所有偶数,设计一个函数,在桌面上创建10个文件,并以数字命名,复利计算函数

    练习一:打出1-100之间的所有偶数 def even_print(): for i in range(1,101): if i % 2 == 0: print (i) even_print() #列 ...

  7. python第六天 函数 python标准库实例大全

    今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...

  8. Python回调函数用法实例详解

    本文实例讲述了Python回调函数用法.分享给大家供大家参考.具体分析如下: 一.百度百科上对回调函数的解释: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函 ...

  9. Python回调函数用法实例

    Python回调函数用法实例 作者:no.body链接:https://www.zhihu.com/question/19801131/answer/27459821 什么是回调函数? 我们绕点远路来 ...

随机推荐

  1. 基于Python的接口自动化实战-基础篇之pymysql模块操作数据库

    引言 在进行功能或者接口测试时常常需要通过连接数据库,操作和查看相关的数据表数据,用于构建测试数据.核对功能.验证数据一致性,接口的数据库操作是否正确等.因此,在进行接口自动化测试时,我们一样绕不开接 ...

  2. [从源码学设计]蚂蚁金服SOFARegistry之服务上线

    [从源码学设计]蚂蚁金服SOFARegistry之服务上线 目录 [从源码学设计]蚂蚁金服SOFARegistry之服务上线 0x00 摘要 0x01 业务领域 1.1 应用场景 1.1.1 服务发布 ...

  3. js 的关键字

    1.get / set var test = { _Name: "Limei", _Age: 20, get name() { return this._Name;}, set a ...

  4. gitlab git仓库地址修改后更新方法

    背景 由于gitlab地址修改后导致本地仓库的远程仓库失效 解决办法 直接修改本地的远程仓库地址 - 进入项目地址git remote -v 查看旧地址 - 更新指令 git remote set-u ...

  5. WDCP v3 安装

    ---已更新至3.0.3---经过近期的努力,wdCP_v3正式版终于可以和大家见面了v3功能预览1 底层完全重新架构,更安全稳定,省资源更高效2 安装更简单,快速与方便3 功能更强大和易扩展,且完美 ...

  6. #1使用html+css+js制作网站教程 准备

    #1使用html+css+js制作网站教程 准备 本系列链接 0 准备 0.1 IDE编辑软件 0.2 浏览器 0.3 基础概念 0.3.1 html 0.3.2 css 0.3.3 js 0.4 文 ...

  7. MySql创建存储过程,并使用事件定时调用

    一.使用命令行创建存储过程的步骤 :参数详情参考 https://www.mysqlzh.com/ 1.模板  delimiter $$ # 设置分隔符为 '$$' ,mysql默认的语句分隔符为 ' ...

  8. ICMP协议概述

    • ICMP是三层协议,和IP.ARP.ICMP同属三层    • IP协议中的6是代表上层的TCP协议,17代表UDP协议,1代表同层的ICMP协议    • ICMP协议主要用来探测       ...

  9. k8s之RBAC授权模式

    导读 上一篇说了k8s的授权管理,这一篇就来详细看一下RBAC授权模式的使用 RBAC授权模式 基于角色的访问控制,启用此模式,需要在API Server的启动参数上添加如下配置,(k8s默然采用此授 ...

  10. 2021升级版微服务教程6—Ribbon使用+原理+整合Nacos权重+实战优化 一篇搞定

    2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...