习题集

  1. 女人的年龄>=18并且<22岁并且身高>170并且体重<100并且是漂亮的,那么:表白,否则:叫阿姨好
def user():  # 填写用户的基本信息模块
    """
    用户登录系统
    输入用户的信息
    :return:
    """
    age = input('请输入用户的年龄:').strip()
    hight = input('请输入用户的身高:').strip()
    wight = input('请输入用户的体重:').strip()
    return int(age), int(hight), int(wight)


def judge():  # 判断用户是否在所要求的区间
    """
    判断年龄是否在18-22
    体重 < 100
    身高 > 160
    :return:
    """
    age, hight, wight = user()  # 把所填写的用户信息分别赋值

    # 判断是否在其中
    if 18 <= age < 22 and hight > 160 and wight < 100:
        return True


# 主程序端
if judge():  # 调用判断模块
    print('小姐姐,加个好友!')
else:
    print('老娘们,滚一边去!!!')

2.编写用户登录程序
要求:有用户黑名单 如果用户名在黑名单内 则拒绝登录
eg:black_user_list = ['jason','kevin','tony']
如果用户名是黑名单以外的用户则允许登录(判断用户名和密码>>>:自定义)
eg: oscar 123

def register():
    name = input('请输入用户名:').strip()
    paw = input('请输入密码:').strip()

    return name

def blacklist():
     name = register()
     black_user_list = ['jason', 'kevin', 'tony']
     if name in black_user_list:
         return False
     else:
         return True


if blacklist():
    print('登录成功')
else:
    print('此用户为黑名单')

3.编写一个用户登录程序
用户如果登录失败 则只能尝试三次
用户如果登录成功 则直接结束程序

def user():
    """
    输入用户登录用户名密码
    :return:
    """
    name = input('请输入用户名:').strip()
    paw = input('请输入密码:').strip()

    return name, paw

def judge():
    """
    判断用户名密码是否一致
    :return:
    """
    name, paw = user()
    if name == 'jcs' and paw == '123':
        return True


for i in range(3):
    if judge():
        print('登陆成功')
        break
    else:
        print('用户名或密码错误')

4.编写一个用户登录程序
用户如果登录失败 可以无限制尝试
用户如果登录成功 则进入内层循环 获取用户输入的指令 并打印该指令
eg: 用户输入cmd指令 则程序打印'正在执行您的指令:cmd'
给用户提供一个退出命令 用户一旦输入则退出这个程序
eg: 用户输入q指令 则程序先打印该指令再结束

def user():                            # 填写登录信息模块
    """ 
    输入用户名和密码:
    :return:
    """
    name = input('请输入用户名:').strip()
    paw = input('请输入密码:').strip()

    return name, paw


def judge():                              # 判断用户名密码是否正确
    name, paw = user()
    if name == 'jcs' and paw == '123':
        return True


def instruct():                 # 输入内循环的指令
    """
    输入指令操作
    :return:
    """
    cmd = input('请输入cmd指令:').strip()
    return cmd


def recycle():                   # 进行内循环,输入指令模块

    while True:
        cmd = instruct()
        if cmd == 'p':
            print('正在退出指令!!!')
            break
        else:
            print('正在执行你的指令')

 
while True:                       # 主程序
    if judge():                   # 调用判断模块
        print('登录成功')          # 正确进入内循环
        recycle()                # 调用内循环模块
        break
    else:
        print('用户名密码错误')     # 错误继续执行外循环

5.编写猜年龄的游戏(拔高练习 尝试编写)
用户有三次猜测的机会 如果用完则提示用户是否继续尝试
用户输入y则继续给三次机会 如果用户输入q则直接结束程序

age = 24

def int_age():
    age = input('请输入你猜的年龄:').strip()
    return int(age)

def int_chance():
    cmd = input('请输入指令:').strip()
    return cmd

