Python学习day1作业总结

发布时间:2019-09-08 09:10:54编辑:auto阅读(1386)

    为了以后更好更快速的复习,此博客记录我对作业的总结。对于基础作业,我认为最重要的是过程,至于实现是不是完美,代码是不是完美,虽然重要,但是作业过程中,用到的知识点是值得总结和整理的。

    一.模拟登陆:

    1. 用户输入帐号密码进行登陆  
    2. 用户信息保存在文件内  
    3. 用户密码输入错误三次后锁定用户  

    思路:

    1)输入时用户名后,先判断用户名是否被锁,然后检查用户名是否存在用户数据库;  
    2)输入相同不存在用户名3次,此用户名被锁;  
    3)输入用户名存在时才可输入密码,相同用户名时,输入密码错误三次,此用户名被锁;  
    4)若每次都没输入存在的用户,则再次要求输入用户,直到达到总输入次数;

    基本流程图:

    wKioL1gMPYDC8XOrAAHI3_mcZTE285.jpg

    代码:

    cat user_login.py #主程序
    #!#!/usr/bin/env python
    #_*_coding:utf-8_*_
    '''
     * Created on 2016/10/10 22:13.
     * @author: Chinge_Yang.
    '''
    import os
    import getpass
    retry_max = 3
    retry_count = 0
    user_file = "user.txt"
    lock_file = "user_lock.txt"
    user_same = 0
    user_tmp = ""
    if not os.path.exists(lock_file):   #不存在时,则创建
        f = open(lock_file,'w')
        f.close()
    
    while retry_count < retry_max:
        #输入用户名
        user_name = input("Please input your name:")
        #输入的用户名和上次输入的对比
        if user_name == user_tmp:
            #用户一样数加1
            user_same += 1
        else:
            #用户一样数归0
            user_same = 0
        #输入的用户名存为临时变量
        user_tmp = user_name
        #判断用户是否被锁
        lock_check = open(lock_file)
        for line in lock_check:
            line = line.split()
            #用户被锁,打印提示
            if user_name == line[0]:
                exit("User \033[1;31;40m%s\033[0m is locked!" % user_name)
        lock_check.close()
        #查看是否存在于用户数据库
        user_check = open(user_file)
        for l in user_check:
            l = l.split()
            user = l[0]
            passwd = l[1]
            if user_name == user:
                #输入密码
                #user_passwd = input("Please input your password:")
                user_passwd = getpass.getpass("\033[1;33;40mPlease input your password:\033[0m")
                #判断密码是否正确
                if user_passwd == passwd:
                    exit("\033[1;32;40mWelcome to you!\033[0m")
                else:
                    print("User \033[1;31;40m%s\033[0m password is error!" % user_name)
                #用户存在于数据库,跳出循环
                break
        else:
            print("User \033[1;31;40m%s\033[0m not match in the user file!" % user_name)
        user_check.close()
        if user_same >= 2:
            print("User \033[1;31;40m%s\033[0m name was locked!" % user_name)
            #将用户名写入到锁定文件中
            file = open(lock_file,"a")
            file.write(user_name+"\n")
            file.close()
        retry_count += 1

    user.txt文件内容格式:

    cat user.txt
    apache 123
    jim 234
    docker 333
    fank yhn

    总结:

    1.getpass模板用于输入密码时,不显示明文;

    2.os.path.exists(文件路径)用于判断文件是否存在;

    3.input的用法,版本3,默认输入的内容是字符类型,如果是变量名,则为此变量名的数据类型;

    4.if判断语句用法;

    5.while循环语句用法;

    6.split()指定分隔符对字符串切片用法;

    7.print(“%s” % name)等格式化输出;

    8.颜色输出用法:手打出来 \033[32;1m内容\033[0m ;

    9.数学算法使用;

    二.三级菜单:

    1. 运行程序输出第一级菜单  
    2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单  
    3. 菜单数据保存在文件中

    思路:

    1.菜单数据使用字典保存在文件中,使用import读取;

    2.获取一级菜单;

    3.获取二级菜单;

    4.获取三级菜单;

    5.使用循环打印菜单;

    基本流程图:

    p_w_picpath

    代码:

    cat Three_layer_menu.py #主程序
    #!/usr/bin/env python
    #_*_coding:utf-8_*_
    '''
     * Created on 2016/10/16 21:31.
     * @author: Chinge_Yang.
    '''
    import sys
    import menu
    while True:
        #定义一层菜单为字典
        one_dict = {}
        #获取字典所有的键
        one_layer = menu.menu.keys()
        #获取字典所有的枚举
        one_enu = enumerate(one_layer)
        #一层菜单字典
        for index1,value1 in one_enu:
            one_dict[index1]=value1
        for k1 in one_dict:
            print ("\033[32m%d\033[0m --> %s" %(k1,one_dict[k1]))
        print ("输入【back】:返回;【quit】:退出")
        once_select = input("请输入你的选择:\n").strip()
        if once_select.isdigit():
            once_select = int(once_select)
            if 0 <= once_select < len(one_dict):
                print("---->进入一级菜单 \033[32m%s\033[0m" %(one_dict[once_select]))
                while True:
                    #定义二层菜单为字典
                    two_dict = {}
                    # 获取字典所有的键
                    two_layer = menu.menu[one_dict[once_select]].keys()
                    # 获取字典所有的枚举
                    two_enu = enumerate(two_layer)
                    # 二层菜单字典
                    for index2, value2 in two_enu:
                        two_dict[index2] = value2
                    # 打印二层菜单
                    for k2 in two_dict:
                        print("\033[32m%d\033[0m --> %s" % (k2, two_dict[k2]))
                    print("输入【back】:返回;【quit】:退出")
                    twice_select = input("请输入你的选择:\n").strip()
                    if twice_select.isdigit():
                        twice_select = int(twice_select)
                        if 0 <= twice_select < len(two_dict):
                            print("---->进入二级菜单 \033[32m%s\033[0m" % (two_dict[twice_select]))
                            # 定义三层菜单列表
                            three_layer = menu.menu[one_dict[once_select]][two_dict[twice_select]]
                            while True:
                                # 打印三层菜单
                                for k3 in three_layer:
                                    print (k3)
                                print ("输入【back】:返回;【quit】:退出")
                                three_select = input("请输入你的选择:\n").strip()
                                if three_select == "back":
                                    break
                                elif three_select == "quit":
                                    sys.exit ("----谢谢使用----")
                                continue
                    else:
                        if twice_select == "back":
                            break
                        elif twice_select == "quit":
                            sys.exit ("----谢谢使用----")
                        print ("\033[31m请输入数字\033[0m")
            else:
                print("----\033[31m数字超出范围,请重新输入!\033[0m----")
        else:
            if once_select == "back":
                break
            elif once_select == "quit":
                sys.exit ("----谢谢使用----")
            print ("\033[31m请输入数字\033[0m")
    cat menu.py
    #!/usr/bin/env python  
    # _*_coding:utf-8_*_  
    '''  
    * Created on 2016/10/16 19:37.  
    * @author: Chinge_Yang.  
    '''
    menu = {  
        "家用电器": {  
            "电视": [  
                "合资品牌电视",  
                "国产品牌电视",  
                "互联网品牌电视"  
            ],  
            "空调": [  
                "壁挂式空调",  
                "柜式空调",  
                "中央空调",  
                "空调配件"  
            ],  
            "洗衣机": [  
                "滚筒洗衣机",  
                "洗烘一体机",  
                "波轮洗衣机",  
                "迷你洗衣机",  
                "洗衣机配件"  
            ]  
        },  
        "电脑": {  
                "电脑整机": [  
                    "笔记本",  
                    "游戏本"  
                    "平板电脑",  
                    "平板电脑配件",  
                    "台式机",  
                    "一体机服务器",  
                    "笔记本配件"  
                ],  
                "电脑配件": [  
                    "显示器",  
                    "CPU",  
                    "主板",  
                    "硬盘",  
                    "内存"  
                ],  
                "外设产品": [  
                    "鼠标",  
                    "键盘",  
                    "键鼠套装",  
                    "网络仪表仪器",  
                    "U盘",  
                    "移动硬盘"  
                ]  
            }  
        }

    总结:

    1.字典的用法,包括获取key,value及相关函数用法;

    2.列表的用法,遍历列表的用法;

    3.import导入py文件用法;

关键字