zoukankan      html  css  js  c++  java
  • 第一阶段:Python开发基础 day11 课后作业--猜年龄游戏函数版


    程序要求:

    1. 在猜年龄的基础上编写登录、注册方法,并且把猜年龄游戏分函数处理,如
    2. 登录函数
    3. 注册函数
    4. 猜年龄函数
    5. 选择奖品函数
    import random
    import os
    # 编写注册模块函数
    def regist():
        '''用于用户注册的模块函数'''
    
        print('*' * 40, '注册模块', '*' * 40)
        while True:
            check_tar = 0  # 用作登陆的用户名是否存在核验所用
            username = input('请输入你要注册的用户名:').strip()  # 接收用户输入的用户名并做去除两端空格操作
            password = input('请输入你要注册的密码:').strip()  # 接收用户输入的密码并做去除两端空格操作
            re_pwd = input('请再次确认你的密码:').strip()  # 接收用户输入的确认密码
            # 检测输入的用户名和密码是否为空
            if username == '' or password == '' or re_pwd == '':
                print('你输入的账号或密码或确认密码为空,请重新输入')
                continue
            # 检测输入的密码和确认密码是否一致
            elif password != re_pwd:
                print('你两次输入的密码不同,请重新输入!')
                continue
            #  检测当前文件夹下是否有user.txt 文件,如果有就进行用户名核验
            if os.path.exists('user.txt') :
                # 首先先打开文件查看一下注册的用户名是否已经在文件中了
                with open('user.txt', 'r') as user_r:  # 打开文件
                    check_data = user_r.read()
                # 如果文件不为空
                if check_data != '':
                    check_data = check_data.split('
    ')  # 文件处理数据
                    for ckeck_info in check_data:  # 取出每一条在文件中的注册数据
                        check_info_list = ckeck_info.split('|')  # 处理用户数据
                        # 做判断是否存在 存在就跳出for循环
                        # print(check_info_list)
                        if username == check_info_list[0]:
                            print('你注册的用户名已存在请重新输入一个不同的!')
                            check_tar = 1  # 这个时候设置一个状态,以此来结束外层当前本次循环
                            break
            # 如果状态被修改就跳过本次循环
            if check_tar == 1 :
                continue
            # 不存在就 执执行追加文件
            with open(r'user.txt', 'a') as user_w:  # 打开db文件夹下的user.txt文件
                user_w.write(username + '|' + password + '
    ')  # 以 这种格式:nick|nick123  将获取来的账号和密码放入user.txt文件中
            print('恭喜你,完成注册!现在可以去选择登陆啦')
            break
    
    
    # 编写登陆模块的函数
    def login():
        '''用于用户登录的模块函数'''
        print('*' * 40, '登陆模块', '*' * 40)
        login_tar = 0  # 0 表示登陆成功 1 表示不成功
        count = 3
        while count > 0:
            check_num = random.randint(1000, 9999)  # 定义一个check_num 变量用于做为验证码的功能 就是随机生成一段四位数的数字
            username = input('请输入你的用户名:')  # 接收用户输入用于登陆的用户名
            password = input('请输入你的密码:')  # 接收用户输入用于登陆的密码
            # 小判断,检测输入的用户或密码是否为空 如果为空给提示,减登陆次数并跳过接下来的程序重新执行登陆
            if username == '' or password == '':
                print(f'你的输入的账号或密码为空,请重新输入。剩余可登录次数为:{count - 1}')
                count -= 1
                continue
            print(f'你此次登陆的验证码为:{check_num}')  # 打印 验证码,以供用户输入
            check_code = input('请输入显示的验证码:').strip()  # 接收用户输入的验证码
            # 判断验证码输入是否为空,如果为空给提示 减登陆次数,跳出本次循环
            if check_code == '':
                print(f'你的输入的验证码为空,请重新输入。剩余可登录次数为:{count - 1}')
                count -= 1
                continue
            # 对比输入的验证码和给出的验证码是否相同,如果不同给提示,减次数,跳出循环
            elif check_num != int(check_code):
                print(f'你的验证码输入有误,请重新输入。剩余可登录次数为:{count - 1}')
                count -= 1
                continue
            #  如果上面的 简单判断 都没有问题,证明输入进来的数字还算是有效字符
            if os.path.exists('user.txt') :
                #  这个时候打开存储了用户注册信息的文件进行用户名 和密码验证
                with open(r'user.txt', 'r') as user_r:  # 打开db文件夹下的user.txt 文件
                    user_info_list = user_r.read().split('
    ')  # 取出文件中的数据并做处理放入一个列表中
                    # print(user_info_list)  # 打印一下列表中的数据查看规律 # ['user|pwd', 'aa|aa', '']
                    #  循环从用户信息列表中取出每条数据
                    for user_info in user_info_list:
                        user_info = user_info.split('|')  # 对取出的单个数据进行处理成为我们想要的格式
                        # print(user_info)   # ['user', 'pwd'] 这个user_info 变成了一个列表,列表元素 0 是用户名,元素1 是密码
                        # 对用户名和密码进行比对,如果正确,将count 清零,然后跳出 该层循环
                        if username == user_info[0] and password == user_info[1]:
                            print('恭喜你登录成功')
                            login_tar = 1 # 当登陆成功之后将这个状态置为1
                            count = 0  # 这一步的作用就是为了停止最外层的 while 循环
                            break  # 这个break 是停止 从文件中取出的数据的这个for循环
                    else:  # 这里就是循环完文件中的数据,没有找到与我们输入的用户密码一致的数据,给提示,减次数
                        print(f'对不起你输入的账号密码有误,请重新输入。剩余可登录次数为:{count - 1}')
                        count += 1
            else:
                print('当前用户没注册,请去注册一个账号再来')
                count = 0
    
        return login_tar
    ## 猜年龄的模块函数
    def guess_age() :
        '''这个函数是用来实现可以进行猜密码的功能'''
        # 导入随机数的模块库
        import random
        # 首先随机一个18-60之间的年龄
        random_age = random.randint(18, 60)
        # 定义一个变量做游戏次数计数
        count = 0
        # 打印一个游戏开始的头(纯属为了显示好看)
        print('*' * 40, '猜年龄游戏开始', '*' * 40)
    
        # 程序主题,开始进行循环控制
        while count < 3:
            # 用户输入自己猜测的年龄
            guess_age = input(f'请输入你猜的年龄,还有{3 - count}次游戏机会:')
            # 游戏次数减一
            count += 1
            # 判断输入的字符是否符合要求,不符合则跳出重新输入
            if not guess_age.isdigit():
                print('你的输入有误,请输入正确的格式')
                if count == 3:
                    inp_y = input('你的游戏次数已用完,请输入"y or Y "获得三次游戏机会:').lower()
                    # 如果输入了y就,将count 置为 0 ,继续游戏
                    if inp_y == 'y':
                        count = 0
                    else:
                        # 如果没有输入y,而是其他字符就直接结束游戏
                        print('你的输入有误,已退出游戏')
                        count = 3
                continue
    
            # 将输入的字符型数据转换为整型
            guess_age = int(guess_age)
            # 判断输入的年龄和我们要猜的年龄
            if guess_age == random_age:
                print('恭喜您,猜中了。接下来进入抽奖环节')
    
                # 猜中了,调用抽奖模块函数,执行抽奖程序
                choose_prize()
                # 跳出while循环,结束游戏
                count = 4
            elif guess_age > random_age:
                print('对不起,猜大了')
            elif guess_age < random_age:
                print('对不起猜小了')
            # 当count为3的时候证明已经猜了三次,这个时候要选择是否继续猜下去了
            if count == 3:
                inp_y = input('你的游戏次数已用完,请输入"y or Y "获得三次游戏机会:').lower()
                # 如果输入了y就,将count 置为 0 ,继续游戏
                if inp_y == 'y':
                    count = 0
                    continue
                else:
                    # 如果没有输入y,而是其他字符就直接结束游戏
                    print('你的输入有误,已退出游戏')
                    count = 4
        # 打印游戏结束语(纯属好看,没有实际意义)
        print('
    ', "*" * 40, "游戏结束", "*" * 40)
    
    # 选择奖品模块函数
    def choose_prize() :
        '''这是猜中了之后进行选择奖品的函数'''
        # 猜对之后就进入到抽奖环节
        get_prize = {}  # 定义一个空字典,用于存储接下来获得奖励
        # 首先打印出所有的奖品选项
        with open('prize.txt', 'r', encoding='utf8') as f:
            data = f.read()
        # 将文件中的数据放入到一个数据字典中
        data_dict = dict(eval(data))
        # 打印这个字典中的数据
        for k, v in data_dict.items():
            print(f'奖品编号:{k} {v}')
        # 进行抽奖循环
        for i in range(2):
            in_start = input(f'请输入"s or S"进行抽奖,剩余{2 - i}次抽奖机会:').lower()
            if in_start == 's':
                # 随机获取中奖的编号
                prize_num = random.randint(0, 8)
                # 打印抽出来的结果
                print(f'恭喜您抽得以下奖品:{data_dict[prize_num]}')
                # 将 抽出来的奖品放入到我们的奖品字典中
                if data_dict[prize_num] in get_prize.keys():
                    get_prize[data_dict[prize_num]] += 1
                else:
                    get_prize[data_dict[prize_num]] = 1
            else:
                print('你放弃了一次抽奖机会')
        else:
            print('您的抽奖机会已用完,您获得以下奖品:')
            # 打印出我们抽到的奖品汇总信息
            for i, j in get_prize.items():
                print(f'奖品{i} {j}个', end=' ')
            print()
    
    ####  注:上面都是相关函数的定义,下面才是具体的调用执行过程
    # 第一步,首先调用注册函数,实现用户注册的功能
    print('
    ', "*" * 40, "欢迎来玩猜游戏", "*" * 40)
    while True:
        in_num = input('''想玩游戏要有账号哟,请做出以下选择(没有账号请选1.注册,已有账号请选择2.登陆,选择0退出游戏):
    1.注册
    2.登陆
    0.退出
        ''')
        if in_num == '1' :
            regist()
            continue
        elif in_num == '2' :
            if login() == 1 :
                guess_age()
                break
            else:
                print('登陆失败,请重新选择')
                continue
        elif in_num == '0' :
            print('你选择了 退出游戏,game over!')
            break
        else:
            print('你的选择有误请重新选择!')
            continue
    

    博客地址

    筱久的学习园地

    以上作业程序一定会存在不足和不对的地方,希望看到的大佬在评论区指出,深表感谢。

  • 相关阅读:
    第十八章 文件传输协议
    第十七章 DNS原理
    第三十六章 Linux常用性能检测的指令
    学习日报
    连接数据库综合实例
    异常处理动手动脑
    Css实例之信息提交
    JDBC编程
    将文本文件写入数据库并使用数据库读取
    Java学习
  • 原文地址:https://www.cnblogs.com/foreversun92/p/11323525.html
Copyright © 2011-2022 走看看