def chance():
    """
    循环:
    输入指令
    判断是再给三次机会,还是退出
    :return:
    """
    while True:
        cmd = int_chance()
        if cmd == 'y':
            print('送你了三次机会哟!')

        elif cmd == 'q':
            print('退出此程序')
            break
        else:
            print('请输入正确的指令:')
        return True


def judge():
    age = int_age()
    if 18 > age:
        print('有点小了哦')
    if 18 <= age < 30 and age != 24:
        print('快猜到了')
    if age >= 30:
        print('有嫩么老吗?')
    if age == 24:
        print('恭喜猜中了!')
        return True

time = 0
while time < 4:
        if judge():
            if age == 24:
                break
        time += 1
        if time == 3:
            print('继续猜请输入y,退出请输入q!!!')
            if chance():
                time = 0
                continue
            break

6.基于列表充当数据库完成用户登录(拔高练习) # 多个用户数据
data_source = ['jason|123', 'kevin|321','oscar|222']

data_source = ['jason|123', 'kevin|321','oscar|222']

def user():
    name = input('请输入用户名:').strip()
    paw = input('请输入密码:').strip()
    return name, paw

def judge():
    name, paw = user()
    for i in data_source:
        if name == i.split('|')[0]:
            if paw == i.split('|')[1]:
                return True
            else:
                return False
while True:
    if judge():
        print('登录成功')
        break
    else:
        print('用户名或密码错误')

7.编写员工管理系统
1.添加员工信息
2.修改员工薪资
3.查看指定员工
4.查看所有员工
5.删除员工数据
提示:用户数据有编号、姓名、年龄、岗位、薪资
数据格式采用字典:思考如何精准定位具体数据>>>:用户编号的作用

info = []
flag = True
while flag:
    print("""
     ---------------员工管理系统——-——————————-————-
                1.添加员工信息
                2.修改员工薪资
                3.查看指定员工
                4.查看所有员工
                5.删除员工数据
                6.退出此系统
    """)
    choice = input('请选择你想要实现的功能(1-6):').strip()
    if choice == '1':
        print('——-—-—-—-—-—请添加员工的基本信息-—-—-—-—--—-—-—--')
        id = input('请输入员工的编号:').strip()
        name = input('请输入员工的姓名:').strip()
        age = input('请输入员工的年龄:').strip()
        post = input('请输入员工的岗位:').strip()
        pay = input('请输入员工的薪资:').strip()
        if id in info:
            print('用户名已存在')
        else:
            new_info = {'job_num':id,'username':name ,'age':age,'post':post,'pay':pay}
            info.append(new_info)
            print(f'职工{id}添加成功')
    elif choice == '2':
        print('——-—-—-—-—-—请修改员工的薪资-—-—-—-—--—-—-—--')
        num = input('请输入需要读取职工的编号:').strip()
        for i in info:
            if i['job_num'] == num:
                money = input('请输入需改动的薪资:').strip()
                i['pay'] = money

    elif choice == '3':
        print('——-—-—-—-—-—查看指定员工-—-—-—-—--—-—-—--')
        num = input('请输入指定员工的编号:').strip()
        for i in info:
            if i['job_num'] == num:
                print(f"""
                -----------------该员工基本信息--------------
                 {i['job_num'], i['username'],i['age'], i['post'], i['pay']}
                ----------------------------------------
                """)
            else:print('用户不存在')
    elif choice == '4':
        print('——-—-—-—-—-—查看所有员工-—-—-—-—--—-—-—--')
        for i in info:
            print(f"""
                -----------------该员工基本信息--------------
                 {i['job_num'], i['username'],i['age'], i['post'], i['pay']}
                ----------------------------------------
                """)
    elif choice == '5':
        print('——-—-—-—-—-—删除员工数据-—-—-—-—--—-—-—--')
        num = input('请输入员工的职工号:').strip()

        for i in info:
            if i['job_num'] == num:
                info.remove(i)
                print('已删除')
            else:
                print('不存在')

    elif choice == '6':
        print('正在退出此程序')
        break

