刚刚花了近一个小时吃了一碗牛肉面,我是旺旺没想到店家竟然在里面放了土豆!作为21世纪优秀青年,我强烈谴责这种在面里放土豆的行为!!
1.使用字典表示用户对象,例如:[{‘name’:'zhangsan','pwd':'123456',hasLogin:false}],将字典放入list中来表示数据库,请完成用户 注册、登录功能用户信息。
class MyWork():
def __init__(self):
"""
用户数据库
"""
self.user_list = [] #用户列表
self.user = { #模板
'name': '',
'pwd': '',
'hasLogin': False
}
def search(self, name, pwd=None):
"""
若pwd=None,判断用户是否已存在
否则验证用户与密码,返回用户在数据库中的位置
:param name: 用户名
:param pwd: 密码
:return: 布尔值或用户位置信息
"""
for i in range(len(self.user_list)):
if pwd == None:
if name == self.user_list[i]['name']:
return True
else:
if name == self.user_list[i]['name'] and pwd == self.user_list[i]['pwd']:
return i+1
else:
return 0
def userAdd(self):
"""
添加用户到数据库中
:return:
"""
user = dict(self.user) # 重新分配内存地址存储
name = input('请输入用户名:')
if self.search(name):
print('用户已存在,请重新输入')
self.userAdd()
else:
while True:
pwd = input('请输入密码(长度6--9):')
if len(pwd) >= 6 and len(pwd) <= 9:
user['name'] = name
user['pwd'] = pwd
self.user_list.append(user)
print('注册成功!')
break
else:
print('密码长度不合法')
continue
def userLogin(self, name, pwd, login=False, check=False, exit=False):
"""
用户登录界面所有操作
:param name: 用户名
:param pwd: 密码
:param login: 用户登录的开关
:param check: 查看用户状态的开关
:param exit: 退出登录的开关
:return:
"""
if not self.user_list:
print('当前用户数据库为空,请注册')
self.Main()
else:
i = self.search(name, pwd)
if i:
if login:
self.user_list[i-1]['hasLogin'] = True
print("登陆成功!")
elif exit:
self.user_list[i-1]['hasLogin'] = False
print("退出登录!")
elif check:
for key, value in self.user_list[i-1].items():
print(key, ':', value)
else:
print('用户名或密码不对')
self.run(str(2))
def print_user(self):
"""
打印数据库中所有用户信息
:return:
"""
for i in range(len(self.user_list)):
print(self.user_list[i])
def run(self, flag):
"""
实现子界面的功能
:param flag:
:return:
"""
if flag == '1':
print('注册界面'.center(40, '='))
self.userAdd()
elif flag == '2':
print('登录界面'.center(40, '='))
name = input('请输入用户名:')
pwd = input('请输入密码:')
self.userLogin(name, pwd, login=True)
while True:
dir2 = ['查看当前用户信息', '查看用户列表', '退出登录']
for i, j in zip(range(1, 4), dir2): # 打印菜单
print(i, ' ', j)
b = input('请输入相应操作前的序号:')
if b == '1':
self.userLogin(name, pwd, check=True)
elif b == '2':
self.print_user()
elif b == '3':
self.userLogin(name, pwd, exit=True)
break
else:
print('不合法的输入')
def Main(self):
"""
实现主界面的功能
:return:
"""
while True:
dir = ['注册', '登录', '退出']
for i, j in zip(range(1, 4), dir):#打印菜单
print(i, ' ', j)
flag = input('请输入相应操作前的序号:')
if flag == '1':
self.run(flag)
elif flag == '2':
self.run(flag)
elif flag == '3':
exit()
else:
print('输入错误')
t = MyWork()
t.Main()
2.模拟用户下单过程,当用户买的物品超过3件时,给与2折优惠(优先级较高)。当用户总价超过100元给与3折优惠。(高阶函数)[{“pname”:"","price":"","number":12}]
class Shopping():
def __init__(self):
self.merchandise_list = [
{'name': '铅笔', 'price': 1, 'number': 0},
{'name': '书本', 'price': 20, 'number': 0},
{'name': '衣服', 'price': 99, 'number': 0},
{'name': '耳机', 'price': 33, 'number': 0},
{'name': '女朋友', 'price': 520, 'number': 0},
{'name': '老婆', 'price': 1314520, 'number': 0},
]
self.shopping_basket = []
def price_no_discount(self):
"""
未打折的总价格
:return:总价
"""
price_list = map(lambda x: x['price'] * x['number'], self.shopping_basket)#价格列表
all_price = sum(price_list)
return all_price
def price_discount(self):
"""
打折
:return:打折后的价格
"""
price = self.price_no_discount()
number = sum(map(lambda x: x['number'], self.shopping_basket))
if number >= 3:
price *= 0.2
print('您购买的商品超过3件,享受2折优惠,折后价:', price)
elif price >= 100:
price *= 0.3
print('您购买的商品总价超过100元,享受3折优惠,折后价:', price)
else:
print('亲,购买更多商品可享受更多优惠哦,当前需付款:', price)
def menu(self):
"""
打印商品列表
:return:
"""
print('商品列表'.center(50, '='))
print('商品名称'.ljust(20), '商品价格'.rjust(20))
for i in range(len(self.merchandise_list)):
name = str(i+1) + '. ' + self.merchandise_list[i]['name']
price = self.merchandise_list[i]['price']
print(name.ljust(20), str(price).rjust(22))
def search(self, name_number):
"""
搜索商品是否在购物篮中,在则返回其位置(不是索引),否则False
:param name_number:商品序号
:return:商品在购物篮中的位置
"""
i = int(name_number) - 1
name = self.merchandise_list[i]['name']
for j in range(len(self.shopping_basket)):
if name == self.shopping_basket[j]['name']: # 已购买的商品
return j + 1
else:
return 0
def add_to_basket(self, name_number, number):
"""
添加到购物篮
:param name_number:商品序号
:param number:商品价格
:return:
"""
i = self.search(name_number)
if i: #商品已经在购物篮中,直接改变数量
self.shopping_basket[i - 1]['number'] += int(number)
else: #添加新的商品
i = int(name_number) - 1
merchandise_list = list(self.merchandise_list)#在新的内存创建商品
merchandise_list[i]['number'] += int(number)
self.shopping_basket.append(merchandise_list[i])
def show_basket(self):
"""
打印购物篮列表
:return:
"""
print('购物篮'.center(50, '='))
print('商品名称'.ljust(20), '商品数量'.rjust(20))
for i in range(len(self.shopping_basket)):
name = str(i+1) + '. ' + self.shopping_basket[i]['name']
number = self.shopping_basket[i]['number']
print(name.ljust(20), str(number).rjust(22))
def run(self):
"""
主函数
:return:
"""
self.menu()
try:
while True:
name_number = input('请输入商品序号:')
number = input('请输入商品数量:')
self.add_to_basket(name_number, number)
self.show_basket()
print('无折扣总价:', self.price_no_discount(), '元')
while True:
flag = input('是否继续购买(输入Y继续,输入N结束并付款):')
if flag == 'Y':
break
elif flag == 'N':
self.price_discount()
a = input('输入任意键退出')
exit()
else:
print('请输入Y/N确认是否继续购买')
continue
except Exception:
print('请根据提示输入')
self.run()
t = Shopping()
t.run()
商品信息可以爬虫获取的,但是我不会爬虫呀,不知夫子何时倾囊以授......
高阶函数只用了map,lambda,作为初学者还是感觉循环比较好使,慢慢适应吧......