• day1作业


     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author: Even
     4 
     5 
     6 count = 0  # 为了记录需求中3次输入错误避免的次数,计数项赋初始值
     7 load = True  # 为了完成功能后退出,赋初始值
     8 file = open("正确用户信息文件",'r',encoding='utf-8')  # 打开正确用户信息文档,获取正确的用户名密码
     9 file_wrong = open("锁定用户信息文件",'r+',encoding='utf-8')  # 打开已锁定的用户信息文档,获取锁定的用户名密码
    10 line = eval(file.readline())  # 将正确信息中的字符串转换成字典(原字符串为字典格式)
    11 line_wrong = eval(file_wrong.readline())  # 将正确信息中的字符串转换成列表(原字符串为列表格式)
    12 
    13 
    14 def out():  # 将重复代码定义,功能是帮助跳出while循环并关闭已打开文档
    15     global load  # 声明全局变量
    16     load = False  # 赋值load,为了跳出while循环
    17     file_wrong.close()  # 关闭正确用户信息文档
    18     file.close()  # 关闭锁定用户信息文档
    19 
    20 while load:  # 判断是否已完成功能
    21     name = input("请输入用户名:")  # 输入用户名
    22     password = input("请输入密码:")  # 输入密码
    23     if name in line and name not in line_wrong:  # 判断用户名是否正确,和是否已被锁定
    24         while count <= 3:  # 判断是否已循环3次
    25             if password == line[name]:  # 判断用户名是否对应正确的密码
    26                 print("您已成功登陆")  # 输出成功登陆信息
    27                 out()  # 调用自定义out方法
    28                 break  # 跳出本次循环
    29             else:  # 说明未输入正确的密码
    30                 count +=1  # 计数项自加一
    31                 msg_count = '''第%s次密码输入错误
    '''%(count)  # 提示输入错误次数
    32                 print(msg_count)  # 打印错误次数信息
    33                 if count < 3:  # 小于三次错误输入,可以重新输入
    34                     password = input("密码错误,请重新输入密码:")  # 重新输入密码
    35                 elif count == 3:  # 判断是否已输错三次
    36                     print("已输错3次,账号已锁定")  # 打印锁定提示信息
    37                     line_wrong.append(name)  # 将已锁定信息加入锁定元组中
    38                     file_wrong.seek(0)  # 输入指针移到开头,如果不移动会产生多个元组
    39                     file_wrong.write(str(line_wrong))  # 写入锁定信息
    40                     file_wrong.tell()  # 获取当前的输入指针位置,如果不获取会产生多个元组
    41                     out()  # 调用out方法
    42                     break
    43     elif name in line_wrong:  # 判断用户名是否在已锁定用户名中
    44         print("该用户名已被锁定")  # 打印已锁定通知信息
    45         out()  # 调用自定义out方法
    46         break  # 跳出当前循环
    47     else:  # 说明用户名不在正确用户名信息中
    48         print("该用户名不存在")  # 打印用户名输入错误信息
    49         out()  # 调用out方法
    第一种
    1 file = open("fdfdsf",'r+',encoding='utf-8') # 打开正确用户信息文档,获取正确的用户名密码
    2 line = eval(file.readline()) # 将正确信息中的字符串转换成字典(原字符串为字典格式)
    3 line.append(name) # 将已锁定信息加入锁定元组中
    4 file.seek(0) # 输入指针移到开头,如果不移动会产生多个元组
    5 file.write(str(line)) # 写入信息
    6 file.tell() # 获取当前的输入指针位置,如果不获取会产生多个元组
    7 file.close() # 关闭正确用户信息文档
    文件操作

    模拟登陆作业需求:

    1. 用户输入帐号密码进行登陆

    2. 用户信息保存在文件内

    3. 用户密码输入错误三次后锁定用户

    额外实现功能:

    1.提示输入错误次数

    2.输入已锁定用户会提示

    3.用户不存在会提示

    正确用户信息文件中以字典形式保存用户名密码:

    {'name': 'password','cx':'123','even':'456','test':'ok'}

    锁定用户信息文件中以列表形式保存锁定用户名:

    ['name']





    第二种方法:
      1 #!/usr/bin/env python
      2 # -*- coding:utf-8 -*-
      3 # Author:kiko0o0
      4 
      5 import os
      6 import sys
      7 import getpass
      8 LOCAL_DIR = os.path.dirname(os.path.abspath(__file__))
      9 USER_DB = "%s/%s" % (LOCAL_DIR, "UserInfo.db")
     10 PLANTFORM = sys.platform
     11 
     12 # 初始化用户[当用户文件不存在时生效]
     13 if os.path.exists(USER_DB):
     14    pass
     15 else:
     16     UserInfo = "admin 123456 0
    user01 123456 0
    total 0 0
    "
     17 
     18     # 编辑文件的一种方式,优于open,文件句柄当不用时自动关闭
     19     with open(USER_DB, "w") as write_file:
     20         write_file.write(UserInfo)
     21 
     22 # 将用户信息生成一个字典,方便操作
     23 user_info = dict()
     24 with open(USER_DB, "r") as read_file:
     25     for line in read_file:
     26         if len(line) != 0:
     27             username, password, times = line.split()
     28             if username == "total":
     29                 user_info[username] = {"times": int(times), "flag": password}  # flag无实际意义
     30             else:
     31                 user_info[username] = {"password": password, "times": int(times)}
     32 
     33 
     34 def up():
     35     global UserInfo
     36     UserInfo = ""
     37     # 字符串拼接用户信息
     38     for info in user_info.keys():
     39         if info == "total":
     40             userInfo = "%s %s %s 
    " % (info, 0, user_info["total"]["times"])
     41         else:
     42             userInfo = "%s %s %s 
    " % (info, user_info[info]["password"], user_info[info]["times"])
     43         UserInfo = "%s%s" % (UserInfo, userInfo)
     44     with open(USER_DB, "w") as write_file:
     45         write_file.write(UserInfo)
     46 # 主逻辑区
     47 while user_info["total"]["times"] < 3:
     48     print("IT 技术管理后台")
     49     username = input("input your username
    :>>>").strip()
     50     if PLANTFORM == "linux2":
     51         password = getpass.getpass("input your password
    :>>>").strip()
     52     elif PLANTFORM == "linux":
     53         password = getpass.getpass("input your password
    :>>>").strip()
     54     else:
     55         password = input("input your password
    :>>>").strip()
     56     if username in user_info:
     57         if user_info[username]["times"] == 3:
     58             exit("account is lock, Contact the administrator")
     59         elif password == user_info[username]["password"]:
     60             print("Good morning %s" % username)
     61             user_info[username]["times"] = 0 
     62             user_info["total"]["times"] = 0
     63             up()
     64             break
     65         else:
     66             input("Enter to wrong account password. (Any key to continue)")
     67             user_info[username]["times"] += 1
     68             user_info["total"]["times"] += 1
     69             up()
     70 
     71     else:
     72         input("Enter to wrong account password. (Any key to continue)")
     73         user_info["total"]["times"] += 1
     74         up()
     75 
     76 else:
     77     user_info["total"]["times"] = 0
     78     up()
     79     input("Too many retries, please try again later. (Any key to continue)")
     80     exit("88")
     81 
     82 print('''
     83 initializing........
     84 33[5m////////////////////////////////////////////////////////////////////
     85 //                          _ooOoo_                               //
     86 //                         o8888888o                              //
     87 //                         88" . "88                              //
     88 //                         (| -_- |)                              //
     89 //                         O  =  /O                              //
     90 //                      ____/`---'\____                           //
     91 //                    .'  \|      |//  `.                         //
     92 //                   /  \|||   :  |||//                          //
     93 //                  /  _||||| -:- |||||-                         //
     94 //                  |   | \   -  /// |   |                       //
     95 //                  | \_|  ''---/''  |   |                       //
     96 //                    .-\__  `-`  ___/-. /                       //
     97 //                ___`. .'  /--.--  `. . ___                     //
     98 //              ."" '<  `.___\_<|>_/___.'  >'"".                  //
     99 //            | | :  `- \`.;` _ /`;.`/ - ` : | |                 //
    100 //               `-.   \_ __ /__ _/   .-` /  /                 //
    101 //      ========`-.____`-.___\_____/___.-`____.-'========         //
    102 //                           `=---='                              //
    103 //      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
    104 ////////////////////////////////////////////////////////////////////
    105 33[0m''')
    106 input("(Any key to continue)")
    第二种(修改)


    ===================================================================

    1. 运行程序输出第一级菜单

    2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单

    3. 菜单数据保存在文件中

    4. 让用户选择是否要退出

    5. 有返回上一级菜单的功能

    {
    '上海':{
    "徐汇区":{
    "漕河泾":["zk","test"],
    "桂林路":["syf","test"]
    },
    "松江区":{
    "九亭":["zz","mm"],
    "泗泾":{"sss","ddd"},
    "佘山":{"Aaat","aaa"},
    },
    "浦东区":{},
    },
    '陕西':{
    "西安":{},
    "咸鱼":{},
    "兴平":{}
    },
    '北京':{
    "1环":{},
    "2环":{},
    "3环":{},
    },
    }

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:kiko0o0
     4 
     5 
     6 import sys
     7 
     8 file = open("菜单列表",'r',encoding='utf-8')    # 打开菜单
     9 f = file.read()
    10 for line in f:    # 读取文件中每行信息
    11     file_str = str(f)    # 将每行信息转成字符串格式
    12 data = eval(file_str)    # 字符串转成字典格式
    13 
    14 
    15 def list():    # 定义读取字典中的key
    16     for i in data:
    17         print(i)
    18 
    19 
    20 def choose1(choice1):    # 定义第一层选择
    21     while choice1 != 'q':    # 输入为q即退出程序
    22         global one
    23         one = choice1    # 定义全局变量one 使得其他函数可以调用
    24         if choice1 in data:
    25             for i2 in data[one]:
    26                 print("	", i2)    # 展示3级菜单中所选第一层下的第二层信息
    27             choose2(input("请输入第二层:"))    # 调用choose2函数,输入第二层信息
    28             break
    29         elif choice1 == 'b':    # 输入b退出循环
    30             break
    31         else:
    32             error = input("输入错误,请重新输入第一层:")    # 输入内容不在第一层选项中
    33             if error == 'q':    # 输入q退出程序
    34                 sys.exit()
    35             else:   # 否则调用本函数
    36                 choose1(error)
    37     else:
    38         sys.exit()
    39 
    40 
    41 def choose2(choice2):   # 定义第二层选择
    42     while choice2 != 'q':
    43         global two
    44         two = choice2   # 定义全局变量two 使得其他函数可以调用
    45         if choice2 in data[one]:
    46             for i3 in data[one][two]:
    47                 print("		", i3)   # 展示3级菜单中所选第二层下的第三层信息
    48             choose3(input("请输入第三层:"))    # 调用choose3函数,输入第三层信息
    49             break
    50         elif choice2 == 'b':    # 输入b退回第一层
    51             list()  # 调用list函数展示第一层信息
    52             choose1(input("请输入第一层:"))
    53             break
    54         else:
    55             error2 = input("输入错误,请重新输入第二层:")    # 输入错误,重新输入
    56             if error2 == 'q':    # 输入q退出程序
    57                 sys.exit()
    58             else:
    59                 choose2(error2)    # 调用本函数
    60     else:
    61         sys.exit()
    62 
    63 
    64 def choose3(choice3):   # 定义第三层选择
    65     while choice3 != 'q':
    66         global three
    67         three = choice3    # 定义全局变量three 使得其他函数可以调用
    68         if choice3 in data[one][two]:
    69             for i4 in data[one][two][three]:
    70                 print("			", i4)    # 展示3级菜单中所选第三层下的第四层信息
    71             choose4(input("最后一层,退回上一层请按‘b’,退出请按'q"))    # 调用choose4函数,提示退出或退回
    72             break
    73         elif choice3 == 'b':    # 输入为b退出
    74             choose1(one)
    75             break
    76         else:
    77             error3 = input("输入错误,请重新输入第三层:")    # 输入错误,可以重新输入,q退出
    78             if error3 == 'q':
    79                 sys.exit()
    80             else:
    81                 choose3(error3)    # 调用本函数
    82     else:
    83         sys.exit()
    84 
    85 
    86 def choose4(choice4):   # 定义最后退出
    87     while choice4 != 'q':   # 输入q退出
    88         if choice4 == 'b':  # 输入b退回上一层
    89             choose2(two)
    90         else:
    91             choose4(input("真的是最后一层了,退回上一层请按‘b’,退出请按'q'"))   # 声明结束
    92     else:
    93         sys.exit()
    94 
    95 
    96 print("退出请按'q',返回上级菜单请按'b'")    # 声明功能
    97 list()  # 调用list函数展示第一层信息
    98 choose1(input("请输入第一层:"))   # 主程序,开始运行
    View Code
     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:kiko0o0
     4 
     5 import sys
     6 
     7 file = open("菜单列表",'r',encoding='utf-8')
     8 f = file.read()
     9 #f = file.readline()
    10 for line in f:
    11     file_str = str(f)
    12 data = eval(file_str)
    13 
    14 def list():
    15     for i in data:
    16         print(i)
    17 
    18 def choose1(key1):          # 定义第一层选择
    19     while key1 != 'q':
    20         global one
    21         one = key1
    22         if key1 in data:
    23             for i2 in data[one]:
    24                 print('	',i2)
    25             choose2(input('请输入二级:'))
    26             break
    27         elif key1 =='b':
    28             list()
    29             break
    30         else:
    31             error = input("输入错误,重新输入:")
    32             choose1(error)
    33     else:
    34         sys.exit()
    35 
    36 def choose2(key2):
    37     while key2 != 'q':
    38         global two
    39         two = key2
    40         if two in data[one]:
    41             for i3 in data[one][two]:
    42                 print('		',i3)
    43             choose3(input('请输入三级菜单:'))
    44             break
    45         elif two =='b':
    46             list()
    47             choose1(input('请输入一级菜单:'))
    48             break
    49         else:
    50             error2 = input('输入错误,请重新输入:')
    51             choose2(error2)
    52     else:
    53         sys.exit()
    54 
    55 def choose3(key3):
    56     while key3 !='q':
    57         global three
    58         three = key3
    59         if key3 in data[one][two]:
    60             for i4 in  data[one][two][three]:
    61                 print('			',i4)
    62             choose4(input('最后一层,退回"b",退出"q"'))
    63             break
    64         elif key3 =='b':
    65             choose1(one)
    66             break
    67         else:
    68             error3 = input("输入错误,请重新输入:")
    69             choose3(error3)
    70     else:
    71         sys.exit()
    72 
    73 def choose4(key4):
    74     while key4 != 'q':
    75         if key4 =='b':
    76             choose2(two)
    77         else:
    78             choose4(input('最后一层,退回"b",退出"q"'))
    79     else:
    80         sys.exit()
    81 
    82 
    83 print("退出请按'q',返回上级菜单请按'b'")
    84 list()
    85 choose1(input('请输入城市:'))
    修改后

     ----

    第二种:

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # Author:kiko0o0
     4 
     5 import json
     6 
     7 # 读取菜单列表
     8 with open ("menu_file.db", "r", encoding="utf-8") as read_menu:
     9     MENU_LIST = read_menu.read()
    10 
    11 # ["EVAL", "JSON"] 功能转换开关
    12 CHANGE_FORMAT = "JSON"
    13 
    14 # 转换成字典的方式二种
    15 if CHANGE_FORMAT == "EVAL":
    16     MENU_LIST = eval(MENU_LIST)
    17 else:
    18     # json时需要注意:文件中不能包含单引号,严格按照列表字典的书写方式
    19     # 不能序列化的示例  {"key1": ["v1","v2",]} {'key1': ["v1","v2"]}
    20     MENU_LIST = json.loads(MENU_LIST.replace("'", """).replace(" ","").replace("
    ",""))
    21 
    22 
    23 # 临时菜单存放菜单(简单的栈实现,后进先出)
    24 TEMP_MENU = []
    25 EXIT_FLAG = True
    26 TEMP_MENU.append(MENU_LIST)
    27 
    28 while EXIT_FLAG:
    29     temp_menu_list_id = []
    30     temp_menu_list_name = []
    31     if type(TEMP_MENU[-1]) == dict:
    32         # 加上sorted排序,会让你的key不会随意的改变顺序,因为字典是无序的
    33         for layer1 in enumerate(sorted(TEMP_MENU[-1])):
    34             l_id, l_name = layer1[0], layer1[1]
    35             temp_menu_list_id.append(l_id)
    36             temp_menu_list_name.append(l_name)
    37             print(l_id, l_name)
    38         temp_menu = dict(zip(temp_menu_list_id, temp_menu_list_name))
    39         real_name = input("input you want to layer[ID or NAME](B:back Q:exit):
    >>>").strip()
    40         if real_name == "b" or real_name == "B":
    41             if len(TEMP_MENU) > 1:
    42                 del TEMP_MENU[-1]
    43                 continue
    44             else:
    45                 input("Now, It's top layer(any key continue)")
    46                 continue
    47         elif real_name == "q" or real_name == "Q":
    48             EXIT_FLAG = False
    49             continue
    50         elif real_name.isdigit():
    51             real_name = int(real_name)
    52             if real_name in temp_menu:
    53                 real_name = temp_menu[real_name]
    54                 TEMP_MENU.append(TEMP_MENU[-1][real_name])
    55             else:
    56                 input("The worng ID was entered(any key continue)")
    57                 continue
    58         elif real_name in temp_menu_list_name:
    59             TEMP_MENU.append(TEMP_MENU[-1][real_name])
    60         else:
    61             input("The worng info was entered(any key continue)")
    62             continue
    63     else:
    64         # 加上sorted排序,会让你的key不会随意的改变顺序,因为字典是无序的
    65         for layer1 in enumerate(sorted(TEMP_MENU[-1])):
    66             l_id, l_name = layer1[0], layer1[1]
    67             temp_menu_list_id.append(l_id)
    68             temp_menu_list_name.append(l_name)
    69             print(l_id, l_name)
    70         temp_menu = dict(zip(temp_menu_list_id, temp_menu_list_name))
    71         real_name = input("Show all menu (B:back Q:exit):
    >>>").strip()
    72         if real_name == "b" or real_name == "B":
    73             if len(TEMP_MENU) > 1:
    74                 del TEMP_MENU[-1]
    75                 continue
    76             else:
    77                 input("Now, It's top layer(any key continue)")
    78                 continue
    79         elif real_name == "q" or real_name == "Q":
    80             EXIT_FLAG = False
    81             continue
    82         else:
    83             input("The worng info was entered(any key continue)")
    84             continue
    85 else:
    86     print("88")
    View Code
     1 {
     2     '浙江':{
     3         '杭州':{
     4             '西湖': [
     5                 '西湖1',
     6                 '西湖2'
     7                 ],
     8             '江干': [
     9                 '江干1',
    10                 '江干2'
    11                 ],
    12             '下城': [
    13                 '下城1',
    14                 '下城2'
    15                 ],
    16             '上城': [
    17                 '上城1',
    18                 '上城2'
    19                 ],
    20             '滨江': [
    21                 '滨江1',
    22                 '滨江2'
    23                 ]
    24             },
    25         '宁波': [
    26             '海曙',
    27             '江东',
    28             '江北',
    29             '镇海',
    30             '余姚'
    31             ]
    32         },
    33     '江苏': {
    34         '苏州': [
    35             '沧浪',
    36             '相城',
    37             '平江',
    38             '吴中',
    39             '昆山'
    40             ],
    41         '南京': [
    42             '白下',
    43             '秦淮',
    44             '浦口',
    45             '栖霞',
    46             '江宁'
    47             ]
    48         },
    49     '广东': {
    50         '深圳': [
    51             '罗湖',
    52             '福田',
    53             '南山',
    54             '宝安',
    55             '布吉'
    56             ],
    57         '广州': [
    58             '天河',
    59             '珠海',
    60             '越秀',
    61             '白云',
    62             '黄埔'
    63             ]
    64         }
    65 }
    View Code
  • 相关阅读:
    对象的创建
    Java运行时数据区域
    Java内存模型
    LinkedList小练习及相关算法
    面试题之矩阵与转置矩阵相乘
    快速排序
    垃圾收集器
    java垃圾收集相关问题
    Win7下安装Centos7双系统出错:No valid bootloader target device found.
    Scanner类的方法
  • 原文地址:https://www.cnblogs.com/kiko0o0/p/8098163.html
Copyright © 2020-2023  润新知