8..编写员工管理系统
1.添加员工信息
2.修改员工薪资
3.查看指定员工
4.查看所有员工
5.删除员工数据
提示:用户数据有编号、姓名、年龄、岗位、薪资
数据格式采用字典:思考如何精准定位具体数据>>>:用户编号的作用

info =[]
flag = True

def cyclic():     # 创建一个用户登录程序函数
    while flag:
        print("""
         ---------------员工管理系统——-——————————-————-
                    1.添加员工信息
                    2.修改员工薪资
                    3.查看指定员工
                    4.查看所有员工
                    5.删除员工数据
                    6.退出此系统
        """)
        choice = input('请选择你想要实现的功能(1-6):').strip()
        return choice


def user():
    id = input('请输入员工的编号:').strip()
    name = input('请输入员工的姓名:').strip()
    age = input('请输入员工的年龄:').strip()
    post = input('请输入员工的岗位:').strip()
    pay = input('请输入员工的薪资:').strip()
    new_info = {'job_num': id, 'username': name, 'age': age, 'post': post, 'pay': pay}
    return new_info

def storage():                  # 存储

    info.append(user())
    return info

def job_id():

    num = input('请输入需要读取职工的编号:').strip()
    return num



def salary():

    num = job_id()
    for i in info:
        if i['job_num'] == num:
            money = input('请输入需改动的薪资:').strip()
            i['pay'] = money
            return True

def view():


    num = job_id()
    for i in info:
        if i['job_num'] == num:
            print(f"""
                                     -----------------该员工基本信息--------------
                                      {i['job_num'], i['username'], i['age'], i['post'], i['pay']}
                                     ----------------------------------------
                                     """)
            break
    else:
        print('查无此人')
        return True


def all_view():

    for i in info:
        print(f"""
                         -----------------该员工基本信息--------------
                          {i['job_num'], i['username'], i['age'], i['post'], i['pay']}
                         ----------------------------------------
                         """)

    else:
        return True


def delete():


    num = job_id()
    for i in info:
        if i['job_num'] == num:
            info.remove(i)
    else:
        return True

while flag:
    choice = cyclic()
    if choice == '1':
        print('——-—-—-—-—-—请添加员工的基本信息-—-—-—-—--—-—-—--')
        info.append(user())
        print('添加成功')

    elif choice == '2':
        print('——-—-—-—-—-—请修改员工的薪资-—-—-—-—--—-—-—--')
        if salary():
            print('职工薪资已修改')
        else:
            print('查无此人')

    elif choice == '3':
        print('——-—-—-—-—-—查看指定员工-—-—-—-—--—-—-—--')

        view()



    elif choice == '4':
        print('——-—-—-—-—-—查看全体员工-—-—-—-—--—-—-—--')
        all_view()


    elif choice == '5':
        print('——-—-—-—-—-—删除员工数据-—-—-—-—--—-—-—--')
        if delete():
            print('此员工已删除')
        else:
            print('查无此人')
    elif choice =='6':
        print('——-—-—-—-—-—正在退出程序—-—-—-—--—-—-—--')
        flag = False
    else:
        print('没有这个功能')

9.利用文件充当数据库编写用户登录、注册功能
文件名称: userinfo.txt
基础要求:
用户注册功能 >> >: 文件内添加用户数据(用户名、密码等)
用户登录功能 >> >: 读取文件内用户数据做校验
ps: 上述功能只需要实现一次就算过关(单用户)
文件内始终就一个用户信息

f = open('userinfo.txt')  # 打开存账号的文件
res = f.read()  # 读取文件中的内容
user_list = res.split()  # 分割字符串,返回列表
info = {}  # 定义一个空字典
for i in user_list:
    name = i.split(',')[0]
    paw = i.split(',')[1]
    info[name] = paw  # 循环列表,取出列表中的值存入字典

