day10作业(函数实现注册''')
在猜年龄的基础上编写登录、注册方法,并且把猜年龄游戏分函数处理,如
- 登录函数
- 注册函数
- 猜年龄函数
- 选择奖品函数
'''在猜年龄的基础上编写登录、注册方法,并且把猜年龄游戏分函数处理,如
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作业(函数实现注册''')的更多相关文章
- 6.分析request_irq和free_irq函数如何注册注销中断
上一节讲了如何实现运行中断,这些都是系统给做好的,当我们想自己写个中断处理程序,去执行自己的代码,就需要写irq_desc->action->handler,然后通过request_irq ...
- 6.分析request_irq和free_irq函数如何注册注销中断(详解)
上一节讲了如何实现运行中断,这些都是系统给做好的,当我们想自己写个中断处理程序,去执行自己的代码,就需要写irq_desc->action->handler,然后通过request_irq ...
- day13作业—(登录注册)
2.写一个函数完成三次登陆功能: 用户的用户名密码从一个文件register中取出. register文件包含多个用户名,密码,用户名密码通过|隔开,每个人的用户名密码占用文件中一行. 完成三次验证, ...
- 网络1911、1912 C语言第4次作业--函数批改总结
目录 网络1911.1912 C语言第4次作业--函数批改总结 一.评分规则 二.本次作业亮点 三.本次作业存在的问题 四.助教有话说 五.得分详情 网络1911.1912 C语言第4次作业--函数批 ...
- windowsAPI函数操作注册表实现软件开机自启
注册表的结构 注册表是一个数据库,它的结构同逻辑磁盘类似.注册表包含键(Key),它类似磁盘中的目录,注册表还包含键值(Value),它类似磁盘中的文件.一个键可以包含多个子健和键值,其中键值用于存储 ...
- C语言第十一次作业--函数嵌套调用
一.实验作业 1.1 PTA题目:递归法对任意10个数据按降序排序 设计思路 定义整型循环变量i,最小值下标min,中间变量t 若n==1,直接返回 否则 min=10-n 最小值下标赋初值 for ...
- C语言第五次博客作业--函数
一.PTA实验作业 题目1:使用函数判断完全平方数 1. 本题PTA提交列表 2. 设计思路 3.本题调试过程碰到问题及PTA提交列表情况说明. 部分正确 :将else的情况放入for循环内,导致循环 ...
- C语言博客作业--函数嵌套调用
一.实验作业(6分) 本周作业要求: 选一题PTA题目介绍. 学习工程文件应用,设计实现学生成绩管理系统. 学生成绩管理系统要求 设计一个菜单驱动的学生成绩管理程序,管理n个学生m门考试科目成绩,实现 ...
- C语言博客作业—函数嵌套调用
一.实验作业 1.1 PTA题目:递归法对任意10个数据按降序排序 1.1.1设计思路 void sort(int a[],int n) { 定义整型循环变量i,中间变量temp,最小值min: 令m ...
随机推荐
- SpringBoot集成Shiro 实现动态加载权限
一.前言 本文小编将基于 SpringBoot 集成 Shiro 实现动态uri权限,由前端vue在页面配置uri,Java后端动态刷新权限,不用重启项目,以及在页面分配给用户 角色 . 按钮 .ur ...
- 用 CocosCreator 快速开发推箱子游戏
游戏总共分为4个功能模块: - 开始游戏(menuLayer) - 关卡选择(levelLayer) - 游戏(gameLayer) - 游戏结算(gameOverLayer) Creator内组件效 ...
- 短视频处理LanSoEditor-SDK之功能介绍
短视频处理LanSoEditor-SDK之功能介绍 (注释: 我们的SDK每3周更新一次, 一下功能是在2.8.2版本上列出的,可能不是最新的功能, 请知悉) 和别家最大的不同在于: 别人提供功能, ...
- 如何搭建基于Docker的gitlab服务器集成CI/CD实现DEVOPS(完整版)
From this lesson you will learn about 1,How to install and configure a docker based gitlab server 2, ...
- JavaScript系列:高级函数篇
前言: 本篇主要是介绍 JavaScript使用函数的高级方法,函数是JavaSCript中最有趣的部分,利用Function特性可以编写出很多非常有意思的代码,本篇主要包括:函数回调,高阶函数以及函 ...
- Redis分布式锁的一点小理解
1.在分布式系统中,我们使用锁机制只能保证同一个JVM中一次只有一个线程访问,但是在分布式的系统中锁就不起作用了,这时候就要用到分布式锁(有多种,这里指 redis) 2.在 redis当中可以使用命 ...
- Ionic2优于Ionic1的6个理由
经历了一个从0到有的app的开发,我已经很熟悉Ionic1了,在此期间我曾发现过Ionic1的一些bug,和一些不合理的地方(根基版本 不同,后续我会陆续发表这些文章),我甚至在此期间对Ionic1进 ...
- MakaJs:基于 React, Redux 的轻量级前端框架
github: maka.js 留下您宝贵的STAR!谢谢 maka maka源于中文码咖,意为写代码的大咖 一眼即可看懂的前端框架,简约而不简单 1.安装 bash sudo npm i -g @m ...
- 《深入理解Java虚拟机》-----第12章 Java内存模型与线程
概述 多任务处理在现代计算机操作系统中几乎已是一项必备的功能了.在许多情况下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统速 ...
- springboot redis-cache 自动刷新缓存
这篇文章是对上一篇 spring-data-redis-cache 的使用 的一个补充,上文说到 spring-data-redis-cache 虽然比较强悍,但还是有些不足的,它是一个通用的解决方案 ...