模拟电商平台雏形
一、产品功能
1、界面实现用户 注册、登录功能用户信息。
(1)注册
(2)登录
(3)查看
(4) 退出登录
2、模拟用户下单过程,当用户买的物品超过3件时,给与2折优惠(优先级较高)。当用户总价超过100元给与3折优惠。(高阶函数)[{“pname”:"","price":"","number":12}]
二、实现思路
功能1——使用字典表示用户对象,例如:[{‘name’:'zhangsan','pwd':'123456',hasLogin:false}],将字典放入list中来表示数据库
1.先定义用户列表users=[]
2.定义一个界面函数manu(),作用相当于c++中的main()函数 ,用条件结构让用户输入以选择 注册、登录、退出 等相应的功能
def menu():
"""
显示操作界面
:return:
"""
print("****************")
print("登陆注册系统\n")
while True:
opt = input("请选择要进行的操作\n1.注册\n2.登陆\n3.退出\n")
if opt=="1":
register() #跳转到注册功能的函数
if opt=="2":
login() #跳转到登陆功能的函数
if opt=="3":
print("Bye~!")
break #退出
-
2.1 注册功能 register()
大致思路:用input()函数获取用户输入的用户名 username 、密码 pwd ,并将用户名和密码作为存在字典user{}中,作为数据库user[]列表的一个元素
def register():
""""用户注册"""
username=read_username() #用来获取合法的用户名
pwd=read_pwd() #用来获取合法的密码
user={}
user["username"]=username
user["pwd"]=pwd
users.append(user)
print("注册成功!")
print(users)
-
2.1.1 用户名和密码读取函数 read_username()、read_pwd()
为了清晰结构,我们将用户名和密码的读入功能单独写两个函数,用来保证用户输入的用户名和密码是合法的(6~9位之间)
如果用户输入有误,就重新输入直到输入内容合法为止^ ~ ^
def read_username():
"""
获取用户输入的用户名
:return:
"""
username=input("请输入用户名(6~9位长度):\n")
#验证用户名是否合法
#if len(username)<6 or len(username)>9:
if not 6<=len(username)<=9:
print("用户长度应该在6~9位之间,请重新输入")
return read_username()
#验证用户名是否存在
name_list=[user.get('username') for user in users]
if username in name_list:
print("该用户已经存在")
return read_username()
return username
def read_pwd():
"""
获取用户输入密码
:return:
"""
pwd=input("请输入用户密码(6~9位之间):")
if len(pwd)<6 or len(pwd)>9:
print("密码不合法,请重新输入")
return read_pwd()
return pwd
-
2.2登录功能 login()
大致思路:- 验证用户名是否存在:用input()函数获取用户输入的用户名username,并遍历数据库users[]进行查找。如果数据库中没有找到users的字典元素user的key “username”对应的value值,说明此用户名不存在,就返回注册界重新注册。如果用户名存在,就跳转到下一步验证密码是否正确
- *判断密码是否正确:看用户名对应的用户的user[''pwd'']与输入的密码是否一致
def find_user_by_name(username):
"""
根据用户名查找用户
:param username:
:return:
"""
for user in users:
if user["username"]==username:
return user
return None
def read_login_username():
"""
读取合法的用户名
:return:
"""
username = input("请输入用户名:\n")
user = find_user_by_name(username)
if user is None:
print("用户不存在")
return read_login_username()
return username
logined_user = None
def login():
"""
用户登陆
:return:
"""
username=read_login_username()
pwd = input("请输入用户密码:\n")
user=find_user_by_name(username)
if user['pwd']!=pwd:
return print("密码不正确")
#否则登陆成功
global logined_user
logined_user=user
print("登陆成功!")
login_success()
- 2.2.2登录后跳转到查询界面
def print_user():
global logined_user
for k,v in logined_user.items():
print(k,":",v)
def print_users():
for user in users:
print (user)
def login_success():
while True:
opt = input("请选择以下操作\n1.查看当前用户信息\n2.查看用户列表\n3.退出登陆\n")
if opt=="1":
print_user()
if opt=="2":
print_users()
if opt=="3":
return
- 2.3退出 ……
完整代码如下
users=[]
#['username':"",'pwd':""]
logined_user = None
def read_username():
"""
获取用户输入的用户名
:return:
"""
username=input("请输入用户名(6~9位长度):\n")
#验证用户名是否合法
#if len(username)<6 or len(username)>9:
if not 6<=len(username)<=9:
print("用户长度应该在6~9位之间,请重新输入")
return read_username()
#验证用户名是否存在
name_list=[user.get('username') for user in users]
if username in name_list:
print("该用户已经存在")
return read_username()
return username
def read_pwd():
"""
获取用户输入密码
:return:
"""
pwd=input("请输入用户密码(6~9位之间):")
if len(pwd)<6 or len(pwd)>9:
print("密码不合法,请重新输入")
return read_pwd()
return pwd
def register():
""""用户注册"""
username=read_username()
pwd=read_pwd()
user={}
user["username"]=username
user["pwd"]=pwd
users.append(user)
print("注册成功!")
print(users)
def find_user_by_name(username):
"""
根据用户名查找用户
:param username:
:return:
"""
for user in users:
if user["username"]==username:
return user
return None
def read_login_username():
"""
读取合法的用户名
:return:
"""
username = input("请输入用户名:\n")
user = find_user_by_name(username)
if user is None:
print("用户不存在")
return read_login_username()
return username
def login():
"""
用户登陆
:return:
"""
username=read_login_username()
pwd = input("请输入用户密码:\n")
user=find_user_by_name(username)
if user['pwd']!=pwd:
return print("密码不正确")
#否则登陆成功
global logined_user
logined_user=user
print("登陆成功!")
login_success()
def print_user():
global logined_user
for k,v in logined_user.items():
print(k,":",v)
def print_users():
for user in users:
print (user)
def login_success():
while True:
opt = input("请选择以下操作\n1.查看当前用户信息\n2.查看用户列表\n3.退出登陆\n")
if opt=="1":
print_user()
if opt=="2":
print_users()
if opt=="3":
return
def menu():
"""
显示操作界面
:return:
"""
print("****************")
print("登陆注册系统\n")
while True:
opt = input("请选择要进行的操作\n1.注册\n2.登陆\n3.退出\n")
if opt=="1":
register()
if opt=="2":
login()
if opt=="3":
print("Bye~!")
break
menu()
运行结果:
****************
登陆注册系统
请选择要进行的操作
1.注册
2.登陆
3.退出
1
请输入用户名(6~9位长度):
xzcxzc
请输入用户密码(6~9位之间):123456
注册成功!
[{'username': 'xzcxzc', 'pwd': '123456'}]
请选择要进行的操作
1.注册
2.登陆
3.退出
1
请输入用户名(6~9位长度):
xzyxzy
请输入用户密码(6~9位之间):123456
注册成功!
[{'username': 'xzcxzc', 'pwd': '123456'}, {'username': 'xzyxzy', 'pwd': '123456'}]
请选择要进行的操作
1.注册
2.登陆
3.退出
2
请输入用户名:
xzyxzy
请输入用户密码:
123456
登陆成功!
请选择以下操作
1.查看当前用户信息
2.查看用户列表
3.退出登陆
1
username : xzyxzy
pwd : 123456
请选择以下操作
1.查看当前用户信息
2.查看用户列表
3.退出登陆
2
{'username': 'xzcxzc', 'pwd': '123456'}
{'username': 'xzyxzy', 'pwd': '123456'}
请选择以下操作
1.查看当前用户信息
2.查看用户列表
3.退出登陆
3
请选择要进行的操作
1.注册
2.登陆
3.退出
3
Bye~!
Process finished with exit code 0
功能2——模拟用户下单过程,当用户买的物品超过3件时,给与2折优惠
products=[{"pneme":"笔记本","number":2,"price":2.5},{"pname":"手机","number":1,"price":1500}]
def three_discount(totalprice):
print("打三折")
return totalprice*0.3
def two_discount(totalprice):
print("打二折")
return totalprice*0.2
def total_price_count(price,strategy=None):
if strategy is None:
return price
return strategy(price)
#如果数量>3 2折折扣;如果总价>1000元 3折折扣
def app():
total_num=sum([item['number'] for item in products])
total_price=sum([item["price"] for item in products])
strategy=None
if total_num > 3:
strategy=two_discount
if total_price>1000:
strategy=three_discount
price =total_price_count(total_price,strategy)
print("总价:%f"%price)
app()
>>>
打三折
总价:450.750000