while True:
    print("""
    ------------用户登录/注册------------
            1.登录
            2.注册
    """)
    choice = input('请输入你的选择:').strip()
    if choice == '1':   # 当输入1 时进入登录界面
        print('--------进入登录界面------------')
        with open(r'userinfo.txt', 'r', encoding='utf8') as f:  # 查看文件信息
            name = input('请输入你的用户名:').strip()
            paw = input('请输入你的密码:').strip()
            register = name + ',' + paw    # 按照文件的格式赋值给register
            if register in res:            # 查看信息是否在文件内
                print('登录成功')
            else:
                print('用户名或密码错误')
                f.close()

    elif choice == '2':
        print('--------------进入注册界面----------------')
        with open(r'userinfo.txt', 'a', encoding='utf8') as f:  # 输入追加的信息
            name = input('请输入用户名:').strip()
            paw = input('请输入密码:').strip()
            paw1 = input('请再次输入密码:').strip()
            if paw != paw1:
                print('两次密码不一致!')
            elif name == '' or paw == '':
                print('用户名密码不能为空!')
            elif name in info:
                print('用户名已存在')
            else:
                print('恭喜注册成功!')
                f.write('\n' + name + ',' + paw)   # 按照这个格式写入文件
                f.close()
     else:
        print('没有此选择对应的程序')

10.利用文件充当数据库编写用户登录、注册功能
文件名称: userinfo.txt
基础要求:
用户注册功能 >> >: 文件内添加用户数据(用户名、密码等)
用户登录功能 >> >: 读取文件内用户数据做校验

f = open(r'userinfo.txt', 'r', encoding='utf8')  # 打开存账号的文件
res = f.read()  # 读取文件中的内容
user_list = res.split()  # 分割字符串,返回列表
info = {}  # 定义一个空字典
for i in user_list:
    name = i.split(',')[0]
    paw = i.split(',')[1]
    info[name] = paw  # 循环列表,取出列表中的值存入字典

flag = True


def cyclic():       # 创建一个用户登录程序函数
    while flag:
        print("""
        --------------用户登录/注册---------------
                   1.登录
                   2.注册
                   3.退出程序
        """)
        choice = input('请输入你的选择:').strip()
        return choice


def register(name, paw):          # 用户注册
    with open(r'userinfo.txt', 'a', encoding='utf8') as f:  # 查看文件信息
        temp = '\n' + name + ',' + paw
        f.write(temp)  # 按照这个格式写入文件


def login(name, paw):             #用户登录
    with open(r'userinfo.txt', 'r', encoding='utf8') as f:  # 输入追加的信息
        register = name + ',' + paw
        if register in res:
            return True     # 登录成功
        else:
            return False    # 登录失败

def contrast(name, paw, paw1):        # 判断是否可注册
    if paw != paw1:
        print('两次密码不一致!')
    elif name == '' or paw == '':
        print('用户名密码不能为空!')
    elif name in info:
        print('用户名已存在')
    else:
        print('恭喜注册成功!')


while flag:
    choice = cyclic()         # 调用登录程序的相应函数
    if choice == '1':
        print('-------------请入登录界面----------------')
        name = input('请输入你的用户名:').strip()
        paw = input('请输入你的密码:').strip()
        i = login(name, paw)            # 调用登录函数
        if i:
            print('登录成功')
        else:
            print('用户名或密码错误')
    elif choice == '2':
        print('--------------进入注册界面----------------')
        name = input('请输入用户名:').strip()
        paw = input('请输入密码:').strip()
        paw1 = input('请再次输入密码:').strip()
        contrast(name,paw, paw1)        # 调用对比
        register(name, paw)             # 进行添加
    elif choice == '3':
        print('欢迎下次使用')
        flag = False
    else:
        print('请输入正确的指令')
  1. 基于列表充当数据库完成用户登录(拔高练习) # 多个用户数据
    data_source = ['jason|123', 'kevin|321','oscar|222']
