函数实践之简易购物系统

项目主要需求:

  • 用户可以自行选择功能

  • 该购物系统具有注册/登录/购物/购物车/退出登录功能

  • 用户在登录后才能使用购物/购物车/退出登录功能

'''
注册
登录
购物
购物车
退出登录
''' username_list = []
goods_dict = {
'1': '马云',
'2': '马化腾',
'3': '马冬梅'
}
shopping_cart_dict = {} def register():
'''注册'''
print('*' * 20, '注册', '*' * 20) while True: username_inp = input('请输入用户名: ')
pwd_inp = input('请输入密码: ')
re_pwd_inp = input('再次输入密码以确认: ') if pwd_inp == re_pwd_inp:
with open('user_info', 'a', encoding='utf-8') as fa:
fa.write(f'{username_inp}:{pwd_inp}\n')
print('注册成功')
break
else:
print('两次密码输入不一致') def login():
'''登录'''
print('*' * 20, '登录', '*' * 20) count = 0
while count < 3: if username_list:
print('你已登录')
break username_inp = input('请输入用户名: ')
pwd_inp = input('请输入密码: ') with open('user_info', 'r', encoding='utf-8') as fr:
for user_info in fr:
user_info = user_info.strip()
username, pwd = user_info.split(':')
if username_inp == username and pwd == pwd_inp:
print('登录成功')
username_list.append(username_inp)
count = 3
break else:
print('用户名或密码错误')
count += 1 def shopping():
'''购物'''
print('*' * 20, '购物', '*' * 20) while True: if not username_list:
print('请先登录')
break print('''
1 马云
2 马化腾
3 马冬梅
''') choice = input('请输入你要购买的商品编号,其他任意内容回到主菜单: ') if choice not in ['1', '2', '3']:
break
# 判断选择商品在购物车中是否存在. 已经存在: 数量加1; 不存在: 数量为1
goods_name = goods_dict[choice]
if goods_name in shopping_cart_dict:
shopping_cart_dict[goods_name] += 1
else:
shopping_cart_dict[goods_name] = 1 print(f'已添加至购物车, 当前购物车商品为:\n{goods_dict}') def shopping_cart():
'''购物车''' if not username_list:
print('请先登录')
return print('*' * 20, '购物车', '*' * 20) if shopping_cart_dict == {}:
print('购物车为空,请先挑选商品')
return print(f'当前购物车商品有:{shopping_cart_dict}') buy_choice = input('确认购买请输入Y,其他任意内容回到主菜单: ')
if buy_choice not in ['Y', 'y']:
func()
shopping_cart_dict.clear()
print('购买成功!') def logout():
'''退出登录''' if not username_list:
print('请先登录')
return choice = input('确认退出登录请输入Y,其他任意内容回到主菜单: ')
if choice not in ['Y', 'y']:
return
username_list.clear()
print('已退出登录') func_dict = {
'1': register,
'2': login,
'3': shopping,
'4': shopping_cart,
'5': logout
} def func():
'''功能菜单''' while True:
print('''
1 : 注册
2 : 登录
3 : 购物
4 : 购物车
5 : 退出登录
''') choice = input('请输入编号选择功能,其他任意内容退出程序: ')
if choice not in func_dict:
break
func_dict[choice]() # 使用函数对象调用函数 func()

