zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Python练习

Python 练习
2023-09-14 09:15:21 时间

一、编辑登录接口

  1. 输入用户名密码
  2. 认证成功后显示欢迎信息
  3. 输入三次后锁定

说一下我的思路,首先准备工作,创建一个字典存放用户名和密码,一个空列表存放锁定用户,通过pickle模块把这个字典和列表存放到两个文件user_information.pkl、lock.pkl中,关闭文件。

然后,打开文件,通过pickle模块读取两个文件中的dict和list,赋值给两个变量user_info和lock_user,关闭文件

设定次数,初始为0,每循环一次加1,循环开始,用户输入用户名和密码,判断用户名是否存在于lock_user,如果存在,提示用户锁定,结束循环;如果不存在继续向下。接着如果用户名和密码都正确,欢迎登陆,结束程序;如果用户名或密码错误,提示错误,继续登陆,三次以后将用户名添加到lock_user列表,并写入lock.pkl文件。

--------------------------------------------------------------------------
#注释内容,主要用于准备user_information.pkl和lock.pkl文件,运行一次即可 

'''import pickle
user_information = {"wx":"passwd", "Jake":"123456", "Perter":"qwer123"}
user_information_file = open("C:\\Users\\wx\\Desktop\\python\\user_information.pkl", "ab")
pickle.dump(user_information, user_information_file)
user_information_file.close()'''
'''lock_user = []
lock_user_file = open("C:\\Users\\wx\\Desktop\\python\\lock.pkl", "ab")
pickle.dump(lock_user, lock_user_file)
lock_user_file.close()'''

-----------------------------------------------------------------------------------
import pickle    #导入pickle模块
#读模式打开存放用户名密码的文件,并赋值给user_info变量,关闭文件
user_info_file = open("C:\\Users\\wx\\Desktop\\python\\user_information.pkl", "rb")
user_info = pickle.load(user_info_file)
user_info_file.close()

#读模式打开存锁定用户的文件,并赋值给lock_user变量,关闭文件
lock_user_file = open("C:\\Users\\wx\\Desktop\\python\\lock.pkl", "rb")
lock_user = pickle.load(lock_user_file)
lock_user_file.close()


count = 0
while count < 3:
    username = input("Please input your username:")
    password = input("Please input your password:")

    #判断用户名是否锁定,如果已锁定提示错误,结束循环
    if username in lock_user:
        print("The user is locked. Please contact the administrator.")
        break

    #判断用户名密码是否正确,如果正确欢迎登陆,break结束循环
    if username in user_info and password == user_info[username]:
        print("Welcome user {0} login!".format(username))
        break
    else:    #如果不正确,提示错误
        print("Incorrect username or password")
    count += 1   ##次数加1

    ##判断用户登陆次数,等于3表示,已经尝试三次,要锁定用户
    if count == 3:
        lock_user.append(username)  #添加用户到lock_user列表
        lock_user_file = open("C:\\Users\\wx\\Desktop\\python\\lock.pkl", "wb") #以写模式打开存放锁定用户文件
        pickle.dump(lock_user, lock_user_file)  #把lock_user写入存放锁定用户文件
        lock_user_file.close()  #关闭文件
        print("Login failed 3 times, user locked.")

二、三级菜单

  1. 依次选择进入各自子菜单
  2. 所需知识点:列表,字典
  3. 可以随时退出到上一级菜单
#! /usr/bin/env python
# Author:wx
# 2018/9/26 0026 11:07

china = {"北京":{"朝阳":["高碑店", "小红门", "双井", "来广营"],       #定义一个字典存放省、市、县
                 "西城":["金融街", "牛街", "广安门", "新街口"]},
         "河北":{"保定":["徐水", "清苑", "满城", "莲池"],
                 "邯郸":["邯山", "丛台", "复兴", "永年"],
                 "任丘":["运河", "新华", "任丘", "河间"]},
         "河南":{"郑州":["管城", "中原", "金水", "惠济"],
                 "洛阳":["涧西", "洛龙", "吉利", "孟津"],
                 "南阳":["宛城", "卧龙", "淅川", "新野"]}}
import sys     #加载sys模块


while True:      ##进入一级菜单死循环
    province = list(china.keys())      ##提取所有省,转化为一个列表
    for i,j in enumerate(province):   ##利用enumerate()函数把每个省和对应的索引打印出来。索引可以作为编号
        print(i, j)
    p_id = input("请输入你所在省份的编号,输入q退出程序:")  ##提取用户第一级输入

    if p_id.isdigit():
        p_id = int(p_id)   ##判断用户第一级输入是否为数字,如果是转换为整数

        if p_id >= 0 and p_id < len(province):  ##如果输入数字在省列表索引范围内
            city = list(china[province[p_id]].keys())   ##定义第二级市列表
            while True:                               ##进入二级死循环
                for i,j in enumerate(city):           ##打印出市及其对应编号(索引)
                    print(i, j)

                c_id = input("请输入你所在市区的编号,退出程序输入q,返回上一级输入b:") ##提取用户二级输入

                if c_id.isdigit():    ##判断用户第二级输入是否为数字,如果是转换为整数
                    c_id = int(c_id)

                    if c_id >= 0 and c_id < len(city):   ##如果输入数字在市列表索引范围内
                        county = china[province[p_id]][city[c_id]]   ##定义三级县列表

                        while True:                   ##进入三级死循环
                            for i,j in enumerate(county):    ##打印出县及其对应编号(索引)
                                print(i, j)
                            county_id = input("请输入你所在县的编号,退出程序输入q,返回上一级输入b:")   ##提取用户三级输入

                            if county_id.isdigit():    #判断用户第三级输入是否为数字,如果是转换为整数
                                county_id = int(county_id)

                                if county_id >= 0 and county_id <len(county):  ##如果三级输入在县列表索引范围内

                                    print("你所在的地区是:%s->%s->%s" %(province[p_id], city[c_id], county[county_id] ))   ##打印省市区
                                    exit(0)               ##退出程序
                            elif county_id == "b":  ##如果三级输入b,结束三级循环进入二级循环
                                break
                            elif county_id == "q":   ##如果三级输入为q,退出程序
                                sys.exit("正在退出.....")
                            else:                     ##如果不是数字、q、b提示错误,继续二级循环
                                print("输入有误!")
                                continue

                elif c_id == "q":      ##如果二级输入为q,调用sys模块退出程序
                    sys.exit("正在退出....")
                elif c_id == "b":     ##如果二级输入为b,结束二级循环,进入一级循环
                    break
                else:                 ##如果二级输入不是q、b或数字,提示错误继续二级循环
                    print("输入有误!")

        else:   #如果第一级输入数字超出索引,提示错误,继续下次循环第一级
            print("你输入的编号%d不存在,请重新选择."%p_id)


    elif p_id == "q":       ##如果第一级输入q,调用sys模块退出
        sys.exit("正在退出.....")
    else:                   ##如果第一级输入不是数字也不是q,提示输入有误继续下次循环(第一级)
        print("输入有误!")

关于三级菜单我的方法比较麻烦,代码较多(ps:水平有限),网上有更简单的方法可以实现