data_source = ['jason|123', 'kevin|321', 'oscar|222']
flag = True
while flag:
    username = input('请输入用户名:').strip()
    password = input('请输入密码:').strip()
    for i in data_source:
        name,paw = i.split('|')
        if name == username and paw == password:
            print('登陆成功')
            flag = False
        break
    else:
        print('用户名或密码错误')

12.1.编写员⼯管理系统
功能要求:
1.添加员⼯信息
提示:编号(不能重复)、姓名、年龄、薪资
2.查询特定员⼯
提示:根据编号查找 展示结构⽤格式化输出美化
3.修改员⼯薪资
提示:先根据编号查找之后再修改薪资
4.查询所有员⼯
提示:循环⼀⾏⾏展示
5.删除特定员⼯
提示:根据编号确定

info = {}
def register():
    """
    增加用户名功能
    注册信息
    :return:
    """

    id = input('请输入员工职工编号:').strip()
    if id in info:
        print('该职工号已存在')
    else:
        username = input('请输入员工姓名:').strip()
        age = input('请输入员工年龄:').strip()
        pay = input('请输入员工薪资:').strip()

        new_info = {}
        new_info['id'] = id
        new_info['username'] = username
        new_info['age'] = age
        new_info['pay'] = pay

        info[id] = new_info
    return True


def view():
    """
    查看指定员工信息
    :return:
    """
    print('--------进入查看功能界面,请输入需查看的职工id------------')
    id = input('请输入需查看的职工ID:').strip()
    if id in info:
        data = info.get(id)
        print(f"""
        --------------------------------------------
                 职工编号:{data.get('id')}
                 职工姓名:{data.get('username')}
                 职工年龄:{data.get('age')}
                 职工薪资:{data.get('pay')}
        --------------------------------------------         
                 """)
        return True


def adjust():
    """
    修改员工工资
    :return:
    """
    print('进入修改员工薪资界面')
    id = input('请输入需修改员工的职工号:').strip()
    info1 = info.get(id)
    if id in info:
        money = input('请输入修改后的薪资:').strip()
        info1['pay'] = money
        info[id] = info1
        print('员工编号为%s的薪资以修改'%id)
    else:
        print('该职工号不存在')



def all_view():
    """
    查看所有员工
    :return:
    """
    new_info = info.values()
    for i in new_info:
        print(f"""
        ----------------------------------------
                职工编号:{i.get('id')}
                职工姓名:{i.get('username')}
                职工年龄:{i.get('age')}
                职工薪资:{i.get('pay')}
        ---------------------------------------
        """)


def delete():
    """
    删除指定用户
    :return:
    """
    print('进入删除指定员工信息功能界面')
    id = input('请输入需要删除的职工号:').strip()
    if id in info:
        info.pop(id)
    else:
        print('没有找到该员工编号')





dic_func = {
    '1': register,
    '2': view,
    '3': adjust,
    '4': all_view,
    '5': delete
}

while True:
    print("""
    ------------------------------
            1. 添加员工信息
            2. 查询指定员工信息
            3. 修改指定员工薪资
            4. 查看全部员工
            5. 删除指定员工
    """)
    func_id = input('请输入功能编号:').strip()
    if func_id in dic_func:
        func = dic_func.get(func_id)
        func()

13.编写一个用户认证装饰器
基本要求
执行每个函数的时候必须先校验身份 eg: jason 123
拔高练习(有点难度)
执行被装饰的函数 只要有一次认证成功 那么后续的校验都通过
函数:register login transfer withdraw
提示:全局变量 记录当前用户是否认证

login_a = {
    'login_a': False
}
def outer(func_name):
    def inner(*args,**kwargs):
        global login_a
        if 'login':
            username = input('请输入用户名:').strip()
            password = input('请输入密码:').strip()
            if username == 'jason' and password == '123':
                login_a = True
                res = func_name(*args, **kwargs)
                return res
    return inner


def register():
    print('123')


def login():
    print('321')

def transfer():
    print('789')

def withdraw():
    print('456')


register()
login()
transfer()
withdraw()

