注册
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import time
# 关键步骤,控制台打印日志
# 一次能连续注册3个用户
for i in range(3):
'''
从控制台录入注册信息
注册信息含有3个字段:用户名、密码、年龄(数字)
每个字段录入时,要给出提示,并且换行输入
计算注册时间,格式化成:yyyy-MM-dd HH:mi:ss
'''
name = input('请输入用户名:\n')
pwd = input('请输入密码:\n')
age = int(input('请输入年龄:\n'))
register_time = time.strftime('%Y-%m-%d-%H:%M:%S',time.localtime())
nickname = ''
'''
根据年龄,计算昵称:
[0,20)="小奶狗"
[20,30)="男神"
[30,)=“油腻大叔”
'''
if age < 20:
nickname = '昵称:小奶狗'
elif age in range(20, 30):
nickname = '昵称:男神'
else:
nickname = '昵称:油腻大叔'
'''
将注册信息持久化到文件
文件名:register.data
持久化字段:用户名、密码、年龄、昵称、注册时间
字段分隔符:“,”
以追加的方式写入文件,不能覆盖
中文编码:utf-8
每个用户占一行
'''
with open('register.data', 'a', encoding='utf-8') as f:
a = f.write(name + ',' + pwd + ',' + str(age) + ',' + nickname + ',' + register_time + '\n')
注册_优化
#! /usr/bin/env python
# -*- coding: utf-8 -*-
'''
优化后添加了必填字段不能为空的功能.其中len()函数作用是返回对象的长度
思路:
1.输入姓名 密码 确认密码
2.如果姓名 密码 确认密码 不为空 就输入年龄,根据输入的年龄判断昵称
3.获取当前的日期
4.录入信息到register.data文件中 并提示注册成功
5.如果必填字段为空,提示对应信息
'''
import time
for i in range(3):
name = input('请输入姓名: ')
pwd = input('请输入密码: ')
c_passwd = input('请再次确认密码: ')
if len(name.strip()) != 0 and len(pwd.strip()) != 0 and pwd == c_passwd:
age = int(input('请输入年龄:\n'))
nickname = ''
if age < 20:
nickname = '昵称:小奶狗'
elif age in range(20, 30):
nickname = '昵称:男神'
else:
nickname = '昵称:油腻大叔'
register_time = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime())
with open('register.data', 'a', encoding='utf-8') as f:
f.write(name + ',' + pwd + ',' + str(age) + ',' + nickname + ',' + register_time + '\n')
print('注册成功')
elif len(name.strip()) == 0:
print('姓名不能为空,请重新输入')
elif len(pwd.strip()) == 0:
print('密码不能为空,请重新输入')
elif c_passwd != pwd:
print('两次输入的密码不一致,请重新输入')
登陆
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# 从文件加载用户列表
'''
文件名:register.data
with open('register.data', 'r', encoding='utf-8') as f:
1.readlines()读取register.data文件所有的每一行的数据
2.strip()删除开头或者结尾的字符
3.通过split()指定分隔符对字符串进行切片
4.将所有用户存到一个用户集列表users_list中
'''
list = []
with open('register.data', 'r', encoding='utf-8') as f:
for line in f.readlines():
user = line.strip().split(',')
list.append(user)
print(user[0])
# 控制台登录
# 提示输入用户名
'''
判读登录用户是否已注册
1.逐条对比注册用户信息 循环对比数组中第一个和第二个的值
2.如果相同登陆成功
3.发现登录成功后,结束后续循环
4.若对比完所有注册用户都没匹配成功,则提示登录失败
5.有3次登录机会,每次机会若成功,则结束登录,每次机会若失败,则提示失败,并显示剩余机会次数
在python中 None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False,使用if not flag 这种写法的前提是:必须清楚flag等于None,False
'''
for i in range(3):
name = input("请输入用户名:")
pwd = input("请输入密码:")
flag = False
for user in list:
if name == user[0] and pwd == user[1]:
print("登陆成功")
flag = True
break
if not flag:
print("登陆失败,请检查用户名和密码")
总结:
将控制台录入的信息持久化到文件的写法
操作文件固定写法:
open(file, mode='a', , encoding='utf-8')
with open('register.data', 'r', encoding='utf-8') as f:
file: 必需,文件路径(相对或者绝对路径)
mode: 可选,文件打开模式
encoding: 一般使用utf8
with 代表打开文件之后关闭文件的操作,open函数代表的是打开文件操作,里面有文件的路径,文件的操作,比如'r'代表的是只读取,'a'代表的是打开一个文件用于追加,编码格式utf-8,as f 代表的是取变量名
r 以只读方式打开文件,这是默认模式
w 打开一个文件只用于写入。存在,覆盖。不存在,自动新建
a 打开一个文件用于追加。存在,追加。不存在,自动新建
w+:写和读;a+:追加和读
函数
len() 作用是返回对象的长度
range() 返回的是一个可迭代对象(类型是对象)默认是从 0 开始。例如range(5)等价于range(0, 5);
input() 接受一个标准输入数据,返回为 string 类型。
open() 打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
readlines() 用于读取所有行,并返回列表
strip() 删除开头或是结尾的字符,不能删除中间部分的字符。
split() 通过指定分隔符对字符串进行切片
append() 方法用于在列表末尾添加新的对象。