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

  1. 登录函数
  2. 注册函数
  3. 猜年龄函数
  4. 选择奖品函数
'''在猜年龄的基础上编写登录、注册方法,并且把猜年龄游戏分函数处理,如

2. 登录函数
3. 注册函数
4. 猜年龄函数
5. 选择奖品函数'''
def register():
    '''登录'''
    count = 0
    while count < 3:
        user_inp = input('请输入用户名:').strip()  # 输入登录的用户名
        pwd_inp = input('请输入密码').strip()  # 输入登陆的密码

        with open('user_info.txt', 'r', encoding='utf8')as fw:
            # 1. 检查是否是未注册用户
            for i in fw:  # 逐行读入
                if user_inp == i.split(':')[0]:  # 用户名比较
                    break
            else:
                print('用户名不存在,请注册!')  # 如果没被打断说明无匹配用户名
                count = 4

            # 控制在未注册时退出循环
            if count== 4:
                break

            fw.seek(0)  # 控制文件光标回到文件头

            # 2.检查用户名和密码是否正确  (运行到这一步,说明已确定,文件中该用户名存在,即已注册)
            for line in fw:
                user, pwd = line.strip().split(':')
                if user_inp == user:
                    if pwd_inp != pwd:  # 如果用户名正确,密码错误,跳过,进行下一组用户名比对
                        continue
                    print('登陆成功!')  # 如果进行到这一步,说明,用户名\密码都正确,登录
                    count = 3  # 控制退出循环
                    guess_age()  # 进入到猜年龄函数
                    break
            else:  # 如果未被打断,说明文件中全都不匹配,即密码或用户名错误
                count += 1
                if count == 3:
                    print('输入错误3次,退出系统')
                    break
                print(f'用户名或密码错误,还剩下{3-count}次机会')

def login():
    '''注册'''
    while True:
        # 1. 注册输入用户名/密码
        user_login = input('请输入用户名:').strip()
        pwd_login = input('请输入密码:').strip()
        pwd1_login = input('请再次输入密码:').strip()

        # 2. 如果两次密码不一致,跳过,回到第一步,重新输入
        if not pwd_login == pwd1_login:
            print('两次密码不一致,请重新输入')
            continue

        # 3.打开文件,判断是否用户名存在,如果存在,提示,重新输入,否则直接写入文件
        with open('user_info.txt', 'a', encoding='utf8')as fa, \
                open('user_info.txt', 'r', encoding='utf8')as fr:
            for line in fr:
                if user_login == line.strip().split(':')[0]:
                    print('用户名已存在,请重新输入')
                    break
            else:  # 没有被打断,即用户名不是已注册过的
                with open('user_info.txt', 'a', encoding='utf8')as fw:
                    fw.write(f'{user_login}:{pwd_login}\n')
                    fw.flush()
                print('注册成功!')
                break

def guess_age():
    '''猜年龄'''
    # 1, 生成随机年龄
    import random
    age = str(int(random.random() * 100))

    while True:
        #1. 输入猜测年龄
        age_inp = input('请输入您猜的年龄').strip()

        # 2. 检测输入是否为数字.如果否,回到第一步
        if not age_inp.isdigit():
            continue

        # 3. 年龄判断
        if age_inp > age:
            print('猜大了')
        elif age_inp < age:
            print('猜小了')
        else:
            print('恭喜猜对了')
            choose_prize()  # 自动跳转选择奖品
            break

def choose_prize():
    '''选择奖品'''
    prize_dict = {'1': '95式突击步枪', '2': '120反坦克导弹', '3': '35榴', '4': '40火'}
    prize_show = '''
    奖品清单
    1    95式突击步枪
    2    120反坦克导弹
    3    35榴
    4    40火'''

    prize_count = 0  # 控制循环
    prize_car = {}  # 存储选择的奖品的清单
    while prize_count < 2:
        print(prize_show)

        # 1. 选择奖品
        chocie = input('请输入选择的奖品:').strip()

        # 2. 判断输入是否在字典的key,否,退回1
        if chocie not in prize_dict:
            print('输入错误,请重新输入')
            continue

        prize = prize_dict[chocie]  # 选择的奖品

        #3 .存储奖品清单
        if prize in prize_car:
            prize_car[prize] += 1
        else:
            prize_car[prize] = 1

        prize_count += 1
        if prize_count == 2:
            print(f'恭喜获得{prize_dict[chocie]}一把,选择结束')
            break
        print(f'恭喜获得{prize_dict[chocie]}一把,还可以选择{2-prize_count}次')

    # 4. 打印奖品清单
    print('共获得:')
    for key, i in prize_car.items():
        print(f'{key}{i}把')

tag = True
while True:
    print('''1  登录
2  注册''')

    choose = input('请选择:').strip()

    if choose == '1':  # 登录# 1. 检查是否是未注册用户
        register()

    if choose == '2':  # 注册
        login()