Python3 函数实践之简易购物系统的更多相关文章

  1. Python3 函数基础2

    目录 可变长参数 可变长形参: *args 可变长实参: *容器类 可变长形参: **kwargs 可变长实参: **字典 函数对象 引用 当做容器类型元素 当做参数传给一个函数 当做函数的返回值 函 ...

  2. 由浅入深SCF无服务器云函数实践

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:陈杰,腾讯云架构平台部技术专家 近年来,互联网服务从一开始的物理服务器托管,虚拟机,容器,发展到现在的云函数,逐步无服务器化,如下表所示. ...

  3. python 操作mysql数据库之模拟购物系统登录及购物

    python 操作mysql数据库之模拟购物系统登录及购物,功能包含普通用户.管理员登录,查看商品.购买商品.添加商品,用户充值等. mysql 数据库shop 表结构创建如下: create TAB ...

  4. [ python ] 购物系统

    作业需求 1. 购物系统,能够注册登录,用户第一次登录后,让用户输入金额,然后打印商品列表2. 允许用户根据商品编号购买商品3. 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒4. 购买完一 ...

  5. Django之简易用户系统(3)

    目录 1. 总体设计思路 2. 搭建简易用户系统 2.1 配置模型Model 2. 2 写入数据库: 2.3 数据库验证表: 2.4 路由URL配置: 2.5 用户增加 后台执行脚本配置: 视图模板配 ...

  6. Java Web之网上购物系统(注册、登录、浏览商品、添加购物车)

    眼看就要期末了,我的专业课也迎来了第二次的期末作业---------<网上购物系统>.虽然老师的意图是在锻炼我们后台的能力,但是想着还是不利用网上的模板,准备自己写,以来别人写的静态页看不 ...

  7. 案例:我行我素购物系统 v1.1

    系统逻辑结构: import java.util.Scanner; public class ShoppingSystem { public static void main(String[] arg ...

  8. java基本打印练习《我行我素购物系统》

    public class ShoppingSystem{ public static void main(String[] args){ //System.out.println("**** ...

  9. AngularJs打造一个简易权限系统

    AngularJs打造一个简易权限系统 一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJ ...

随机推荐

  1. Docker笔记(十二):Docker Compose入门

    1. Compose简介 Docker Compose是Docker官方的用于对Docker容器集群实现编排,快速部署分布式应用的开源项目.Docker Compose通过docker-compose ...

  2. nyoj 517-最小公倍数 (python range(start, end) range(length))

    517-最小公倍数 内存限制:64MB 时间限制:1000ms 特判: No 通过数:2 提交数:11 难度:3 题目描述: 为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致. 但也并 ...

  3. 【dp】 AreYouBusy

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意: 多组背包, 0类型为为至少去1样, 1为至多取1样, 2 为随意. 如果将2类型 再添加 ...

  4. 分析facebook的AsyncDisplayKit框架,async-display使用async-transaction

    上一篇<分析facebook的AsyncDisplayKit框架中的Transaction的工作原理>介绍了fb的asdk的异步事务ASAsyncTransaction,本篇介绍其在asd ...

  5. goland学习-go常用命令使用

    goland学习-go常用命令使用 1.跨平台编译:env GOOS=linux GOARCH=amd64 go build 2.获取go第三方包:go get -u github.com/go-sq ...

  6. workspaces only allow trusted client with self-signed cert

    1. 生成ca. openssl genrsa -out CA_neonone.workspace.key 2048 openssl req -x509 -new -nodes -key CA_neo ...

  7. Spring Boot 注解之ObjectProvider源码追踪

    最近依旧在学习阅读Spring Boot的源代码,在此过程中涉及到很多在日常项目中比较少见的功能特性,对此深入研究一下,也挺有意思,这也是阅读源码的魅力之一.这里写成文章,分享给大家. 自动配置中的O ...

  8. Virtualbox修改虚拟机分配内存的大小

    起因:因为虚拟机刚开始分配的内存太小,导致太卡, 解决方法:修改虚拟机分配内存的大小 方法一:必须在关闭ubuntu的前提下进行,否则无法修改 点击设置 系统选项 主板中的内存大小 之后开启即可 方法 ...

  9. 使用spring boot配置Gmail邮箱发送邮件

    最近项目有用到配置Gmail来发送通知邮件给客户,由于国内众所周知的原因,联调测试中遇到了一些问题,不过好在都一一解决了,现在做个记录,也给其他同仁做个参考. 相关配置: spring.mail.ho ...

  10. Chapter 01—Introduction to R

    1.getwd():list the current working directory. (即获得当前工作路径) 2.setwd("mydirectory"):change th ...