14.尝试编写有参函数将多种用户验证方式整合到其中
直接获取用户数据比对
数据来源于列表
数据来源于文件

info = [['jcs', '123'], ['jason', '123']]


def outer(condition):
    def login(func):
        def inner(*args, **kwargs):
            username = input('请输入用户名:').strip()
            password = input('请输入密码:').strip()

            if condition == '列表':
                print('使用列表作为数据来源')
                for i in info:

                    if username == i[0] and password == i[1]:
                        res = func(*args, **kwargs)
                        return res

                else:
                    print('用户名或密码错误')

            elif condition == '文件':
                print('使用文件作为数据来源')
                with open(r'user.txt', 'r', encoding='utf8') as f:
                    for i in f:
                        i = i.strip().split(',')
                        if username == i[0] and password == i[1]:
                            res = func(*args, **kwargs)
                            return res
                    else:
                        print('权限不够,无法执行')

            else:
                print('没有这个方式')

        return inner

    return login


@outer('列表')
def register():
    print("登录成功")


@outer('文件')
def register():
    print('登陆成功')

register()

15.尝试编写递归函数
推导指定某个人的正确年龄
eg: A B C D E 已知E是18 求A是多少

def func(n):   # 定义一个函数名为func,参数为n 的函数
    if n == 1:     # 如果参数为1 ,返回n的值
        return 18   # 将18赋值给n
    else:
        return  2 + func(n-1)   # n不等于1, 返回依此加2


A = func(5)
print(A)

16.有下列用户数据
user_data = {
'1': {'name': 'jason', 'pwd': '123', 'access': ['1', '2', '3']},
'2': {'name': 'kevin', 'pwd': '321', 'access': ['1', '2']},
'3': {'name': 'oscar', 'pwd': '222', 'access': ['1']}
}
并有三个函数
def func1():
pass
def func2():
pass
def func3():
pass
要求:调用上述三个函数的时候需要从user_data中校验用户身份是否正确
并获取当前登录用户拥有的可执行函数功能编号即键access对应的功能编号列表
func1是1、func2是2、func3是3
并且一旦用户登录成功之后后续函数的调用不再校验用户身份
请思考如何获取函数功能编号 如何校验用户身份 如何校验权限
ps:装饰器知识 附赠:实现上述主体功能即可 其他扩展优化功能可暂且不写

user_data = {
    '1': {'name': 'jason', 'pwd': '123', 'access': ['1', '2', '3']},
    '2': {'name': 'kevin', 'pwd': '321', 'access': ['1', '2']},
    '3': {'name': 'oscar', 'pwd': '222', 'access': ['1']}
}

is_login = {
    'is_login':False,
    'access_list':[]
}
def login(func_id):
    def outer(func_name):
        def inner(*args,**kwargs):
            if is_login.get('is_login'):
                access = is_login.get('access_list')
                if func_id in access:
                    res = func_name(*args,**kwargs)
                    return res
                else:
                    print('没有功能编号为%s的权限'% func_id)

            id = input('请输入用户编号:').strip()

            if id in user_data:
                username = input('请输入用户名:').strip()
                password = input('请输入密码:').strip()
                new_data = user_data.get(id)
                if username == new_data.get('name') and password == new_data.get('pwd'):
                    access = new_data.get('access')
                    is_login['is_login'] = True
                    is_login['access_list'] = access

                    if func_id in access:

                        res = func_name(*args,**kwargs)
                        return res
                    else:
                        print('你没有当前功能编号为:%s 的函数执行权限' % func_id)
                else:
                    print('用户名或密码错误')
            else:
                print('用户编号%s不存在' % id)

        return inner
    return outer


@login('1')
def func1():
    print('from func1')

@login('2')
def func2():
    print('from func2')

@login('3')
def func3():
    print('from func3')

func1()
func2()
func3()

posted @ 2022-07-01 20:36  Nirvana*  阅读(57)  评论(0)    收藏  举报