day10作业(函数实现注册''')的更多相关文章

  1. 6.分析request_irq和free_irq函数如何注册注销中断

    上一节讲了如何实现运行中断,这些都是系统给做好的,当我们想自己写个中断处理程序,去执行自己的代码,就需要写irq_desc->action->handler,然后通过request_irq ...

  2. 6.分析request_irq和free_irq函数如何注册注销中断(详解)

    上一节讲了如何实现运行中断,这些都是系统给做好的,当我们想自己写个中断处理程序,去执行自己的代码,就需要写irq_desc->action->handler,然后通过request_irq ...

  3. day13作业—(登录注册)

    2.写一个函数完成三次登陆功能: 用户的用户名密码从一个文件register中取出. register文件包含多个用户名,密码,用户名密码通过|隔开,每个人的用户名密码占用文件中一行. 完成三次验证, ...

  4. 网络1911、1912 C语言第4次作业--函数批改总结

    目录 网络1911.1912 C语言第4次作业--函数批改总结 一.评分规则 二.本次作业亮点 三.本次作业存在的问题 四.助教有话说 五.得分详情 网络1911.1912 C语言第4次作业--函数批 ...

  5. windowsAPI函数操作注册表实现软件开机自启

    注册表的结构 注册表是一个数据库,它的结构同逻辑磁盘类似.注册表包含键(Key),它类似磁盘中的目录,注册表还包含键值(Value),它类似磁盘中的文件.一个键可以包含多个子健和键值,其中键值用于存储 ...

  6. C语言第十一次作业--函数嵌套调用

    一.实验作业 1.1 PTA题目:递归法对任意10个数据按降序排序 设计思路 定义整型循环变量i,最小值下标min,中间变量t 若n==1,直接返回 否则 min=10-n 最小值下标赋初值 for ...

  7. C语言第五次博客作业--函数

    一.PTA实验作业 题目1:使用函数判断完全平方数 1. 本题PTA提交列表 2. 设计思路 3.本题调试过程碰到问题及PTA提交列表情况说明. 部分正确 :将else的情况放入for循环内,导致循环 ...

  8. C语言博客作业--函数嵌套调用

    一.实验作业(6分) 本周作业要求: 选一题PTA题目介绍. 学习工程文件应用,设计实现学生成绩管理系统. 学生成绩管理系统要求 设计一个菜单驱动的学生成绩管理程序,管理n个学生m门考试科目成绩,实现 ...

  9. C语言博客作业—函数嵌套调用

    一.实验作业 1.1 PTA题目:递归法对任意10个数据按降序排序 1.1.1设计思路 void sort(int a[],int n) { 定义整型循环变量i,中间变量temp,最小值min: 令m ...

随机推荐

  1. .NET Core使用NPOI导出复杂Word详解

    前言: 最近使用NPOI做了个导出Word文档的功能,关于使用.NET Core 导出Word文档的方式有很多.最终我为什么选择了NPOI来实现了这个功能,首先是NPOI是一个开源,免费且容易上手的第 ...

  2. selenium-04-验证码问题

    对于web应用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的答案的,对于系统来说使用验证码可以有效果的防止采用机器猜测方法 ...

  3. Spring框架(三)

    对象依赖关系 Spring中,如何给对象的属性赋值?  [DI, 依赖注入] 1) 通过构造函数 2) 通过set方法给属性注入值 3) p名称空间 4)自动装配(了解) 5) 注解 代码示例: &l ...

  4. 清空div中的数据

    //清空div $("#divinput").val(""); $("#divimg").val(""); $(&quo ...

  5. Android开发——Kotlin开发APP使用笔记

    之前一直使用java来开发Android项目,学了新的kotlin语言,前来试一试,并说一下kotlin对Android的一些功能增强 创建项目 我使用的是Android Studio3.0+,所以默 ...

  6. java并发之内存模型

    java内存模型知识导图 一 并发问题及含义   并发编程存在原子性.可见性.有序性问题. 原子性即一系列操作要么都执行,要么都不执行. 可见性,一个线程对共享变量的修改,另一个线程可能不会马上看到. ...

  7. Spring Boot 2.X(七):Spring Cache 使用

    Spring Cache 简介 在 Spring 3.1 中引入了多 Cache 的支持,在 spring-context 包中定义了org.springframework.cache.Cache 和 ...

  8. Java 爬虫服务器被屏蔽,不要慌,咱们换一台服务器

    这是 Java 爬虫系列博文的第四篇,在上一篇 Java 爬虫遇上数据异步加载,试试这两种办法! 中,我们从内置浏览器内核和反向解析法两个角度简单的聊了聊关于处理数据异步加载问题.在这篇文章中,我们简 ...

  9. 深入了解opacity和rgba

    1. rgba 首先它是一个属性值,语法为rgba(r,g,b,a) - r为红色值, 正整数 | 百分数 - g为绿色值,正整数 | 百分数 - b为蓝色值,正整数 | 百分数 - a为alpha( ...

  10. 高性能Web动画和渲染原理系列(2)——渲染管线和CPU渲染

    目录 一. 高性能动画 二. 像素渲染管线 基本渲染流程 回流和重绘 三. 旧软件渲染 渲染对象(RenderObject) 渲染层(RenderLayer) 四. 从canvas体会分层优势 不分层 ...