day10作业

作业

  1. 在猜年龄的基础上编写登录、注册方法,并且把猜年龄游戏分函数处理,如

    1. 登录函数
    2. 注册函数
    3. 猜年龄函数
    4. 选择奖品函数

    此程序提供的功能:

    ​ 1 注册
    ​ 2 登录
    ​ 3 猜年龄
    ​ 4 注销
    ​ 5 退出

# coding=utf-8
import os, pickle, random

'''
1. 在猜年龄的基础上编写登录、注册方法,并且把猜年龄游戏分函数处理,如
   2. 登录函数
   3. 注册函数
   4. 猜年龄函数
   5. 选择奖品函数
'''
def user_info(user_dict):
        print("您当前登录的用户是 %s !" % user_dict["username"])

def open_file(file, mode, *args):
    """用户信息保存函数"""
    if mode == "wb":
        data = args[0]
        with open(file, mode) as f:
            pickle.dump(data, f)
    elif mode == "rb":
        with open(file,mode) as f:
            user_dict = pickle.load(f)
            return user_dict

def user(username, password, mode):
    """用户处理函数"""
    file = username + ".db"
    if mode == "regist":
        if not os.path.isfile(file):
            user_dict = {"username": username, "password": password,"stat":0}
            open_file(file, "wb", user_dict)
            print("注册成功!")
        else:
            print("用户已存在!")
    elif mode == "login":
        if not os.path.isfile(file):
            print("用户不存在")
            return None
        else:
            user_dict = open_file(file,"rb")
            if user_dict["stat"] == 1:
                print("您已登录过,如需退出,请注销或退出程序")
                return user_dict
            elif username == user_dict["username"] and password == user_dict["password"]:
                print("登录成功!")
                user_dict["stat"] += 1
                user_dict = open_file(file, "wb",user_dict)
                user_dict = open_file(file, "rb")
                return user_dict
            else:
                print("账号密码错误")
                return

def regist():
    """注册函数"""
    while True:
        print("欢迎来到注册平台!")
        username = input("请输入你的用户名 >>>")
        password = input("请输入你的密码 >>>")
        re_passwd = input("请再次输入你的密码 >>>")
        if re_passwd != password:
            print("密码不一致,again!")
            continue
        user(username, password, "regist")
        break

def login():
    """登录函数"""
    while True:
        print("欢迎来到登录平台!")
        global user_dict
        username = input("请输入你的用户名 >>>")
        password = input("请输入你的密码 >>>")
        user_dict = user(username,password,"login")
        if user_dict is None:continue
        user_dict = user_dict
        break

def logout():
    global user_dict
    user_info(user_dict)
    chooice = input("是否注销登录,请输入[yes/no] >>>")
    if chooice == "yes":
        user_dict["stat"] = 0
        open_file(user_dict["username"] + ".db","wb",user_dict)
        print("注销成功!")
        return user_dict
    else:
        return user_dict

def chooice_prize():
    prize_dict = [
        "芭比娃娃",
        "变形金刚",
        "psp游戏机",
        "奥特曼",
        "遥控飞机",
    ]

    global jiangli_list
    global user_dict

    if user_dict.get("jiangli_list") is None:
        jiangli_list = {}
    else:
        jiangli_list = user_dict["jiangli_list"]

    chooice_count = 1
    while chooice_count < 3:
        user_info(user_dict)
        for i,k in enumerate(prize_dict):print(i,k)
        chooice = input(f"请输入你想要第 {chooice_count} 个奖励 >>>")
        if not chooice.isdigit() or 0 > len(prize_dict) > int(chooice):
            print("输入无效,请重新输入")
            continue
        if jiangli_list.get(prize_dict[int(chooice)]) is None:
            jiangli_list[prize_dict[int(chooice)]] = 1
        else:
            jiangli_list[prize_dict[int(chooice)]] += 1
        print("恭喜 %s 用户获得 %s 奖励一个" % (user_dict["username"],prize_dict[int(chooice)]))
        chooice_count += 1

    print("您两次选择奖励次数已用完,您的奖励物品为 %s " % jiangli_list)
    user_dict["jiangli_list"] = jiangli_list
    user_dict = open_file(user_dict["username"],"wb",user_dict)
    return user_dict

def play_age():
    """猜年龄游戏"""
    global user_dict
    while True:
        print("欢迎来到猜年龄游戏!")
        try:
            if user_dict["stat"] == 0:
                print("请先登录")
                break
            else:
                user_info(user_dict)
        except Exception as f:
            print("请先登录")
            break
        age = random.randint(18,25)
        age_count = 1
        while age_count <= 3:
            age_inp = input("请输入你猜的年龄 >>>")
            if int(age_inp) > age:
                print("猜大了")
            elif int(age_inp) < age:
                print("猜小了")
            else:
                print("猜对了")
                chooice_prize()
                break
            age_count += 1
            if not age_count == 4:
                continue
            chooice = input("游戏结束,还想玩吗?[yes/no] >>>")
            if chooice == "no":
                break
            else:
                age_count = 1

#
# def see_goods_list():
#     # try:
#         global user_dict
#         print(user_dict["username"])
#         user_dict = open_file(user_dict["username"] + ".db","rb")
#         print(user_dict)
#         jiangli_list = user_dict["jiangli_list"]
#         print("您的背包中有奖励的物品 %s " % user_dict["jiangli_list"])
#     # except Exception as f:
#     #     print("请先登录")

def run():
    while True:
        print('''
        1 注册
        2 登录
        3 猜年龄
        4 注销
        5 退出
        ''')
        chooice = input("请输入你的选择 >>>")
        if not chooice.isdigit() or 5 < int(chooice) < 0:
            print("非法输入!")
            continue
        if chooice == "1":
            regist()
        elif chooice == "2":
            login()
        elif chooice == "3":
            play_age()
        # elif chooice == "4":
        #     see_goods_list()
        elif chooice == "4":
            logout()
        elif chooice == "5":
            user_info(user_dict)
            chooice = input("是否退出程序 按yes/no >>>")
            if chooice == "yes":
                user_dict["stat"] = 0
                open_file(user_dict["username"] + ".db","wb",user_dict)
                break
            else:
                continue

if __name__ == "__main__":
    run()

posted @ 2019-09-19 19:12  GeminiMp  阅读(137)  评论(0)    收藏  举报