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()

运行结果截图:

 

posted @ 2017-06-01 23:33  zhou_jun  阅读(620)  评论(0编辑  收藏  举报